Release Notes for TransactionsEssentials 3.5.8

33395: Epoch file empty after shutdown

Sometimes a crash would corrupt the epoch file - this has now been fixed.

30347: Change build files to upload in our maven repo structure

We now upload releases to our online maven repository.

33703: Deadlock in JMS

Fixed a deadlock occurring in non-JTA/XA use of our JMS.

33794: Logfile corrupted exception to catch

Improved exception handling in case of corrupted log files - see

31037: Epoch file corrupted after crash

Added a sync call upon writing the epoch file.

33674: Invalid XAConnections are not removed from the pool

Fixed a bug in testing XAConnections - see

33702: MessageConsumerSession: catch Throwable to better avoid thread exit?

Improved exception handling in the JMS listener thread.

Release Notes for TransactionsEssentials 3.5.7

32251: Set transaction isolation level on DataSource

Corrected bug: when the selected default isolation level is not supported by the native JDBC driver then an exception should be thrown rather than just a log warning generated.

32800: Bug in connection pool reaping logic

The reap logic did not correctly take into account the acquisition time.

32801: Thread blocked on java.util.logging.ConsoleHandler

Improved performance by checking the SLF4J log level to avoid unnecessary synchronization issues.

Release Notes for TransactionsEssentials 3.5.6

32251: Set transaction isolation level on DataSource

It is now possible to specify a default isolation level on the main datasource classes.

32252: Make AtomikosJTATransactionFactory compatible with Hibernate 3.2.6

Added a fix for correct configuring of the Hibernate properties. See this forum post for the report (thanks to Les Walker):

Release Notes for TransactionsEssentials 3.5.5

30394: Generate log warning if old JDBC/JMS connectors are used

When you configure the deprecated drivers, you will now get a warning in the console log file.

30897: Add product version to the logs during startup

The product version is now written into the console log file during startup.

30979: XAResourceTransaction: improve logging

We now write the information to the console file before doing the XA calls. This improves diagnostics in case of exceptions.

31037: Epoch file corrupted after crash

Added a sync call upon writing the epoch file.

31209: XAConnection not refreshed during commit

Bouncing the back-end did not recover XAConnections and consequently made pending commits go into heuristic hazard state when there was no real need to do so.

31275: Forced close of statement should also remove the statements

When statements were closed upon timeout/rollback, the closed statements were not removed from the list of past statements, causing many 'close' warnings in the logs. This has now been fixed.

30664: ConcurrentModificationException when forcing statements to close

Added synchronization to avoid concurrency effects.

30752: NonXADataSource connection interference

There was a bug in (re)setting the autoCommit mode of a non-xa connection, causing it to be set when a connection was already being reused under high loads. This in turn led to repeated heuristic commit errors for the reusing transaction. Both problems have now been fixed.

30199: Improve warnings and docs if sessionTransacted=false

Improved diagnostic warnings to clarify the consequence of using non-transacted sessions.

Release Notes for TransactionsEssentials 3.5.4

29708: Statements reusable in autoCommit mode after transaction timeout

Statements that were opened inside a transaction would still be usable in autoCommit mode after the transaction timed out. This has been fixed by closing all remaining statements on timeout of the transaction.

29251: Resource already registered using JMS

Corrected a JMS initialization bug as suggested in the forums:

Release Notes for TransactionsEssentials 3.5.3

28665: Shrinking pool: should check whether connection is being used or not

The connection pool would not always check if a connection was in use before destroying it. Under high loads this would lead to problems, and this bug has now been fixed.

28678: ConnectionPool borrowConnection: exception causes destroy of last pooled connection!

An error while checking for available connections would lead to the improper destroy of the last connection in the pool - this has now been fixed.

27885: QueueConnectionFactoryBeanBeanInfo inconsistent: xidFactory

The xidFactory attribute had been removed from the bean class but not from the bean descriptor; this is now fixed.

28843: Connection in use after timeout in nonxa JDBC

In some cases (notably a transaction timeout in between borrowing and first using a connection) the connection state would get corrupted, leading to subsequent messages like: "Connection accessed by transaction ... is already in use in another transaction:... Non-XA connections are not compatible with nested transaction use." This has been fixed.

