ExtremeTransactions 4.0.81

Release notes for 4.0.81

187515: Avoid retrying commit after failure of 1PC

Fixed a bug where retry of a one-phase commit would lead to needless heuristic hazard warnings (and pool congestion). It does not make sense to retry 1-phase commit because, for instance, a typical failure could be cause by a transaction timeout in the resource.

Only for customers. Not a customer yet?

Free Trial

ExtremeTransactions 4.0.80

Release notes for the 4.0.80 release…

180060: Improve log warning on timeout before commit

When a transaction timed out we used to hint at different options / causes in the warning. This has been improved to be accurate now.

Only for customers. Not a customer yet?

Free Trial

ExtremeTransactions 4.0.79

Release notes for ExtremeTransactions 4.0.79…

176965: Non-XA JDBC connection: purge closed Statements more often

We've increased the frequency with which pending statements are closed - to lower memory consumption.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.78

Release notes for the 4.0.78 release…

176500: Race condition in AtomikosNonXADataSourceBean

Fixed a race condition where non-xa connections could be borrowed by 2 concurrent threads under high load, leading to errors in the log like this:

java.sql.SQLException: Can't call commit when autocommit=true

176184: CleanupFilter: also log before and after request information

For our Tomcat integration we now also log a bit more: before and after each request.

176289: Tomcat thread reuse: also cleanup Spring's ThreadLocal state

In module transactions-spring, we have added two new filters:

  • com.atomikos.spring.CleanupPendingThreadLocalStateFilter and
  • com.atomikos.spring.CleanupPendingTransactionContextFilter

These can be used to cleanup pending Spring state. Normally this is done by Spring's JtaTransactionManager, but in case of pending transactions on a Tomcat request thread, the Spring transaction cleanup may not happen. In those cases, you need these filters or you will see weird warnings like these:

WARNING: Attempt to use connection after it was closed.

Adding these filters should prevent that.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.77

Release notes for the 4.0.77 release

168377: Error during log flush: treat as heuristic hazard, not as rollback

We've refined exception handling for the rare case where flushing a commit record to the log fails.

176189: Reap: avoid connection reuse in nonxa

Although unlikely, reaping would attempt to mark the connection as reusable before it was destroyed in the pool. In theory this could give race conditions so we have improved that.

176244: XAResourceTransaction.commit/rollback: log warnings only once

We used to log two times the same warning in some exceptional cases, this has now been improved.

175998: XAResourceTransaction.commit/rollback: treat -6 (XAER_PROTO error) separately

This kind of exception can happen after a reap and does not have to lead to useless warnings, so we treat this separately now.


Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.76

175872: Avoid locking the whole pool when creating a new connection

While growPool was executing createPooledConnection, it had a lock on the entire pool. In case of network timeouts, this can take a long time and this forbids other threads from getting a connection. We've fixed this.


Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.75

Release notes for the 4.0.75 release…

175391: Reap should destroy the pooled connection to free up space in the pool

Due to recent community changes that were merged in the stable branch, we accidentally omitted deleting a connection from the pool after it was reaped. This is now fixed.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.74

Release notes for the 4.0.74 release…

175280: TransactionManagerLifecycleListener: improve stop support to avoid closing resources for active Spring MessageListenerContainers

This listener class for Tomcat integration used to shutdown the transaction core on STOP events. Due to (lack of) ordering during such STOP lifecycle event, there may still be active web applications when this is called. As a result, any remaining message listeners will start giving warnings that the core has already been shutdown, along with its JMS resources.

This has been fixed, at the expense of a different (but less intrusive) warning like this one:
The web application [/...] appears to have started a thread named [Atomikos:5] but has failed to stop it. This is very likely to create a memory leak.

This is due to the limited knowledge the Tomcat core has about Atomikos threads. It can be ignored, there is no memory leak in this case.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.73

Release notes for 4.0.73…

173810: Make reapTimeout default to maxLifetime

It does not make sense to have connections in use for more than maxLifetime, so now we reap in that case. This is to avoid pool exhaustion if connections are held and blocked for a long time.

174127: Enable JMS to use the new concurrent pool for high performance

It is now possible to also use the new pools with JMS.

168918: REST/SOAP: add recovery domain name to propagation

For safety reasons, we now add the recovery domain name to the transaction propagation - so we avoid transactions across recovery domains.

172441: XAResourceTransaction: don't log error on heuristic states

Heuristics are the responsibility of the recovery module in the background, so it is not necessary to log errors in the OLTP module.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.72

Release notes for 4.0.72…

172665: Prepare failure: clarify error log even more

Experience has shown that failures during prepare can result in confusing exception messages. We've tried to improve this even more.

172436: JDBC/JMS: clarify message if pooled connection cannot be gotten

Per customer request, we improved the error message if no connection could be gotten from the pool in both JMS and JDBC: instead of Failed to grow the connection pool it now says Failed to create a connection.

172905: Allow transition from PREPARING/COMMITTING/ABORTING to ABANDONED

Fixed a bug where transactions were not cleaned up after timeout - thereby possibly causing a memory leak in the core.

173314: Log number of open contexts in a pooled connection

Added (trace-level) logging to show the number of open contexts for a pooled connection when the pool checks its availability.

173315: JMS createConnection(userName, password): don't log warning

We no longer log a warning when trying to create a new connection with a custom userName and password. This is because some frameworks depend on this method, which causes a lot of noise in the logs. Instead, we now log this in debug level.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.71

Release notes for the 4.0.71 release…

172566: Improved support for maxLifetime enforcement

