Return-Path: Delivered-To: apmail-activemq-dev-archive@www.apache.org Received: (qmail 81064 invoked from network); 11 Oct 2007 10:44:45 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 11 Oct 2007 10:44:45 -0000 Received: (qmail 68895 invoked by uid 500); 11 Oct 2007 10:44:33 -0000 Delivered-To: apmail-activemq-dev-archive@activemq.apache.org Received: (qmail 68856 invoked by uid 500); 11 Oct 2007 10:44:33 -0000 Mailing-List: contact dev-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list dev@activemq.apache.org Received: (qmail 68847 invoked by uid 99); 11 Oct 2007 10:44:33 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 11 Oct 2007 03:44:33 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO brutus.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 11 Oct 2007 10:44:44 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 72F4771420E for ; Thu, 11 Oct 2007 03:44:24 -0700 (PDT) Message-ID: <12446004.1192099464467.JavaMail.jira@brutus> Date: Thu, 11 Oct 2007 03:44:24 -0700 (PDT) From: "Manu T George (JIRA)" To: dev@activemq.apache.org Subject: [jira] Commented: (AMQ-1438) When in XA Transaction Active-MQ integrated with OpenEJB hangs in the isSameRM method of LocalAndXATransaction. In-Reply-To: <31037315.1191396622753.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/activemq/browse/AMQ-1438?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_40345 ] Manu T George commented on AMQ-1438: ------------------------------------ I believe I owe an explanation for the JIRA. The problem faced is a hang in the method below when the Geronimo TM calls it. public boolean isSameRM(XAResource other) throws XAException { if (other instanceof WrapperNamedXAResource) { return xaResource.isSameRM(((WrapperNamedXAResource)other).xaResource); } return false; } The hang is because this method invokes org,apache.activemq.ActiveMQConnection.getResourceManagerId() This method is shown below public String getResourceManagerId() throws JMSException { waitForBrokerInfo(); if( brokerInfo==null ) throw new JMSException("Connection failed before Broker info was received."); return brokerInfo.getBrokerId().getValue(); } The waitForBrokerInfo() method is shown below private void waitForBrokerInfo() throws JMSException { try { brokerInfoReceived.await(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw JMSExceptionSupport.create(e); } } Once await is called on brokerInfoReceived which is a countdown latch currently brokerInfoReceived.countDown() never gets called. Actually this should get called on the else if ( command.isBrokerInfo() ) { this.brokerInfo = (BrokerInfo)command; brokerInfoReceived.countDown(); this.optimizeAcknowledge &= !this.brokerInfo.isFaultTolerantConfiguration(); } block of the onCommand method of org.apache.activemq.ActiveMQConnection. This is not getting called. On investigating and with some help from AMQ IRC , I found that there are two methods in org.apache.activemq.transport.vm.VMTransport. They are given below protected void syncOneWay(Object command){ final TransportListener tl=peer.transportListener; prePeerSetQueue=peer.prePeerSetQueue; if(tl==null){ prePeerSetQueue.add(command); }else{ tl.onCommand(command); } } protected void asyncOneWay(Object command) throws IOException{ messageQueue=getMessageQueue(); try{ messageQueue.put(command); wakeup(); }catch(final InterruptedException e){ log.error("messageQueue interupted",e); throw new IOException(e.getMessage()); } } The problem here is even when i set async=true for the VMTransport when the command BrokerInfo is sent syncOneWay is called. At that time TransportListener tl=null. So it gets added to prePeerSetQueue. The reason for this happening is that in org.apache.activemq.transport.vm.VMTransportFactory when the below lines are called a brokerInfo is sent as server.connect() is called. The async=true is not yet set resulting in the syncOneWay getting called. Only after that IntrospectionSupport.setProperties(vmtransport,options); is called and async is set to true. Due to this inconsistency the BrokerInfo command gets lost. VMTransport vmtransport=server.connect(); IntrospectionSupport.setProperties(vmtransport,options); I hope I made the issue clear. Can someone verify the patch or make a fix for this. > When in XA Transaction Active-MQ integrated with OpenEJB hangs in the isSameRM method of LocalAndXATransaction. > ---------------------------------------------------------------------------------------------------------------- > > Key: AMQ-1438 > URL: https://issues.apache.org/activemq/browse/AMQ-1438 > Project: ActiveMQ > Issue Type: Bug > Components: Connector, Transport > Affects Versions: 4.1.1 > Environment: All > Reporter: Manu T George > Priority: Critical > Fix For: 4.1.2 > > Attachments: AMQ-1438.patch > > > I was facing a problem with the AMQ 4.1 with the LocalAndXATransaction class's isSameRM waiting indefinitely. The wait is because waitForBrokerInfo calls brokerInfoReceived.await() > where brokerInfoReceived is a countdown latch. Once this is waiting it > never gets resumed. > To trigger it the method onCommand(final Object o) has to be called on > org.apache.activemq.ActiveMQConnection. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.