aries-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jörn Gersdorf (JIRA) <j...@apache.org>
Subject [jira] [Commented] (ARIES-1246) ConnectionManagerFactory does not honor aries.xa.name service property
Date Tue, 23 Sep 2014 06:09:33 GMT

    [ https://issues.apache.org/jira/browse/ARIES-1246?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14144413#comment-14144413
] 

Jörn Gersdorf commented on ARIES-1246:
--------------------------------------

Note that the workaround in https://github.com/tmielke/fuse-demos/tree/master/Camel/Camel-JMS-JDBC-XA-TX-JBossFuse6.0
(mentioned in https://issues.jboss.org/browse/ENTESB-633) does not have the problems described
in this ticket.

> 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
>
> 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)

Mime
View raw message