Even though we had a maxLifetime for connections in the pool (to avoid firewall issues), this was only applied to connections that were available at the exact moment when the pool's maintenance thread was doing the checking. This has now been improved: even if a connection is not available at the time of checking (i.e., in use by the application) it will to be reused again after its maxLifetime has passed.

172524: Race condition in ConnectionPoolWithConcurrentValidation on destroy of pooled connection

The new pool had a race condition between the application threads and the pool's maintenance thread, as follows:

The maintenance thread would do the following - without the synchronisation of our older pool:

  1. Loop over all connections to check which ones are available.
  2. Close (destroy) any such available connections that it deemed no longer needed.

In parallel, the application threads would be getting connections from the pool. This means between steps 1 and 2 of the maintenance thread, it could happen that a connection was gotten from the pool and subsequently destroyed by the maintenance thread.

This has now been fixed.

172571: CleanupPendingTransactionContextFilter: improve behaviour and enable toggling via property

Our servlet filter takes care of cleaning up any pending transaction context for applications that don't cleanly end the transaction association of the calling thread. Previously, this happened only when the thread was reused for a later request (via thread pooling in the servlet container). This can take time, and the resulting warnings are hard to link back to the original request.

This has been improved by making the cleanup also happen directly after each request (rather than waiting until a next request comes in).

Also, per customer request we've made it possible to "disable" this filtering behaviour if required, by setting the property
com.atomikos.icatch.http.filter_requests=false

This can happen either in the jta.properties file, or via a System (JVM) property. This way, you can leave the filter in your web application's web.xml file - which should make life a bit easier on the operations people.

169220: Specify a timeout for the testQuery

We now reuse the borrowConnectionTimeout value as the timeout for the testQuery - so testQueries don't block indefinitely and the pool's availability is improved.

172247: AtomikosDataSourceBean: don't log testQuery warning for concurrentConnectionValidation mode

Historically, a testQuery would generate warnings regarding performance. With the new concurrent validation pool, this is of course no longer required.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.70

SOAP web-services support and improved logging…

171867: ACID/SOAP transaction support

In addition to REST support, we've added a new incarnation of our SOAP web service transaction support. Once more you can make transactions span web services, but this time it's not according to the inefficiencies of a bloated standard specification. Rather, it's the way we think it should be - no compromises!

171909: Publish event when setRollbackOnly is called

We now publish an instance of TransactionRollbackOnlyEvent whenever there is a call to setRollbackOnly. Just listen for the event, and chose how to handle it (e.g., by logging a warning with the stack trace of the calling thread so you can diagnose what component is causing issues).

170752: Log JDBC/JMS init as INFO so it is easier to find mistakes

We now log init calls as INFO so it is easier to find mistakes in the configuration.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.69

Transactions across REST microservices…

In this release we merely fixed the REST demos (which were broken in the last few releases).

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.68

Improved compatibility with Tibco EMS

170445: Improve ClassLoadingHelper to allow proxies for classes with non-public interfaces

When loading from different jars, non-public interfaces in the vendor's drivers could sometimes lead to proxy creation failures for the JMS session. This was notably the case for Tibco EMS. We now catch the error and create a minimal working proxy instead.

Warning: Known Issues With REST Demos

Some of the REST demos don't work in this release - this will be fixed in an upcoming release. This will only affect development projects that are testing REST transactions.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.67

Yet more performance improvements

170331: Add connectionValidationInterval so JDBC connection validation will be repeated every X milliseconds

You can now set the interval after which JDBC connection validation should be repeated, so users can have an application-specific impact on performance.

170195: Tomcat JNDI integration: allow setting XADataSource via JNDI

Similar to JMS, we added the capability to specify the XADataSource as a JNDI reference in Tomcat.

170194: Tomcat JNDI integration: allow setting vendor XA connection factory via className

Similar to JDBC, we now also allow specifying the XA vendor settings via the class name (instead of only the JNDI reference).

164168: ConnectionPool's onXPooledConnectionTerminated method: publish event out of synchronised block

Another incremental performance optimisation to maximise performance.

Warning: Known Issues With REST Demos

Some of the REST demos don't work in this release - this will be fixed in an upcoming release. This will only affect development projects that are testing REST transactions.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.66

Increased logging performance and more…

167173: Utility to decode hex-XIDs reported by the back-end resource monitoring tools.

You can now use the LogUtil tool to decode hex-XIDs so you get values that make sense for your configuration. See here for the documentation.

169575: Logging: increase concurrency by limiting use of synchronized blocks

We've eliminated some logging contention points by replacing synchronized blocks with reentrant locks (shared versus exclusive).

169171: Fixed bug in CleanupPendingTransactionContextFilter

We incorrectly passed a milliseconds value for the JTA timeout - which expects a seconds value. This would lead to numerous log warnings like: "Attempt to create a transaction with a timeout that exceeds maximum - truncating to xxx". This has now been fixed.

169144: Bug in subtransaction create: rootId is wrong

Creating a subtransaction did not set the correct root, which made it hard for different subtransactions to share locks.

168653: REST/ACID: add "serial" header for lock sharing among siblings

We've added a special header to facilitate lock sharing among related transactions across different incoming REST calls.

168910: REST/ACID: add root's ID to propagation

We've added the root transaction to the propagation headers to facilitate lock sharing among related transactions across different incoming REST calls.

169023: REST/ACID: add "extent" to response headers so we can tolerate retries

Failed remote calls can now safely be retried without risking duplicate transactions at the remote end.

166698: Fixed timeout errors in Hazelcast demo

This demo has now been fixed.

167897: LogCloud 3rd party demo not working

This demo has now been fixed.

167899: Spring/Tomcat demo not working

This demo has now been fixed.

Warning: Known Issues With REST Demos

While testing this release, we've noticed that some of the REST demos no longer work - this will be fixed for the next release. This will only affect development projects that are testing REST transactions.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.65

Check out our new high-performance JDBC pools and more!

94285: Refactored connection pool with concurrentConnectionValidation

Refactored the connection pool: the testQuery is now executed outside of a synchronised block for better performance.

165262: Configuration.shutdown methods should log INFO message

In-line with INFO logging policies, shutdown methods now log an INFO message.

166914: ConnectionPool.borrowConnection: move testQuery execution outside of synchronised block

The testQuery used to be in a synchronised block, now this is no longer the case thanks to a new pool implementation. This is a port of fix 94285 (commercial branch) to the community.

166918: Simplified lock file handing on Windows

Merged https://github.com/atomikos/transactions-essentials/pull/5.

166919: Auto-create all necessary directories for log files

Merged https://github.com/atomikos/transactions-essentials/pull/9.

166920: Eclipse source bundle for this atomikos version

Merged https://github.com/atomikos/transactions-essentials/pull/10.

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.

167358: REST/ACID: ParticipantAdapter should implement equals to avoid duplicate 2PC towards same backend

Fixed an issue with missing equals/hashCode implementations that would break 2-phase commit in certain conditions.

167400: New pool: avoid testQuery overhead on connection recycle

We've added a new pool that makes the testQuery more efficient. Now, we went even further and avoid the testQuery overhead on connection recycling. This mainly makes it faster for transactions that do multiple SQL statements in the same transaction.

167418: CleanupPendingTransactionContextFilter: also reset ThreadLocal transaction timeout

Thread reuse in Tomcat used to inherit the transaction timeout set by a previous request (if any). This could be confusing so we now reset the transaction timeout between requests.

167528: Tune default checkpoint interval for extra performance

The default checkpoint interval used to be suboptimal for performance - our commercial distribution is now tuned in this respect.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.64

Release notes for ExtremeTransactions 4.0.64…

166279: ACID/REST: add support for Spring REST

Added built-in support and examples for the Spring REST framework.

166280: ACID/REST: add support for Spring HttpInvoker

Added built-in support and examples for the Spring HttpInvoker remoting mechanism.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.63

Release notes for ExtremeTransactions 4.0.63…

166361: Updated README for REST transactions

Clarified with missing instructions for seamless testing of the demo.

166386: Setting com.atomikos.icatch.max_timeout=0 means unlimited

Improved the new recovery to interpret 0 as unlimited, and we now log a warning if this happens with XA.

166601: Allow delegating JNDI lookups to underlying platform implementation

We've improved our transactions-jndi-provider module: if you use our com.atomikos.jndi.AtomikosContextFactory as the initial context factory then you can delegate unbound lookups to a third-party provider specified as "env."-prefixed properties in the jndi.properties file.

For instance: env.java.naming.factory.initial = … would set the third-party context implementation to delegate to.

166271: LogCloud: conflict between TCC and XA recovery

When deploying the LogCloud there is a conflict between TCC and XA mode - mostly due to timeouts during recovery. We've now made sure that there is better separation to avoid issues with this: either the subsystem starts in XA mode (default) or in TCC mode (if the TCC classes are found on the classpath).

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.62

Release notes for ExtremeTransactions 4.0.62

166145: LogCloudRmiServer: lookup recovery delay in config properties

This class used to take a separate parameter on the command line - thereby hiding the value specified in the jta.properties file. This has been fixed.

166164: Bug in ACID/REST demo

Fixed a bug in the demo: the inventory should not return "Accepted" status for updates.

166167: ACID/REST: added client-side checks to prevent commit when there are outstanding remote calls

It should not be allowed to have a commit when some calls are still pending - since the commit scope will not be well-defined in that case. We now have a check for that.

166171: TransactionAwareRestContainerFilter: timeout must be relative to System time

Fixed a bug where the timeout was confused with the expiration date/time in the request header of incoming requests. This would lead to excessive timeouts.

166211: ACID/REST: container (server-side) filter should not add participant header on rollback

For extra safety, we've improved the filter to omit any headers in case of server-side rollback. This way, the client transaction manager cannot get confused and still attempt commit.

Because of the previous case (166211), the client should not commit a transaction where there is no participant for the remote work. Otherwise, the transaction commit scope would be undefined.

165415: ACID/REST: allow exporting any local JTA transaction

We've improved the examples and added support for both JAX-RS and Spring REST/MVC - so you can build microservices with your favourite toolbox.

165427: ACID/REST: add logging so we can see what happens

We've improved logging in the REST module - so it's easier to see what happens.

165799: New datasource property concurrentConnectionValidation: also log on init

It seems we did not log this new property value on init yet. This has now been fixed.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.61

Release 4.0.61 is out…

94285: Connection pool: allow testQuery / connection validation outside of synchronised block

We've added a new property on our datasource classes: concurrentConnectionValidation. When set, the pool will do the connection validation (either a testQuery or JDBC4's isValid function) outside any synchronised blocks of code - so performance is much better.

165415: ACID/REST: allow propagation of any local JTA transaction along outgoing REST calls

Applications that embed an Atomikos transaction manager can now transparently make JTA transactions span outgoing REST calls.

165580: ACID/REST demo: add JavaScript client

We now have a plain JavaScript client to show how non-Java clients can still use our REST transactions.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.60

Release 4.0.60 is out…

164148: Don't swallow exceptions on recovery

Improved exception handling: occasionally, would would swallow exceptions (shame on us!).

165163: Always execute testQuery in autoCommit mode

