/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
Defines the resource-level transaction capabilities of Hibernate, which revolves around the TransactionCoordinator
contract. TransactionCoordinator instances can be obtained from TransactionCoordinatorBuilder
, which is a Service and available from the StandardServiceRegistry
A few terms/concepts to keep in mind here...
Local transaction
The local transaction is the idea of transactionality exposed to the application (as Transaction
) as a means to control the underlying transaction. That control flows from the Transaction
into the TransactionCoordinator through the TransactionDriver
it exposes. Physical transaction
This is the physical underlying transaction that ultimately controls the database transaction. This
can be:
- a JTA transaction, as expressed by
UserTransaction
or Transaction
)
- a "JDBC transaction", as expressed through the JDBC
Connection
object
The corresponding concrete TransactionCoordinator implementations manage that bridging internally.
Local Synchronization
The Hibernate transaction api allows the application itself to register JTA Synchronization objects with the TransactionCoordinator. These local Synchronizations work in all transaction environments. See Transaction.registerSynchronization
and SynchronizationRegistry
for additional details. /**
* Defines the resource-level transaction capabilities of Hibernate, which revolves around the
* {@link org.hibernate.resource.transaction.spi.TransactionCoordinator} contract.
* <p/>
* TransactionCoordinator instances can be obtained from
* {@link org.hibernate.resource.transaction.spi.TransactionCoordinatorBuilder}, which is a Service
* and available from the StandardServiceRegistry
* <p/>
* A few terms/concepts to keep in mind here...
*
* <h2>Local transaction</h2>
*
* The local transaction is the idea of transactionality exposed to the application (as
* {@link org.hibernate.Transaction}) as a means to control the underlying transaction. That
* control flows from the {@link org.hibernate.Transaction} into the TransactionCoordinator
* through the {@link org.hibernate.resource.transaction.spi.TransactionCoordinator.TransactionDriver} it exposes.
*
* <h2>Physical transaction</h2>
*
* This is the physical underlying transaction that ultimately controls the database transaction. This
* can be:<ul>
* <li>
* a JTA transaction, as expressed by {@link javax.transaction.UserTransaction} or
* {@link javax.transaction.Transaction})
* </li>
* <li>
* a "JDBC transaction", as expressed through the JDBC {@link java.sql.Connection} object
* </li>
* </ul>
*
* The corresponding concrete TransactionCoordinator implementations manage that bridging internally.
*
* <h2>Local Synchronization</h2>
*
* The Hibernate transaction api allows the application itself to register JTA Synchronization
* objects with the TransactionCoordinator. These local Synchronizations work in all transaction
* environments. See {@link org.hibernate.Transaction#registerSynchronization} and
* {@link org.hibernate.resource.transaction.spi.SynchronizationRegistry} for additional details.
*
*/
package org.hibernate.resource.transaction;