| = Aries Transaction Control Service |
| |
| == OSGi Transaction Control Service |
| |
| This set of modules is an implementation of the proposed OSGi Transaction Control Service and related services, such as JDBC and JPA resource providers. |
| |
| The Transaction Control Service (RFC-221) is an in-progress RFC publicly available from the OSGi Alliance: https://github.com/osgi/design/blob/master/rfcs/rfc0221/rfc-0221-TransactionControl.pdf |
| |
| Given that the RFC is non-final the OSGi API declared in this project is subject to change at any time up to its official release. |
| Also the behaviour of this implementation may not always be up-to-date with the latest wording in the RFC. |
| The project maintainers will, however try to keep pace with the RFC, and to ensure that the implementations are compliant with any OSGi specifications that result from the RFC. |
| |
| == Getting started |
| |
| The current released version of Transaction Control is 0.0.1, and it is available in https://mvnrepository.com/artifact/org.apache.aries.tx-control[Maven Central] |
| |
| If you're new to the Transaction Control service then we recommend that you read the xref:modules/tx-control/quickstart.adoc[quickstart documentation first]. |
| |
| More detailed documentation is available in the xref:modules/tx-control/index.adoc[Aries Transaction Control Project] |
| |
| == Why use the Transaction Control service? |
| |
| Simply put the Transaction Control service makes resource access easy! |
| There's no need to worry about transaction lifecycle or closing connections, and there's built in support for useful features like connection pooling. |
| |
| In addition to being simple the Transaction Control service also makes transaction management explicit. |
| As a result it is easier to follow the transactions flowing throughout your code, and it protects you from the xref:modules/tx-control/spring-tx.adoc[proxy problem] that declarative transaction strategies often suffer from. |
| |
| == Modules |
| |
| The following modules are available for use in OSGi |
| |
| . xref:modules/tx-control/localTransactions.adoc[tx-control-service-local] :- A purely local transaction control service implementation. |
| This can be used with any resource-local capable ResourceProvider |
| . xref:modules/tx-control/xaTransactions.adoc[tx-control-service-xa] :- An XA-capable transaction control service implementation based on the Geronimo Transaction Manager. |
| This can be used with XA capable resources, or with local resources. |
| Local resources will make use of the last-participant gambit. |
| . xref:modules/tx-control/localJDBC.adoc[tx-control-provider-jdbc-local] :- A JDBC resource provider that provides connection pooling and that can integrate with local transactions. |
| The JDBCConnectionProviderFactory service may be used directly, or a service may be configured using the _org.apache.aries.tx.control.jdbc.local_ pid |
| . xref:modules/tx-control/xaJDBC.adoc[tx-control-provider-jdbc-xa] :- A JDBC resource provider that provides connection pooling and that can integrate with local or XA transactions. |
| The JDBCConnectionProviderFactory service may be used directly, or a service may be configured using the _org.apache.aries.tx.control.jdbc.xa_ pid |
| . xref:modules/tx-control/localJPA.adoc[tx-control-provider-jpa-local] :- A JPA resource provider that can integrate with local transactions. |
| The JPAEntityManagerProviderFactory service may be used directly, or a service may be configured using the _org.apache.aries.tx.control.jpa.local_ pid. |
| The implementation can also provide connection pooling if required |
| . xref:modules/tx-control/xaJPA.adoc[tx-control-provider-jpa-xa] :- A JDBC resource provider that integrates with XA transactions. |
| The JPAEntityManagerProviderFactory service may be used directly, or a service may be configured using the _org.apache.aries.tx.control.jpa.xa_ pid. |
| The implementation can also provide connection pooling if required |
| |
| === Which modules should I use? |
| |
| If you wish to use entirely lightweight, resource-local transactions then it is best to pair the tx-control-service-local and tx-control-provider-jdbc-local or tx-control-provider-jpa-local bundles. |
| This will give transactional behaviour, but the result is _not guaranteed to be ACID if more than one resource is used_. |
| |
| If ACID behaviour is needed across multiple resources then the tx-control-service-xa _must_ be used. |
| This service also provides an XA enabled two-phase commit algorithm, and also allows for ACID behaviour when _one_ of the resources only supports local transactions by using the last participant gambit. |
| |
| When using the XA Transaction control service then the tx-control-provider-jdbc-xa or tx-control-provider-jpa-xa resource provider bundles should be used. |
| |
| *IT IS NOT RECOMMENDED* to use both tx-control-service-xa and tx-control-service-local at the same time. |
| This will be confusing, and may lead to problems if different parts of the application bind to different service implementations. |
| |
| *NOTE:* There is also no reason to use the tx-control-provider-jdbc-local in addition to the tx-control-provider-jdbc-xa service. |
| Using both together is not typically harmful, however the tx-control-provider-jdbc-xa bundle supports all of the same features as the tx-control-provider-jdbc-local bundle. |
| The same is *not* true of the JPA provider implementations. |
| |
| == Pre-release APIs |
| |
| As part of the Aries Transaction Control implementations pre-release versions of the OSGi Transaction Control API are provided. |
| Rather than putting the API into the wrong package namespace, or outputting them at the wrong version, they will be exported with a mandatory attribute of `api.status=aries.prerelease`. |
| |
| By setting this attribute on their API imports users accept that the API may change without a change to the package version(s). |
| These changes may, or may not, be binary compatible. |
| Once the specification is final the attribute will be removed from the export. |