The testQuery used to execute with an undefined autoCommit mode - so if the connection had autoCommit disabled, the testQuery would start a new (local) transaction context that conflicts with XA.

165281: Log stack trace of getConnection() after reaping

To facilitate finding connection leaks, we now start collecting and logging stack traces of getConnection() calls after the first reap.

165415: ACID/REST: allow exporting any local JTA transaction over REST

From now on, all local JTA transactions can be exported / extended over REST - so outgoing REST calls can become part of the commit scope.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.59

Quick fix for recovery of expired transactions, relevant to all 4.0.x users.

164147: Recovery of expired committing Xid fails

Fixed a bug where recovery of an expired committing Xid failed silently. As a result, expired committing entries would stay in the transaction log because this would fail on every recovery scan. This has now been fixed.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.58

Improvements to the LogCloud and more…

162961: LogCloud service failover and out-of-memory protection

We added a monitoring service for the LogCloud so failed processes are automatically restarted, which increases availability. We also added memory monitoring for timely warnings of possible out-of-memory conditions, as well as useful logging hints on how many concurrent transactions are supported in the current configuration.

163761: Save current pid of LogCloud process

We now save process id of the running process, so wrong restarts of the monitoring tools can show a meaningful error message. Currently available for unix-type platforms only.

164057: LogUtil: format XIDs like in the diagnostic logs

We improved the monitoring utilities to make it easier to correlate XIDs in the transaction log (JSON format) with XIDs in the diagnostic logs. Due to different formatting rules, this was difficult.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.57

Introducing… REST/ACID transactions across microservices!

158377: Support ACID transactions across REST (micro)services

See the examples-jta-rest sample for a working demo…

162082: Sub-transaction bug: no recovery coordinator for local sub-transactions

Fixed a bug where local sub transactions would not be recovered.

162083: XID recovery for imported ("recreated") transactions: wrong coordinatorId

Fixed a bug where imported transactions would sometimes not get the right coordinatorId for recovery.

162087: Imported transactions get same coordinatorId as the root

Improved the import mechanism for microservice transactions to ensure correct recovery in all cases.

162532: LogCloud service: add log alert when approaching out-of-memory

Added a log warning when there an out-of-memory is approaching.

162596: LogCloud recovery of TCC interferes with XA recovery

Improved mixed recovery where the Main.LogCloud would interfere with XA recovery.

162685: Refactor RMI examples to use LogCloud

We now show the Main.LogCloud in the examples with RMI.

162772: Add JMX support for non-xa datasource

JMX is now also supported for non-xa datasource instances.

162773: Add option to disable startup if resource not available

Our datasources now have an optional failOnInitIfDatabaseDown setting, and the AtomikosConnectionFactoryBean has a similar failOnInitIfBrokerDown option - both of which will make the init fail if the backed resource is not available at the time of init.

162771: Spring support: also init/destroy JMX beans

We've added support for managing JMX beans in our Spring integration - so you don't have to.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.56

Check out our newest 4.0.56 release…

161485: Bug for indoubt / timeout: cleanup not possible due to lacking state transition

Fixed a bug where occasional pending in doubt transactions could not be cleaned up.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.55

Check out our 4.0.55 release…

159112: Add TimeoutException class / subclass of RollbackException

We've added a dedicated TimeoutException (subclass of RollbackException) so applications can catch this specific exception to be informed about timeouts.

160683: Add specific events to the connection pool for borrowing / returning connections

Applications can now register event listeners to be informed about PooledConnectionBorrowedEvent and PooledConnectionTerminatedEvent instances - so the application can roll its own monitoring if desired.

159813: Log recovery actions as warnings so logs are easy to check after an issue occurs

Recovery now logs warnings so it's hard to miss important recovery actions.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.54

Checkout release 4.50.54!

158901: Tomcat integration: add JNDI config / lookup of 3rd party JDBC/JMS factories

We've added a demo config also to the regular (non-Spring-based) Tomcat examples.

159319: New recovery: avoid recover/rollback between prepare and commit

We fixed a design flaw where the new recovery could suffer from interference of concurrent recovery / rollback. Our fix has been proven mathematically correct so we're pretty convinced this makes things bullet-proof from now on.

159773: Detect changes after init concerning setSupportsTmJoin

We've improved supportsTmJoin functionality to be consistent with the other AtomikosDataSourceBean properties.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.53

Exciting new fixes!

159517: Allow UserTransactionManager init with customer configuration properties

You can now construct an instance with custom init properties that will be taken into account.

159580: Improve supportsTmJoin to never use TMJOIN at all

We've widened the impact of supportsTmJoin=false to avoid all XA joins completely - so you can work around problems with XAResource implementations that lack decent support for this.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.52

159428: Transaction timeout: stack trace logged with interleaving logs from other threads

Fixed log formatting for stack traces on timeout - so that concurrent threads don't log in between.

158944: XATransactionalResource: errors on refreshXAResource should be logged as WARN, not DEBUG

Improved logging of what really should be a warning, not a debug entry.

158901: Tomcat integration: add JNDI config / lookup of 3rd party JDBC/JMS factories

It is now possible to delegate JNDI lookup of JDBC/JMS resources to 3rd party JNDI providers - all from within the Tomcat JNDI space.

158770: Improve Hazelcast integration: also support client/server config

We've improved the hazelcast integration to allow for pure client/server deployments.

158931: Add participatingUniqueResourceNames to TransactionCommitted/TransactionAborted events

We now publish the participating resources as part of these events so your integration tests can verify the scope of a transaction.

159065: New logging/recovery: race condition for high loads

Fixed a race condition where recovery could interfere with OLTP commits.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.51

Also checkout our 4.0.51 release…

