10.2.2. Configuring a Seam transaction manager
Seam provides a transaction management abstraction for beginning, committing, rolling back, and synchronizing with transactions. By default, Seam uses a JTA transaction component to integrate with container-managed and programmatic EJB transactions. If you work in a Java EE 5 environment, install the EJB synchronization component in
components.xml
:
<transaction:ejb-transaction />
However, if you work in a non-EE 5 container, Seam attempts to auto-detect the correct transaction synchronization mechanism. If Seam is unable to detect the correct mechanism, you may need to configure one of the following:
- configure JPA RESOURCE_LOCAL managed transactions with the
javax.persistence.EntityTransaction
interface.EntityTransaction
starts the transaction at the beginning of the apply request values phase. - configure Hibernate managed transactions with the
org.hibernate.Transaction
interface.HibernateTransaction
starts the transaction at the beginning of the apply request values phase. - configure Spring managed transactions with the
org.springframework.transaction.PlatformTransactionManager
interface. The SpringPlatformTransactionManagement
manager may begin the transaction at the beginning of the apply request values phase if theuserConversationContext
attribute is set. - Explicitly disable Seam managed transactions
To configure JPA RESOURCE_LOCAL transaction management, add the following to your
components.xml
, where #{em}
is the name of the persistence:managed-persistence-context
component. If your managed persistence context is named entityManager
, you may leave out the entity-manager
attribute. (For further information, see Section 10.3, “Seam-managed persistence contexts”.)
<transaction:entity-transaction entity-manager="#{em}"/>
To configure Hibernate managed transactions, declare the following in your
components.xml
, where #{hibernateSession}
is the name of the project's persistence:managed-hibernate-session
component. If your managed hibernate session is named session
, you can opt to leave out the session
attribute. (For further information, see Section 10.3, “Seam-managed persistence contexts”.)
<transaction:hibernate-transaction session="#{hibernateSession}"/>
To explicitly disable Seam managed transactions, declare the following in your
components.xml
:
<transaction:no-transaction />
For information about configuring Spring-managed transactions see Section 26.5, “Using Spring PlatformTransactionManagement”.