|
[
Permlink
| « Hide
]
Manu T George added a comment - 03/Oct/07 12:45 AM
https://issues.apache.org/jira/browse/OPENEJB-702
https://issues.apache.org/jira/browse/GERONIMO-3354
This fixes the issue. Running the tests shows the same no of failures as before applying the patch so assuming it doesn't break anything.
Manu T George made changes - 09/Oct/07 11:45 PM
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 { 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 { Once await is called on brokerInfoReceived which is a countdown latch currently brokerInfoReceived.countDown() never gets called. Actually this should get called on the 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){ protected void asyncOneWay(Object command) throws IOException{ 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(); I hope I made the issue clear. Can someone verify the patch or make a fix for this.
David Jencks made changes - 23/Mar/08 11:32 AM
Applied modified version of the patch in rev 640340. Passed options into server.connect method so that correct TransportAcceptListener is sure to be used.
Would be a good idea to check if it works in 5.1
David Jencks made changes - 07/Apr/08 03:16 PM
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||