158525: Fixed small low-level issues

Improved logging and log level checks a bit, so INFO logging is less verbose.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.50

Checkout our 4.0.50 release!

158455: Improve logging: avoid ERROR on rollback without prepare

We now avoid logging rollback exceptions as ERROR when the only possible in the participant / resource is rollback.

158527: Improve XAResource comparison for Hazelcast

The comparison code for enlisting Hazelcast instances has been improved to provide more flexibility for custom wrapper classes.

158525: Fixed small low-level issues

Improved logging and log level checks a bit, so INFO logging is less verbose.

158493: Tomcat/Spring examples: close connections to avoid pool leaks

The examples were a bit sloppy in cleaning up connections, which has been fixed.

158494: Tomcat/Spring examples: add CleanupPendingTransactionContextFilter

The filter was missing in the example, it's been added now.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.49

What's new in the 4.0 branch?

157838: Updated README file for the examples

The README file has been updated to mention the latest greatest examples.

158128: Evaluation zip: add source jars

We've added the source code jars so evaluators can easily click-through in their IDE to inspect source code.

158294: Avoid needless log warning in CleanupPendingTransactionContextFilter when tm found instead of tx found

There was a cosmetic logging glitch that slipped into the context filter and would cause it log needless warnings. Fixed!

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.48

The latest greatest in ExtremeTransactions over the last 7 days…

157119: Log stack trace of thread that leads to transaction timeout

Improved existing fix with respect to logging frequency: we now only log stack traces once, instead of on every timer alert after a timeout happens. This reduces logging volumes quite a bit.

157685: Improve init logic upon exceptions in new recovery

Init-ing datasources or connection factories with an unavailable backend would lead to startup failures in some cases; this has now been fixed.

156814: Add a LogCloud REST API so 3rd parties can reuse the recovery module

For those who want do do their own "transaction management" but delegate recovery to Atomikos: we've opened up the LogCloud with a REST API. See the relevant examples for more information.

157787: TCC/REST: create fat jar so the coordinator service is easy to launch

It is now easier than ever to start a coordinator service for your TCC transactions: just launch java -jar transactions-tcc-rest.jar 8080 (or replace 8080 by whatever port you want to use).

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.47

Making the 4.0 better yet…

Available to customers only. Want to become a customer?

Send me a quote

157457: XaResourceRecoveryManager: log XID in same format as XAResourceTransaction

The new recovery module logged XIDs in a different format than the OLTP logic did, which was confusing to read. We've now aligned them.

157119: Log stack trace of thread that leads to transaction timeout

Timeout / setRollbackOnly of an active transaction now also shows the stack trace(s) of any threads that were active in the transaction - so it is easier to find out what is causing the timeout.

157408: Clarify log warning message if timeout is maxed

Improved the warning message by also suggesting what can be done to avoid it.

141026: CleanupPendingTransactionContextFilter: add INFO logging

Added useful extra logging to show what is going on.

156021: LogCloud: print / show generated RMI url so client configuration is easier

The LogCloud service now displays the RMI address on which it is available - so clients are easier to configure.

156982: LogCloud requires different UniqueIdMgr implementation

We've improved the way that transaction identifiers are generated so the probability of collisions in cluster deployments is minimised.

157196: Add logging to AtomikosApplicationContextAware

Our Spring integration module now also logs what it is doing, in what order.

157485: Spring integration: allow integrating the UserTransactionServiceImp in the right order

It is now also possible to include the UserTransactionServiceImp with our built-in Spring integration - so you can tune the init properties inside your Spring config.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.46

A small but important improvement of new recovery…

156968: Refresh XAResource handle when errors during recovery scan

We've improved a prior fix in the 4.0.x recovery mechanism so we can avoid that stale connections stay around during recovery.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.45

Quite a big maintenance release with lots of improvements concerning our new recovery.

Available to customers only. Want to become a customer?

Send me a quote

Issues with the new recovery

156968: New recovery: call refreshXAConnection when errors during recovery

Improved handling of erroneous connections for recovery: in some configurations the connection can be broken, and needsRefresh does not seem to detect this - resulting in repeated recovery errors on each scan. We now refresh the connection automatically after any recovery error.

155758: Recovery: refine to better deal with heuristics

Heuristic log entries are now automatically discarded when all participant entries are either terminated or heuristic. Upon discarding, we generate an event to allow for monitoring in external tools.

155987: Recovery: improve termination for parent/subtransaction

Improved the housekeeping of the log for parent/subtransaction situations.

155986: Recovery: improve getCommittingParticipants() for sub transactions

Subtransactions could be pending in the INDOUBT state while the parent transaction was logged as COMMITTING. The only correct recovery for the sub transaction is to commit, so getCommittingParticipants() should return the participants of the subtx.

156390: Remove option: automatic resource registration / TemporaryXATransactionalResource

This exotic optional feature was not safe with the new recovery and also not compatible with the LogCloud.

156249: Recovery: include name of XAResource

We now use the uniqueResourceName of each resource to improve the housekeeping of pending log records.

155974: Subtransaction recovery can rollback when parent transaction is committing

Fixed an issue where sub transaction rollback was possible during recovery, when the parent did commit.

155982: Logging of sub transactions with new recovery does not include superiorCoordinatorId

Logging for sub transactions was incomplete and did not include the parent transaction's id. This is now fixed.

156956: Allow presumed abort of IN_DOUBT subtransaction if its parent is HEUR_HAZARD or HEUR_MIXED after ABORTING.

Improved recovery for subtransactions with problematic parent transactions.

156967: Presumed abort should work for log entries in ABORTING state

Pending log entries in the ABORTING state will now also be cleaned up during recovery.

156924: Ignore non-recoverable states in checkpoint

Non-recoverable states like ABORTING (created during recovery) don't have to be logged because they are reproducible on the next recovery scan. We now avoid writing such entries.

156943: Recovery with commit replay: also return heuristic entries where wasCommitted = true

We now also correctly recover and commit IN_DOUBT participant entries when the overall outcome is some form of heuristic.

155797: Race conditions: presumed abort versus OLTP commit - lacking synchronisation

We found and fixed a race condition where synchronisation was lacking.

156812: Generate event for pending COMMITTING/ABORTING log entries so the resource can be added to the config if needed

For operational monitoring, we now generate a warning event when a resource may have been removed from the configuration while it still had pending transactions in the recovery logs.

Improvements of the LogCloud

156391: LogCloud: also register Hazelcast resource

You can now also use Hazelcast with the LogCLoud.

156617: LogCloud: support xaPropertyNamesToHide

Sensitive connector properties are now encrypted over the wire and on disk.

Hazelcast is now also supported as a LogCloud resource.

Other

156015: Added new config property with max wait timeout during shutdown in no-force mode

The new property com.atomikos.icatch.default_max_wait_time_on_shutdown allows configuring the max number if milliseconds that shutdown will wait when in no-force mode.

156355: Example with Hibernate 5

Added a new example with Hibernate 5.

156798: Timeout with marked abort: log warning to explain reason of NO vote

A timeout of an active transaction will add a RollbackOnlyParticipant to make prepare fail. However, later on in the logs this shows up as a NO vote cryptic error that people didn't understand. This has now been improved.

155988: Race condition between recovery / presumed abort and OLTP commit: improve error message

When recovery interleaved with application-level commit attempts, sometimes the following cryptic message would be in the logs:
javax.transaction.RollbackException: Error in committing: Existing entry: ABORTING incompatible with new entry: COMMITTING - recovery will clean up in the background

We've changed this to point out that intermediate recovery is responsible for this situation.

156800: Allow OLTP state transitions from ABANDONED to TERMINATED and the other way around

We've loosened state transitions a bit to avoid needless warnings in the logs.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.43

Yet more improvements on TCC!

155578: TCC / REST: errors on confirm with recovery = none should never yield hazards to avoid retry

Disabled retrying confirmation when recovery is disabled - after all, retrying confirmation is a form of recovery.

155579: Add diagnostic logging for TCC confirm / cancel

A bit more diagnostic logging proved useful when things go wrong…

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.44

JDBC and TCC/REST improvements

154438: Support for JDBC4 isValid connection testing

We've implemented support for JDBC4 isValid connection tests by the driver. To enable, set useDriverBasedConnectionValidation to true on the AtomikosDataSourceBean.

155622: TCC / REST: refine options error handling to tolerate 405 (not implemented)

We now tolerate participant service without OPTIONS method so confirmation can still proceed.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.42

Fixed a minor issue in Tomcat JNDI integration…

155331: Tomcat JNDI: add 'singleton' as a property to ignore

The Tomcat JNDI factories specify an internal 'singleton' property that generates warnings when set on Atomikos datasources or connection factories. This property is now being ignored to avoid needless warnings.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.41

TCC/REST improvements and samples for parallel sub transactions in multi-threaded applications…

154988: Improved TCC error handling upon confirm

We recently switched to the new JAX-RS 2.0 client API, thereby giving up checked exceptions on client calls (in favour of response codes that need to be checked explicitly). This caused us to miss on some HTTP error codes, which has now been corrected.

154950: Add example showing how to do threaded (sub)transactions

For those who need parallel processing in their transactional applications, we've now added an explicit example of that. See examples-jta-multithreaded in the examples download.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.40

Some useful improvements to TCC/REST behaviour…

154549: TCC/REST: force cancellation when one or more services are down before confirmation starts

We've optimised the confirmation process to check availability of all participants before attempting to confirm, in order to avoid needless 409 conflicting outcomes.

154789: Add parameter to disable recovery

The existing init parameter com.atomikos.icatch.enable_logging has a new optional value to disable recovery altogether:

com.atomikos.icatch.enable_logging=none
com.atomikos.icatch.oltp_max_retries=0

This will install a NullRepository for logging purposes, so the transaction logs will always appear attempt and recovery will not do anything. The second parameter is needed to avoid OLTP retries ("recovery") of heuristic transactions.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.39

This release contains all the functionality of our 4.0 release with 100+ commercial bug fixes between 3.9.0 and 3.9.34. As such, this is the first stable customer release of the 4.0.x branch.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.4

Release notes for ExtremeTransactions 4.0.4

Improved the examples

We've done various little changes to make the example programs and/or the free trial experience better or more ergonomic. There were no known bug reports so we don't bother mentioning each individual case here.

150080: Use the new JAX-RS 2.0 standard client API so our TCC implementation does not have hard dependencies on CXF

JAX-RS 2.0 has a new standard client API so our code now works (in theory) with any compliant implementation.

153552: TCC/REST recovery

It seems that we forgot to activate TCC recovery in prior releases - this is now fixed.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.3

Release notes for ExtremeTransactions 4.0.3

151740: Transaction log corrupted for active transaction in a thread pool being shutdown

We fixed a bug in our new logging / recovery where the log would get corrupted in certain cases. For the full report, see this forum post: http://fogbugz.atomikos.com/default.asp?community.6.3467.0

152791: Add log error message to point to documentation concerning heuristics

We now log a pointer to our documentation when there are heuristic errors, so it's easier for operations people to know what to do.

150134: Failing demo: examples-jta-spring-jmx

