You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Timothy Bish (Closed) (JIRA)" <ji...@apache.org> on 2011/09/27 23:08:46 UTC

[jira] [Closed] (AMQ-1569) Dead lock during XA recovery when activeMq 5.0.0 is used with Atomikos

     [ https://issues.apache.org/jira/browse/AMQ-1569?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Timothy Bish closed AMQ-1569.
-----------------------------

       Resolution: Fixed
    Fix Version/s:     (was: NEEDS_REVIEWED)

Commenter reports issue fixed, no test case given to test the issue.
                
> Dead lock during XA recovery when activeMq 5.0.0 is used with Atomikos
> ----------------------------------------------------------------------
>
>                 Key: AMQ-1569
>                 URL: https://issues.apache.org/jira/browse/AMQ-1569
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.0.0
>            Reporter: Mathieu Baril
>
> Hi,
> I developed an application that runs in an OSGI environment (Equinox). My application is developed using Spring Dynamic Modules 1.0-rc2, ActiveMq 5.0.0 and Atomikos 3.2.2.
> Sometimes (50% of the time) when I start my application, the bundle that declare the connection factories to the jms broker runs into deadlock.
> This is the declaration of my connection factories:
> <bean id="activemq.connectionFactory" class="com.trilliantnetworks.griffin.utils.CustomXAJMSConnectionFactory">
>     <property name="brokerURL" value=" failover:(tcp://software2:61616,tcp://software1:61616)" />
>   </bean>
>   
>   <!-- Configure the JMS connector; call init to register for recovery! -->
>   <bean id="atomikos.connectionFactory"
>         class="com.atomikos.jms.TopicConnectionFactoryBean" init-method="init">
>     <property name="resourceName" value=" jms.connectionFactory"/>
>     <property name="xaTopicConnectionFactory" ref=" activemq.connectionFactory "/>
>   </bean>
>   
>   <bean id="listen.jms.spring.singleConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory" destroy-method="destroy">
>     <constructor-arg ref="atomikos.connectionFactory "/>
>   </bean>
> Looking deeper in the code I found that the application block when init is called in com.atomikos.jms.TopicConnectionFactoryBean.
> The init method calls the method isSameRM of org.apache.activemq.TransactionContext that eventually calls waitForBrokerInfo in org.apache.activemq.ActiveMQConnection. The method blocks on brokerInfoReceived.await(). So I tried to found why brokerInfoReceived.countDown() is never called...
> I found that this is because createTransportListener of org.apache.activemq.transport.failover.FailoverTransport is sometimes called before the member variable transportListener was set. createTransportListener is called by the Thread ActiveMQ Transport: tcp://software2/192.9.200.182:61616 while setTransportListener is called by the main Thread that initialize my bundle.
> I am unable to reproduce the issue with activeMQ 4.1.1 so I think that is issue has been introduced with version 5.0.0.
> Also, when I use the connection URL "tcp://software2:61616" instead of "failover:(tcp://software2:61616,tcp://software1:61616)" my application always start correctly.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira