You can now also register listener instances via the JDK ServiceLoader mechanism.
A JTA-specific import (on heuristic exceptions) existed in our Participant interface - this is now removed.
Unless the AtomikosConnectionFactoryBean is set to use localTransactionMode, we now always create XA-capable sessions. This facilitates compatibility with third-party platforms like Spring.
A new transaction MBean now supports easier viewing of active transactions, as well as important transaction statistics and counters (like percent committed, percent aborted and so on).
It is now possible for internal or external modules (using transactions-api) to register for important life cycle events involving transaction and connection pool states, like transaction creation, commit, rollback or heuristic outcomes. See the com.atomikos.icatch.event package and its interaction with the ServiceLoader mechanism in Java.
The licensing framework has been refactored to use signed public/private key technology. A new license consists of 2 files: a property file and a signature file, both of which need to be added to the class path of your application (or, alternatively, put in some folder whose location is specified as system property 'com.atomikos.license_folder'). Also, the default 30 minute evaluation license has been removed from ExtremeTransactions.
Added/improved JMX support for JDBC and JMS in ExtremeTransactions.
We've improved support for short properties that need to be converted from a text/XML configuration file.
Fixed return type of the getParentLogger method.
Fixed a critical bug where errors on delist would cause connection pool exhaustion.
See this forum post for details: JMX utility methods have been added to our ConnectionFactory.
Empty, committing transactions would needlessly generate logging overhead and also generate needless heuristic warnings upon recovery. This has now been fixed. For the original report, see this forum post.
The PDF guides are now downloadable as separate artifacts. This keeps the product release small and compliant with your maven repository, and shortens the build time for bug fixes.
Refactored these important classes - the code needed some cleaning...
JDBC statements are now logged with the SQL arguments.
The examples are now shipped as separate artifacts so the product distribution is minimal and maven-compliant for easy deployment to your repository, and shortens the build time for bug fixes.
When a JTA transaction is resumed by its thread, it will also trigger resume at the XA level for all enlisted XAResource instances.
Avoid the overhead of a testQuery by setting maxLifetime: this new property removes from the pool any connection that stays around longer than this limit. This closes your connections before any configuration-specific timeouts do, and mostly deprecates the need for a testQuery. This, in turn, improves performance of the pool because borrowing a connection no longer implies a roundtrip to the database (inside a synchronized block!).
When you register Synchronization instances then this will no longer imply / force 2-phase commit. This increases performance for use cases with only one XAResource, where the 1-phase commit optimization can now product its maximum efficiency.
The examples are now built and run with maven.
The transactions-jms-deprecated module/jar has been dropped.
The transactions-jdbc-deprecated module/jar has been dropped.
Improved the way getStatus() works.
Improved exception chaining so root causes are more visible.
Improved TMJOIN behavior so this feature can now be fully exploited at the XAResource level.
A new, alternative logging implementation is available. It avoids object serialization and can be activated by setting the init property com.atomikos.icatch.serializable_logging to false.
The commercial edition now contains a new module write-ahead logging for increased performance.
Another improvement of the way root causes are handled.
The afterCompletion method of synchronization instances no longer gets "UNKNOWN" for read-only transactions.
We no longer support Java 5 since it is deprecated anyway.