[ https://issues.apache.org/jira/browse/ARIES-1246?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Guillaume Nodet updated ARIES-1246: ----------------------------------- Fix Version/s: transaction-jdbc-2.1.0 > ConnectionManagerFactory does not honor aries.xa.name service property > ---------------------------------------------------------------------- > > Key: ARIES-1246 > URL: https://issues.apache.org/jira/browse/ARIES-1246 > Project: Aries > Issue Type: Bug > Components: Transaction > Affects Versions: 1.0.1-SNAPSHOT > Environment: JBoss Fuse 6.1, aries-transaction/1.0.1-redhat-610379, > geronimo-connector/3.0 > Reporter: Jörn Gersdorf > Assignee: Guillaume Nodet > Fix For: transaction-jdbc-2.1.0 > > > I´m running JBoss Fuse 6.1 (which includes > org.apache.aries.transaction.jdbc/1.0.1-redhat-610379 as well as > geronimo-connector/3.0). > When using XA auto-enlisting it seems that > {{org.apache.aries.transaction.jdbc.internal.ConnectionManagerFactory}} does > not use the service property {{aries.xa.name}} as a name; instead it uses > {{getClass().getName()}}: > {noformat} > if (connectionManager == null) { > // Instantiate the Geronimo Connection Manager > connectionManager = new GenericConnectionManager( > transactionSupport, > poolingSupport, > subjectSource, > connectionTracker, > transactionManager, > managedConnectionFactory, > getClass().getName(), // <-- this may be wrong > getClass().getClassLoader()); > {noformat} > This leads to problems in > {{org.apache.geronimo.transaction.manager.RollbackTask}} when looking up the > {{NamedXAResourceFactory}} in case of {{XAException.XAER_RMFAIL}}: > {noformat} > } else if (e.errorCode == XAException.XAER_RMFAIL || > e.errorCode == XAException.XAER_RMERR) { > //refresh the xa resource from the > NamedXAResourceFactory > if (manager.getCommitter() instanceof > NamedXAResource) { > String xaResourceName = > manager.getResourceName(); // <-- this will resolve to aries.xa.name´s > property value > NamedXAResourceFactory namedXAResourceFactory = > txManager.getNamedXAResourceFactory(xaResourceName); // <-- this will be null > since the factory has been registered under > "org.apache.aries.transaction.jdbc.internal.ConnectionManagerFactory" > {noformat} > Now the problem is that {{manager.getResourceName()}} resolves to the value > of the service property {{aries.xa.name}}, but > {{txManager.getNamedXAResourceFactory(xaResourceName)}} will return null > since {{ConnectionManagerFactory}} registered the > {{GenericConnectionManager}} under its fully qualified class name > ({{org.apache.aries.transaction.jdbc.internal.ConnectionManagerFactory}}). > Result in my case is an endless loop of RollbackTasks since the > NamedXAResourceFactory will never be found. > Relevant stack trace of registration: > {noformat} > Daemon Thread [FelixStartLevel] (Suspended (breakpoint at line > 36 in XAResourceInsertionInterceptor)) > owns: AtomicBoolean (id=205) > > XAResourceInsertionInterceptor.<init>(ConnectionInterceptor, String) line: 36 > > > XATransactions.addXAResourceInsertionInterceptor(ConnectionInterceptor, > String) line: 61 > > GenericConnectionManager$InterceptorsImpl.<init>(TransactionSupport, > PoolingSupport, SubjectSource, String, ConnectionTracker, TransactionManager, > ManagedConnectionFactory, ClassLoader) line: 129 > GenericConnectionManager.<init>(TransactionSupport, > PoolingSupport, SubjectSource, ConnectionTracker, > RecoverableTransactionManager, ManagedConnectionFactory, String, ClassLoader) > line: 67 > > org.apache.aries.transaction.jdbc.internal.ConnectionManagerFactory.init() > line: 140 > > org.apache.aries.transaction.jdbc.internal.ManagedDataSourceFactory.register() > line: 116 > Activator.addingService(ServiceReference) line: 95 > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)