28623: Jms connection pooling bug

Fixed a threading issue reported in the forums:

28388: Resource already registered using JMS

Fixed a bug in the JMS JNDI mechanism - for details see this forum post:

28680: Refactor borrowConnection in pool

Improved the logic for borrowing a connection.

29060: NPE when checking pool connections under high load

Fixed a bug where race conditions could lead to NullPointerExceptions in checking a non-xa connection's reusability.

Release Notes for TransactionsEssentials 3.5.2

27857: Transaction timeout in JDBC results in autoCommit mode

Fixed a bug in the connection state handling: timeout and rollback could result in a JDBC connection with autoCommit on.

27885: QueueConnectionFactoryBeanBeanInfo inconsistent: xidFactory

The xidFactory attribute had been removed from the bean class but not from the bean descriptor; this is now fixed.

27920: Default timeout property wrong name

The property name in the sample file was wrong - this has been corrected.

Release Notes for TransactionsEssentials 3.5.1

27793: Non-xa proxy: useCount incremented twice when reusing exisiting proxy

When the same thread called getConnection() twice then there was a reuse bug as reported here:

27614: Deadlock in JMS during onTerminated callback of PooledJMSConnection

Fixed a deadlock case between the connection pool and the JMS pooled connection, due to a synchronized observer callback.

Release Notes for TransactionsEssentials 3.5

21459: Maven POM support

We now offer a maven POM structure as a separate download.

21576: XAResourceTransaction: improve heuristic message

Improved (clarified) heuristic log comments for XA branches.

21689: Improve recovery problem across XA drivers

Improved recovery when the JDBC/XA drivers are upgraded between shutdown and restart.

26426: Add option to unsubscribe on close of topic receiver

The MessageDrivenContainer now supports unsubscribe on close - meaning that closing the container will also unsubscribe for any durable subscriptions (if this option is set).

21574: JmxLogAdministrator: option to show only heuristics

The JmxLogAdministrator can now be configured to show only heuristic transactions (i.e., the real problem cases) instead of all active transactions.

23486: Move startup properties out of TSInitInfo and into AbstractUserTransactionServiceFactory

Refactored the TSInitInfo interface to move out implementation-specific startup properties. These are now in the factory class(es) for the UserTransactionService corresponding to the implementation.

23693: Optimize roots: don't log prepared state

We have optimized logging even more for root transactions: prepared states do not generate any logging overhead any more. This cuts down logging costs by 30% or more.

21350: Add support for destinationName in JMS utilities

The JMS utility classes (in package com.atomikos.jms.extra) now support setting the (provider-specific) destinationName; this facilitates Spring (or other) configuration because you no longer need to obtain a reference to a Destination object first...

26045: Make build work for Java 5

The build now works for Java 5 also. Previously, the build could only be done on JDK 1.4

26911: Improved handling of heuristic hazard problems

Heuristic (hazard) exception states are now managed even better - this includes improved retry handling and better resolution after recovery.

26976: Deadlocks

Fixed a deadlock in the JMS pools.

24071: Simplify nonxa with new connection recycling

Simplified the thread-specific reuse of non-xa JDBC connections, by exploiting the newer 'connection recycling' that is now built-in into the pools.

24109: Heuristic messages: improve clarity

Heuristic log comments were improved for extra clarity.

24579: Support commit ordering

If single-threaded two-phase commit is enabled (in the
file) then commits are now executed in the same order as the resources were
accessed by the transaction.

26240: Create Hibernate ConnectionProvider

We have added a Hibernate ConnectionProvider implementation to facilitate Hibernate 3.3+ configuration of the DataSource.

26398: Allow resume of transaction with status MARKED_ROLLBACK

It is now possible to resume a transaction after it was marked as rollbackOnly.

25809: Refactor MessageDrivenContainer to allow hot property change detection

The MessageDrivenContainer now allows (re)setting most of its properties after initialization.

Release Notes for TransactionsEssentials 3.4.4

26380: AtomikosDataSourceBean fails if DB down initially

Fixed pool start-up resilience to DBMS unavailability.

Release Notes for TransactionsEssentials 3.4.3

26005: Closing connection factory does not close all connections

Now the JDBC and JMS connectors behave better when closed: they will also close the resources for recovery - meaning that all connections should be cleaned up.

Release Notes for TransactionsEssentials 3.4.2

25671: Recovery interferes with active enlist/delist

Improved handling or recovery interleaved with active transaction processing.

25758: Improve class loading for OSGI

Added extra strategy for loading proxy classes and interfaces, as suggested by

25678: JDBC Connection not refreshed on errors during enlist

Corrected a bug where enlist failures (such as lost connectivity to back-end) would cause recurring connection problems in the pool.

24532: AtomikosNonXADataSourceBean degraded performance

Optimized dynamic proxy handling to avoid JDK overhead.

Release Notes for TransactionsEssentials 3.4.1

23722: NonXaDataSource: add readOnly feature

Instances of the datasource can now be marked as 'readOnly', in which case the exceptions upon recovery should go away.

24883: Spring JMS bank demo does not work (blocks on createConsumer for activeMQ)

Fixed blocking problem in the Spring/jms/ActiveMQ sample.

25010: java.util.ConcurrentModificationException

Fixed concurrency problem in JDBC.

25033: Timeout overflow problem

Fixed timeout overflow for large integers.

25131: JMS deprecated jars not included in download

Added inclusion of the 'deprecated' JMS jars in the download.

25222: Oracle AQ workaround for new JMS

Added Oracle JMS patch code.

25223: Memory leak in 3.4 JMS

Improved closing of sessions in the new JMS facilities.

Release Notes for TransactionsEssentials 3.4

This release mainly focuses on improved JMS support with better JMS 1.1 compatibility and JMS connection pooling. Details are listed below...

24531: Bridge class missing

The Bridge classes in package com.atomikos.jms have been dropped - this functionality can easily be implemented in the application layer.

22186: Solve Hibernate 3.2.6 incompatibility (with Hibernate 3.3 additions)

Hibernate 3.3 and higher are now supported.

23976: xaProperties in JDBC/JMS: default to EMPTY properties, not null

The default value for the xaProperties in JMS and JDBC is now an empty set of properties.

23951: AtomikosDataSourceBean: add setXaDataSource(XADataSource xaDS)

It is now possible to configure the datasource with a pre-configured XADataSource instance.

23790: Improve error messages: centralize exception codes

Improved exception error codes/messages.

24683: patch for Oracle

Added support for Oracle's proprietary close(...) methods.

24560: Add ConcurrentJmsSenderTemplate class

Added support for multi-threaded managed JMS sessions.

23370: Implement connection recycling

Improved connection reuse within the same transaction.

22105: Support commit after close in JMS

Added support for commit-after-close in JMS.

24076: Add default transaction timeout property

Added default transaction timeout startup property.

24005: Default reapTimeout to 0 to avoid reaping when not anticipated

Reaping is now disabled by default. This improves the expected behavior of the pool.

24069: AtomikosConnectionFactoryBean: add setXaConnectionFactory method

It is now possible to configure the new JMS connection factory with a pre-existing XAConnectionFactory instance.

23877: JDBC proxy: rethrow vendor SQLException where possible

Improved reporting of native SQLException messages.

23878: JMS proxies: rethrow vendor JMSException where possible

Improved reporting of native JMSException messages.

23866: Implement new MessageProducerSession

The MessageProducerSession class has been refactored and is now implemented as the JmsSenderTemplate classes in package com.atomikos.jms.extra.

23868: Implement new MessageConsumerSessionPool

The MessageConsumerSession and MessageConsumerSessionPool have been refactored into class MessageDrivenContainer in package com.atomikos.jms.extra.

24502: loginTimeout not passed on to driver

The loginTimeout for JDBC is now passed on correctly to the underlying JDBC driver.

23953: Throw meaningful exception after reaping connection(s)

Using a connection after it's been reaped will now give a better error message.

24567: Not ending transaction (set implicit transaction off)

For non-xa use we now restore the autoCommit setting to the value before it had before a JTA transaction was started.

24689: Logging not conform to J2EE

Improved logging level of startup properties.

24565: OverlappingFileLockException instead of IOException for file channel lock

Better handling of overlapping locks on the log files.

22342: Implement new connection factories for JMS

Added pooled connection support for JMS.

22972: Support non-JTA JMS commits

Allow local (session-level) commits in JMS.

Release Notes for TransactionsEssentials 3.3.5

24394: Reaper reaping prematurely

Corrected initialization of the reap settings to avoid improper reaping.

24566: Wrong java code in jdbc.nonxa.AtomikosThreadLocalConnection

Fixed bug in handling of method calls on a stale handle.

Release Notes for TransactionsEssentials 3.3.4

23844: ClassLoader problem for nonxa JDBC in Tomat

Improved class loading for dynamic proxies.

24246: Catch RuntimeExceptions thrown in Synchronization

Improved exception handling in synchronizations.

Release Notes for TransactionsEssentials 3.3.3

23610: Include changes of latest 3.2.x

Included latest changes of the 3.2.x branch.

23658: Close JDBC vendorconnection when SessionHandleState is terminated.

Underlying JDBC statements are now cleaned up when a connection is put back in the pool.

Release Notes for TransactionsEssentials 3.3.2

22111: Lock file channel instead of lock file for logs

Improved startup protection - thanks to Allen Yu.

23250: Add new pool classes (datasource.pool) to the packaging in the download build file

The build.xml in the download folder now also accounts for the new pool classes.

22615: JNDI lookup of DataSource: make it possible to do this out-of-VM

The JDBC datasource can now be looked up in another VM than the one it was bound in (provided that a remotely accessible JNDI registry is used).

23539: Resource leaking in Console

Corrected rotating file console house-keeping (thanks to Allen Yu).

23251: Add transactions-essentials-all.jar to download zip file

The transactions-essentials-all.jar is now also included by default in the download zip file.

23334: clean up prepared tx if disk full

Improved handling of prepared transactions in case the disk is full and further logging fails during commit.

23485: release 3.3.1 and jndi with jdbc beans

We now allow JNDI references to be looked up before the datasource is initialized.

Release Notes for TransactionsEssentials 3.3.1

23091: Make console log level case insensitive

The console log level is now case insensitive.

23146: merge-in changes from 3.2.4

Included changes from 3.2.4

23180: Slf4J check: log exception instead of ignoring it? (3.3.0)

Exceptions related to log4j integration are now logged.

23184: ClassLoaderHelper doesn't fallback to Class.forName()

Improved class loading.

23185: Cosmetic logging bug in connection pool

Improved logging in connection pool.

23020: AtomikosNonXADataSourceBean: improve logging

Improved logging of configuration parameters.

23021: AtomikosDataSourceBean: pending comma in logging

Improved logging of configuration parameters.

23022: START HERE page refers to old URL for wiki

Updated START HERE page to refer to new website.

Release Notes for TransactionsEssentials 3.3

Release 3.3 is special in the following main things: The full and detailed list of changes is below...

21755: Remove warning: 'depending on license, feature disabled'

Removed obsolete comment on license restrictions.

21733: Show linked exception for JMS

Improved logging in case of JMSException instances - now we also try to log the linked exception.

21519: Disable shutdownhooks on shutdown

Shutdown hooks now disable themselves on shutdown.

21554: Add JmxLogAdministrator on JDK 1.5 or higher

Simplified and documented JMX administration setup.

20430: ConnectionPool: create connections when needed, not at startup

The connection pool now creates connections when needed instead of at startup (can be overridden by setting the minimum pool size to the desired value).

20638: Include redesigned JDBC

Redesigned and improved JDBC support.

21256: Detect connection passing over tx boundaries

Connections can now be passed across transaction boundaries if desired.

21316: Include DB2 XA fix

Fixed incompatibility with DB2 (see

21317: Improve connection pool with shrinking support

The connection pool can now also shrink in size.

21319: SimpleDataSourceBean: eliminate GUI classes dependency

Improved SimpleDataSourceBean for headless servers.

21453: Configure shutdown hook behaviour

You can now configure whether VM shutdown forces transaction core shutdown with the init parameter com.atomikos.icatch.force_shutdown_on_vm_exit - defaults to false.

21487: Implement connection reaping

Connection reaping is now also supported by the JDBC pooling.

21797: Add init method to MessageProducerSession

Added init method to com.atomikos.jms.MessageProducerSession.

21489: Min size for pool

The pool for JDBC connections now also supports a minimum size.

22429: Improve class loading

Improved class loading to be compliant with most J2EE platforms.

20558: Threads blocking (waiting and retry) when the connection pool is exhausted

The JDBC connection pool now also supports blocking the calling thread when the pool is exhausted. Special thanks to Mehdi Bennani.

20115: Log4j integration

Added Log4J support for the diagnostics.

21712: Heuristic hazard logs repeated timeouts

Improved handling of heuristic hazard transactions.

22115: AdminToolResourceBundle not found

Fixed lookup problem of the AdminToolResourceBundle for localized interface items.

22116: Build of spring examples fails in download

Fixed build of Spring examples in download samples.

20140: JDBC NonXa ConnectionProxy Incompatible with OpenJPA

OpenJPA incompatibility fixed: JDBC connection methods of class java.lang.Object no longer trigger transaction enlistment.

22118: Add startup property for .lck file to protect logs

Added startup property: com.atomikos.icatch.lock_logs (if set to false, there will be no .lck file that prevents startup).

22445: Fix javadoc comments

Improved javadoc formatting.

22476: Factor out new (and old) JDBC into separate modules?

Created separate modules (jars) for JDBC support.

Release Notes for TransactionsEssentials 3.2.7

23364: Problem when recovery is called while active transactions exist

We now allow recovery to happen correctly if there are active transactions.

23719: TopicReceiverSessionPool: append subscriberName with thread number

To ensure uniqueness of subscriber names, these names are now suffixed with a counter for each pooled instance.

Release Notes for TransactionsEssentials 3.2.6

23629: MessageConsumerSession: show linkedException for receive errors

We now inspect the linked JMS error if present.

23642: Clean up log entry: getCompositeTransaction returning null

Improved log comments for the Atomikos core.

23645: Bug in 3.2.5 for durable subscriber

Fixed bug: the durable subscribers were not JTA-enabled.

Release Notes for TransactionsEssentials 3.2.5

23605: Support durable subscribers in MessageConsumerSession

Durable subscribers are now support for topics.

23608: Improve logging of hazard timeout problems

Logging was improved to show more details about the problem.

Release Notes for TransactionsEssentials 3.2.4

23119: QueueSenderSession does not refresh?

In some cases the JMS sender/producer session classes did not correctly refresh the underlying JMS session.

23120: JMS message producer: sending errors should be logged as warnings, not info

JMS sender/producer session: improved logging of warnings .

Release Notes for TransactionsEssentials 3.2.3

21806: Deadlock in core

Fixed deadlock on the (rare) case where the application thread registers a synchronization with the transaction, when a timeout thread attempts rollback concurrently.

21904: Avoid repeated logging for hazards

Improved timeout for heuristic hazard cases, to avoid excess logging and thread blocking.

21931: Bug in JMS session

Fixed close of intermediary JMS session - see

Release Notes for TransactionsEssentials 3.2.2

21666: DataSourceBean: remove checkSetup on close

DataSourceBean: removed checkSetup during close.

21705: Deadlock in core (observer callback during state transition)

Fixed problematic deadlock when a timed out transaction interferes with commit synchronization registration (in Spring).

21740: stopListening fails for JMS

Added a check for closed UserTransactionManager instances, so usage after close generates an exception.

Release Notes for TransactionsEssentials 3.2.1

21546: Add new logo in docs

Added new logo in PDF guides.

21542: DataSourceBeanBeanInfo has NPE

Corrected NullPointerException for DataSourceBean GUI configuration.

21552: Improve recovery of committed xa txs

Improved recovery of committed XA transactions.

21553: Error in heuristic hazard termination logic

Improved handling of recovered heuristic hazard transactions.

Release Notes for TransactionsEssentials 3.2

20653: Allow single-threaded 2-pase commit

You can now choose to disable multi-threaded two-phase commit by setting the startup property com.atomikos.icatch.threaded_2pc=false

20738: Refactor propagator logging

Refactored Propagator logging.

21309: Change epoch directory to log directory

The .epoch file is now saved in the same folder as the transaction logs.

20002: Test JDBC connections before use

Added testOnBorrow option for the JDBC DataSource implementations - setting this to true will test connection liveness before they are taken from the pool.

20224: Ant-style expansion in

Values in the file can now contain Ant-style references (${...}) to the values of other properties.

20112: setXaDataSource in SimpleDataSourceBean

SimpleDataSourceBean now offers setXaDataSource as an alternative way to configure the XADataSource.

20167: Generate warning if semicolon omitted

SimpleDataSourceBean now generates a log warning if the xaDataSourceProperties don't contain semicolons.

20168: Compile with debug flag (info)

The jars are now compiled with debug flag enabled.

20254: Add Lars' contribution for thread pooling

Threads are now reused based on class availability of the JDK thread pools (Java 5 or higher) or the concurrent backport utility (Java 1.4).

20545: ExclusiveExternalXAPooledConnectionImp: improve close logic

Connections can now be closed after commit.

20566: Change SimpleDataSourceBean: set exclusive mode as default

Simplified JDBC setup: exclusiveConnectionMode now defaults to true.

20700: Add logging to SimpleDataSourceBean

Added logging for SimpleDataSourceBean settings.

20701: Add logging to NonXaDataSourceBean

Added logging for NonXaDataSourceBean settings.

20710: ExternalXAPooledConnectionImp: remove obsolete method

ExternalXAPooledConnectionImp: removed obsolete method.

20091: Migrate CVS repository to SVN

The source code repository is now hosted online in SVN.

20634: Refactor AtomikosSQLException

Improved AtomikosSQLException support for nested exceptions.

21190: change console logs format

The format of the console logs is now easier to read and more conventional.

20617: ThreadLocalConnection bug

Improved handling of implemented interfaces in the JDBC connection proxy classes.

21183: Update samples with transaction timeout

The Spring JTA examples now also show how to set the transaction timeout.

21191: ConnectionPool: avoid getMetaData

The JDBC connection pools now avoid getMetaData() for testing connection liveness - if a validating query is set.

20140: JDBC NonXa ConnectionProxy Incompatible with OpenJPA

OpenJPA incompatibility fixed: JDBC connection methods of class java.lang.Object no longer trigger transaction enlistment.

20718: NPE on shutdown in Tomcat

Added a workaround to avoid NullPointerException in the JDBC DataSource classes on Tomcat shutdown of webapp.

20371: Include test jars in test release

The test jars are now included in the test suite.

Pre-3.2 Release Notes

New as from Release 3.1.7

Bug fixes:

New as from Release 3.1.6

Bug fixes:

New as from Release 3.1.5

Added features: Bug fixes:

New as from Release 3.1.4

Bug fixes:

New as from Release 3.1.3

Bug fixes:

New as from Release 3.1.2

Bug fixes:

New as from Release 3.1.1

Bug fixes:

New as from Release 3.1.0

Added features: Bug fixes:

New as from Release 3.0.1

Several bug fixes:

New as from Release 3.0

Atomikos TransactionsEssentials Release 3.0 is a major redesign of Atomikos Transactions, meaning that it will not work as a simple drop-in replacement for earlier releases. When upgrading to 3.0, the following changes should be taken into account.

Configuration changes

The properties file can now also be called '' instead of just ''. Extra properties were added to support new features (see the demo properties file included in the release).

Moved from package com.atomikos.icatch into package com.atomikos.icatch.config:

Moved from package com.atomikos.icatch into package com.atomikos.icatch.system:

Other changes

Included from Release 2.1x

Included from Release 2.0x