Fixed a demo that would no longer run.

150135: Failing demo: osgi/extreme-transactions examples

Fixed a demo that would no longer run.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.2

Release notes for ExtremeTransactions 4.0.2

22128: Optimize for 1-phase commit: don't force log image to disk

For transactions with only one participant there is no longer any forced disk writing on 1-phase commit.

150449: Examples: disable registration message

The demo / sample programs no longer display the following message:

Thanks for using Atomikos! Register at http://www.atomikos.com/Main/RegisterYourDownload to disable this message and receive FREE tips & advice.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.1

Release 4.0.1 of ExtremeTransactions…

150396: Remove cyclic package dependencies in new API

The new API contained a few nasty cyclic dependencies that we've removed - while this release is still in beta.

150079: Added Log4j2 support

Logging now supports Log4j2 when found in the classpath.

150008: Generate heuristic events from new recovery

The new event mechanism now also works for the new recovery.

150089: Removed obsolete TCC ParticipantLinkBuilder

There is no need to justify a builder - just use the equivalent factory class in the same package…

150092: TCC coordinator: improve error message on expiration validation

The existing error message was a bit unclear - this has now been fixed.

150419: Fixed concurrency bug in new UniqueIdMgr

No comment needed here…

150093: Removed trailing obsolete license files in TCC module

Since this is now open source, there is no need for license files any more so we've removed them.

Available to customers only. Want to become a customer?

Send me a quote

ExtremeTransactions 4.0.0

Probably our most important new release ever!

Elastic transaction processing for the cloud

The immediate benefit of the redesigned recovery and logging mechanism is that customers can now configure an external logging and recovery service - allowing you to dynamically add / remove application processing nodes without impacting recovery. For more details, see Main.LogCloud.

TCC

We've open-sourced TCC for REST ( Try-Confirm/Cancel) so it becomes accessible to everyone. We (and many others who gave us feedback) are convinced that TCC is the ultimate transaction model for REST. We would be honoured if you (re)used our implementation for your needs, and please let us know if you see any ways of improving it. In case you wonder if we are giving up on monetising TCC: we're not - rather, we intend to provide commercial value-add modules for various cloud deployments that are not provided by the pure open source distribution.

Redesigned Recovery and Logging

We've completely redefined how logging and recovery work. As an added bonus, this new design also simplifies the regular transaction processing code (recovery is no longer a concern) and should reduce memory usage during normal operation - while also making heuristic cases less of a burden.

The .epoch file mechanism is no longer used - which in turn improves cloud friendliness of our product.

The logs are now in a human-readable text format for optimal comfort during administration.

API Redesign

Extensibility

On the implementation side, we've redesigned the transactions-api module and the transactions core to be based on a plugin architecture so the core can be agnostic about the various extensions (such as JTA, RMI and TCC). This means that we now have a generic transaction model in our core, which can be adapted to specific needs via external plugins of which the core needs to have no knowledge. We're hoping that future contributions as well as our own commercial extensions can benefit from this new design. Extensions are based on the ServiceLoader mechanism. The TSListener interface has been refactored and renamed to TransactionServicePlugin and it has become the main plugin interface for this architecture.

In the same style, we've added core event notifications to our API, so plugins and external modules can be notified about significant transaction events. This makes it possible to build monitoring utilities on top of our product - both by the community and commercially by us.

Redesign of init property lookup

Initialization properties are now resolved in the following order (for inspiration from the community, see this forum post):

  • defaults are loaded from the classpath
  • any overrides from transactions.properties (if found in the classpath) are applied
  • any overrides from jta.properties (if found in the classpath) are applied
  • any overrides in a properties file specified by the optional system property com.atomikos.icatch.file are applied
  • any overrides set in a programmatic way are applied
  • any overrides set a system properties are applied
  • placeholder substitution is done for the resulting set of properties

Removed SubTxThread functionality

This functionality seemed a bit exotic to carry on in our codebase, so we've optimistically removed it for now. Should there be compelling use cases to add them again, we will do so at a later time. Most of our user base adheres to the JTA/JDBC/JMS API and will not be affected at all by this removal.

New configuration properties

See Documentation.JtaProperties for specific changes as of 4.x.

Custom JNDI Provider

To facilitate integration we now also have a custom JNDI factory in module transactions-jndi-provider. Among other things, it makes it easier to have Hibernate find our datasources if you're not using Spring.

Re-organised JMX support into transactions-jmx and transactions-jmx-jta

JMX support is now divided across 2 modules; one transactions-jmx (core) module and also transactions-jmx-jta for specifics relevant to JTA.

Modern Hibernate Examples

Last but not least: we now have a Hibernate 4 example included - thanks to Torsten Krah! There is now also a standalone Hibernate example to show how our JNDI provider works.

System Requirements

This release requires at least Java 1.7 to run. We do not guarantee compatibility with older versions of the JDK.

How To Upgrade

Make sure to shut down in no-force mode first, and delete the logs of your old version (which is safe after no-force shutdown).

If you don't use the transactions-api directly then your application should work fine (still, be sure to check our new init property lookup!).

If you do use our transactions-api then you might want to check the following:

  • The Configuration class was moved to package com.atomikos.icatch.config.
  • The UserTransactionService no longer has the init(TSInitInfo) method: initialisation now takes either no arguments, or a java.util.Properties argument.

Further Details

Various details are explained below… Enjoy!

149775: TCC participants: fix date type

We've changed the JSON date type to something more comfortable: ISO-8601. See http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx for some background information.

72517: Add common interface for JMS sender templates

You can now use the comment interface JmsSenderTemplate in your dependency injection so you don't depend on concrete classes.

