[jboss-jira] [JBoss JIRA] Resolved: (JBAS-7811) Multithreaded access to remote JDBC datasource is broken
Justin Bertram (JIRA)
jira-events at lists.jboss.org
Tue Mar 23 17:06:38 EDT 2010
[ https://jira.jboss.org/jira/browse/JBAS-7811?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Justin Bertram resolved JBAS-7811.
----------------------------------
Resolution: Done
Solved using java.util.UUID.randomUUID() instead of hashCode().
> Multithreaded access to remote JDBC datasource is broken
> --------------------------------------------------------
>
> Key: JBAS-7811
> URL: https://jira.jboss.org/jira/browse/JBAS-7811
> Project: JBoss Application Server
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: JCA service
> Affects Versions: JBossAS-6.0.0.M2
> Reporter: Justin Bertram
> Assignee: Justin Bertram
> Fix For: JBossAS-6.0.0.M3
>
>
> Heavy access to a remote JDBC datasource (i.e. one configured with <use-java-context>false</use-java-context>) with multiple threads sometimes results in errors.
> The root of this problem is how the proxied datasource objects (e.g. ResultSet, Connection, Statement, etc.) are stored in the server-side HashMap for re-use by the remote client. These objects are, not surprisingly, keyed by their respective hash code (i.e. object.hashCode()). There are cases where different objects return the same hashCode which means a remote client can close someone else's ResultSets, etc. One can easily see this by turning on DEBUG logging and executing your test. For example:
> DEBUG [org.jboss.resource.adapter.jdbc.remote.WrapperDataSourceService] Created ResultSet proxy for invoker=jboss:service=invoker,type=jrmp, targetName=jboss.jca:service=DataSourceBinding,name=PostgresDS, cacheID=12215563
> DEBUG [org.jboss.resource.adapter.jdbc.remote.WrapperDataSourceService] Created ResultSet proxy for invoker=jboss:service=invoker,type=jrmp, targetName=jboss.jca:service=DataSourceBinding,name=PostgresDS, cacheID=12215563
> ...
> DEBUG [org.jboss.resource.adapter.jdbc.remote.WrapperDataSourceService] Closed ResultSet=12215563
> Of course, the *other* client using the ResultSet whose cacheID is "12215563" will break when it tries to access it later.
> To solve this problem, something other than hashCode should be used to key the HashMap entries.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list