159940: Inefficiency in connection recycling
A call to borrowConnection() used to become blocked due to one thread entering canBeRecycledForCallingThread() it that then waited for the SessionHandleState lock - if in use by another connection at the same time. We fixed this by making canBeRecycledForCallingThread() returning false without locking.
167171: JMS issue on double open
Fixed a JMS issue which was first described here.167189: JDBC/JMS connectors: create JNDI reference only after pool is created
We now create the JNDI reference only after the pool has been created - it does not make sense to expose a faulty pool.
167206: Improve logging - clarify "Prepare: NO vote"
We've clarified the error reporting to make it clearer what happened, and avoid confusion.
167208: Improve log warning for transaction timeout message
We've improved the logging for timeouts - to avoid confusion.
167209: Don't refresh XAResource for 1-phase commit
We used to refresh to XAResource on connectivity issues. Refreshing made little sense in case of 1-phase commit because there is no prepared transaction XID in the datasource, meaning a different connection would probably not know about it.
167220: Ensure that testQuery has no pool overhead
This is one of the best performance improvements we ever made: we now ensure that the (new) pool does not impact performance when setting a testQuery. This makes our pools about as fast as non-JTA/XA pools, meaning reliability comes without the performance cost for your application! (Check our commercial offerings if you want even more…)
167530: Recovery bug: init/checkpoint does not take the purge delay into account
Fixed a bug in the new recovery where checkpoints would purge too much.
167532: CachedRepository race condition: missing synchronisation
Fixed a synchronisation bug that would show up under high loads and would lead to incomplete checkpoints.
167170: Revert autoCommit in non-XA datasource
We had to revert case 166923 of the 4.0.5 release because it would make JTA-use of non-XA connections non-trivial: the application would need to explicitly call setAutoCommit(false) for every connection gotten.