133319: Allow java.lang.Object methods after connection is closed

For compatibility with third-party code expectations we now allow methods like hashCode to be called on closed connection handles.

142795: Optimisation for concurrent load with TemporaryXATransactionalResource

Contributed by Christoph Schmidt-Casdorf, Deutsche Post.

119178: Make setTransactionTimeout thread-local

The setTransactionTimeout is now thread-local so threads do not interfere if they set this property.

141014: Configuration property to disable nested transactions when desired

You can now prevent nested transactions from being started - see Documentation.JtaProperties for details.

149260: Log less in INFO mode

We have refined and improved the way we log: see Documentation.ConfiguringTheLogs for details.`

147436: Exceptions concerning log and/or configuration files should report the expected file location

Exceptions now report the expected file location so debugging your configuration is easier.

149698: Require SLF4J 1.4 or higher so trace level is supported

For our new logging policies we need trace and this is only available in version 1.4 of SLF4J.

148495: Move methods from deprecated TransactionControl to CompositeTransaction and remove TransactionControl

The TransactionControl interface has been removed from our API and its remaining functionality has been merged into the CompositeTransaction interface.

70515: Participant: refactor from Dictionary to Map

The Map is cleaner at API level (not a JDK implementation class).

142795: Optimisation for concurrent load with TemporaryXATransactionalResource

Added a contributed improvement for dynamically registered XAResource instances so we avoid race conditions under high load.

116801: Redesign recovery to avoid serialising participants so we keep memory usage low and minimize heuristic overhead

We now avoid serialisation with our brand-new recovery implementation.

135128: Separate OLTP logic from restart/recovery logic to simplify the transaction states and handlers

OLTP logging and restart/crash recovery logic are now separated, which simplifies the transaction state handlers and puts us on the road to improved compatibility with cloud deployments.

87768: Configurable wait timeout during shutdown

Shutdown used to be binary: either you waited for active transactions to finish, or not. We've now added an option of specifying a timeout in milliseconds. The system will wait for active transactions to finish within the specified delay, and resort to forced shutdown after that.

148219: Dynamic XAResource registration: use hashCode rather than toString to generate a resource name

We changed this in an attempt to make resource names more unique. A more profound solution will be available in a later release, when we improve dynamic resource registration.

116270: Ported fix to community edition

Fixed a bug reported in this forum post: http://fogbugz.atomikos.com/default.asp?community.6.3133.0

135325: Remove HeuristicMessage support

This feature is no longer needed in our modernised code base so we have removed it.

135349: Make build work with JDK 7/8

The build now works on/with the latest JDK versions.

136943: PropertyUtils should support all Java primitive types

All built-in primitive types are now supported.

127224: Use the new RecoveryScan utility class for XA recovery

No comment needed on this one - it is an internal issue.

117665: One big zip file for all demos/examples so administration is easier

We've added one big zip file for all demos - this is simpler to handle for everybody.

116968: Re-enable and fix OSGi examples in build

The OSGi examples are now included again. Previously, they were excluded because the build used to fail on them.

117662: TCC/REST coordinator service emits Content-type instead of Accept header

Our coordinator service implementation did not properly set the Accept header when confirming a participant service. This has been fixed.

117742: Refine UserTransactionManager behavior after close - for increased usability

The following methods are sure to be allowed after close: rollback, setRollbackOnly, suspend, resume.

117362: Added documentation section on transaction events

Documented the event mechanism (in the PDF guide covering the API).

117090: Added easy way to launch a coordinator server for TCC

It is now possible to quickly launch a coordinator server from the TCC demos so you can easily test your own participant services for compliance.

116759: Included community fixes from 3.9.0-3.9.3

See ExtremeTransactions3dot9dot3 for details.

116758: Example for Hibernate 4 integration

Added runnable example to demonstrate Hibernate 4 integration.

115604: Increase logging level to ERROR for errors in beforeCompletion Synchronization callbacks

The log level has been increased to avoid losing time chasing errors that happen during beforeCompletion and prevent committing the transaction.

116649: Hibernate4 support: Atomikos JTAPlatform

We now support hibernate 4 in an easy way, as demonstrated by the corresponding new examples.

94676: Avoid writing and maintaining .epoch file

We now avoid writing .epoch files for increased flexibility and usability.

23765: Deprecate Swing beans package

We no longer need Swing libraries: these have long been replaced by JMX support.

112579: Fixed support for com.atomikos.icatch.enable_logging=false

Disabling transaction logging now works again.

112646: Enable backward compatibility of sessionTransacted behavior

Legacy applications/configurations that expect the 'old' behavior of our JMS sessions (determined by the sessionTransacted flag passed upon session creation) can now re-enable this behavior by setting the ignoreSessionTransactedFlag on the Atomikos connection factory to false.

112579: Property com.atomikos.icatch.enable_logging is ignored

This setting got ignored in the 3.9 release, meaning there was no way to turn logging off - this has now been fixed.

147733: Removed write-ahead logging extension module

For now, this module is no longer compatible with the new logging/recovery and has been removed. Later on, we'll consider the equivalent for the new logging mechanism.

89208: Improved constructor for RemoteClientUserTransaction

Added a new constructor that accepts the ConfigProperties as parameter. This allows reuse of config parameters that are looked up by the core startup.

Available to customers only. Want to become a customer?

Send me a quote

Corporate Information

Atomikos Corporate Headquarters
Hoveniersstraat, 39/1, 2800
Mechelen, Belgium

Contact Us

Copyright 2026 Atomikos BVBA | Our Privacy Policy
By using this site you agree to our cookies. More info. That's Fine