Over the past days, I worked on improving the connection pooling in ActiveMQ, mainly for outbound. I found that: * the o.a.a.pool package has a limited throughput when using persistence messaging, because all threads reuse a single connection, but the broker will handle the messages sequentially, so the throughput of using a single transaction in multiple threads is the same as using a single thread. * the activemq resource adapter used for outbound is really slow (using jencks), because the connection is completely reset after each use. The connection infos need to be sent each time + creation of an advisory consumer on the connection, + createion of the session + creation of a producer. These operations are very cpu intensive on the broker side (no real idea why). I think this should be improved by pooling sessions / producers.
For my current needs, I have enhanced the o.a.a.pool package to support enlisting the current session in an active xa transaction, and by allowing several connections to be used to raise the global throughput. I have also added in jencks a derived pooled connection factory which is compatible with jencks jca inbound support (the main problem is that the XAResource#isSameRM need to work and recognize that the inbound connection and outbound connection use the same RM). My last thought is that i wonder if the org.apache.activemq.pool package should be in its own module because it has its own set of dependencies in addition to the standard jms client (commons-pool mainly) which can lead to problems with classloaders. -- Cheers, Guillaume Nodet