Spring n’implémente pas de transaction manager mais permet de se connecter et de déléguer des appels aux gestionnaire transactionnels.
Plusieurs implémentations sont proposées :
- Transaction local
- HibernateTransactionManager
- JpaTransactionManager
- DataSourceTransactionManager
- Transaction managée
- JtaTransactionManager
- WebLogicJtaTransactionManager
- WebSphereUowTransactionManager
Déclaration pour JDBC::
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
Déclaration pour Hibernate::
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
Déclaration pour JTA::
<tx:jta-transaction-manager/>
- Spring détecte le serveur d'application et applique le manager adéquat (JtaTransactionManager, WebLogicJtaTransactionManager, WebSphereUowTransactionManager, ...)
// activation du support de l'annotation @Transactional
@EnableTransactionManagement
public class PizzaAppConfig {
@Bean
public PlatformTransactionManager txManager(DataSource datasource) {
return new DataSourceTransactionManager(datasource);
}
}
Positionner sur une classe, toutes les méthodes sont impactées.
@Transactional
public class PizzaService {
}
Positionner sur une méthode, seule la méthode est impactée::
public class PizzaService {
@Transactional
public void create(Pizza pizza) {
}
}