I opened a JIRA https://issues.apache.org/jira/browse/AMQ-3121 and attach a patch, it is for connection creation optimization. For the timing issue, I will try to create a case later. Thanks.
2011/1/6 Gary Tully <gary.tu...@gmail.com> > that sounds like a reasonable optimization that can avoid the need to > create a connection if the RA is deployed in local transaction only > mode (ie: uses the regular non xa connection factory) > One thought, it may be a good idea to produce a simple junit test case > that demonstrates the timing issue with connection creation and > immediate close, this may be a more general problem. > > > On 28 December 2010 02:29, Ivan <xhh...@gmail.com> wrote: > > Hi, > > I am learning the ActiveMQ RA module, and could not understand some > > codes in the getXAResources method of ActiveMQResourceAdapter class, > please > > help to give some comments, thanks. > > a. The implementation class of XAResource is > > org.apache.activemq.TransactionContext, and it holds a reference to a > > ActiveMQConnection, so is it reasonable to close the connection in the > > finally block ? > > b. Sometimes, while calling the connection.close() method, the > > wireformat handshaking is not finished, and some EOFException or Socket > > reset exception is always thrown, although it might not cause problems, > it > > seems to be annoying. So if the XaSession is only created by > > ActiveMQXAConnection, and ActiveMQXAConnection could only be created by > > ActiveMQXAConnectionFactory, so how about checking whether the connection > > factory is an instance of XAConnectionFactory. > > If I do not miss anything, I could try to open a JIRA and create a > > patch. > > > > ---> > > public XAResource[] getXAResources(ActivationSpec[] activationSpecs) > > throws ResourceException { > > Connection connection = null; > > try { > > connection = makeConnection(); > > if (connection instanceof XAConnection) { > > XASession session = > > ((XAConnection)connection).createXASession(); > > XAResource xaResource = session.getXAResource(); > > return new XAResource[] { > > xaResource > > }; > > } > > return new XAResource[] {}; > > } catch (JMSException e) { > > throw new ResourceException(e); > > } finally { > > try { > > connection.close(); > > } catch (Throwable ignore) { > > // > > } > > } > > } > > <---- > > > > -- > > Ivan > > > > > > -- > http://blog.garytully.com > http://fusesource.com > -- Ivan