[
https://issues.jboss.org/browse/JBTM-2264?page=com.atlassian.jira.plugin....
]
Tom Jenkinson commented on JBTM-2264:
-------------------------------------
Hi Evgeniy,
This issue comes about due to different handling of detecting duplicate XAResources when
enlistResource is called on a transaction. With Bitronix (and possibly Atomikos) when an
XAR is enlisted pointer comparison is used to detect whether or not an equivalent XAR is
registered. With Narayana we use isSameRM to detect if the XAR are equivalent, even if
they have different references.
With BTM, it means that two different Xid are enlisted for the same resource manager, with
Narayana it should have allowed us to use a single Xid for the two connections. In
concrete terms your test leads to Narayana issuing the following calls:
{quote}
xaResource1.start(xid1, TMNOFLAGS)
xaResource2.start(xid1, TMJOIN)
{quote}
Unfortunately with Oracle that results in an exception as you have found when the driver
reports that the two XAresources are for the same resource manager.
When Narayana is deployed in WildFly or EAP there is code in our JCA there to override the
isSameRM method such that it will return false for Oracle and the two Xids would be
created similar to BTM.
I am still looking into this and will update you next week,
Tom
Error enlisting second xa resource on the same oracle instance but
other schema
-------------------------------------------------------------------------------
Key: JBTM-2264
URL:
https://issues.jboss.org/browse/JBTM-2264
Project: JBoss Transaction Manager
Issue Type: Bug
Components: JTA
Affects Versions: 5.0.3
Reporter: Evgeniy Smelik
Assignee: Tom Jenkinson
Attachments: sscce.zip, sscce.zip, test.log
I've got an exception {{java.sql.SQLException: ConnectionImple.registerDatabase -
ARJUNA017017: enlist of resource failed}} while preparing statement in the second
connection within the same oracle instance but other schema.
Whole stack trace:
{noformat}
oracle.jdbc.xa.OracleXAException
at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1110)
at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:240)
at
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:741)
at
com.arjuna.ats.internal.jdbc.ConnectionImple.registerDatabase(ConnectionImple.java:983)
at
com.arjuna.ats.internal.jdbc.ConnectionImple.prepareStatement(ConnectionImple.java:179)
at SimpleJdbcTest.insert(SimpleJdbcTest.java:46)
at SimpleJdbcTest.main(SimpleJdbcTest.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
java.sql.SQLException: ConnectionImple.registerDatabase - ARJUNA017017: enlist of
resource failed
at
com.arjuna.ats.internal.jdbc.ConnectionImple.registerDatabase(ConnectionImple.java:1003)
at
com.arjuna.ats.internal.jdbc.ConnectionImple.prepareStatement(ConnectionImple.java:179)
at SimpleJdbcTest.insert(SimpleJdbcTest.java:46)
at SimpleJdbcTest.main(SimpleJdbcTest.java:36)
{noformat}
(Detail log and SSCCE are attached).
I use jboss transaction manager in standaloine application just to test jboss JTA
implementation. The same code works well if one and second data sources use own
(different) database instances.
I note that atomikos and bitronix JTA implementation works correctly in the same
environment irrespectively single oracle instance is used or not.
I found similar problem
[
here|http://stackoverflow.com/questions/23617179/jboss-6-1-unable-to-get-...].
--
This message was sent by Atlassian JIRA
(v6.3.1#6329)