Probably our most important new release ever!
We've open-sourced TCC for REST
) 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.
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 JTA Properties
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.
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:
Configuration class was moved to package
UserTransactionService no longer has the
init(TSInitInfo) method: initialisation now takes either no arguments, or a
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 JTA Properties
149260: Log less in INFO mode
We have refined and improved the way we log: see Configuring the Logs
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.
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.
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 ExtremeTransactions 3.9.3
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.
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.
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.
Most of the changes mentioned on this page are available for free in TransactionsEssentials