JTA (Java Transaction API) defines the interfaces for Java applications to interact with the platform-specific transaction manager. Like most APIs in Java, JTA allows for different implementations that offer the same interface towards the application. This implies that you can write transactional Java applications that do not depend on any particular transaction manager vendor (if you adhere to the API that is). Some vendors like Atomikos®
offer their implementation in open source, whereas other vendors (like IBM) offer an implementation as part of their application server.
Be careful when evaluating an implementation of JTA: all too often, things are broken when you look under the hood. Although hard to believe, it is possible for an application server to certify as "J2EE compliant" (by passing the official compatibility tests) but still have no or only virtual support for transaction management.
See the JTA spec
hosted by Oracle (Sun), or check the manuals and examples in the TransactionsEssentials