Bonjour,
J'ai une application bâtie sur Spring qui stocke des données dans une base de données en utilisant Hibernate. Afin de ne pas ralentir l'appli, j'utilise un pool de threads (java.util.concurrent) pour les accès à la base de données.
Je me retrouve donc avec un code du type (en version simplifiée) :
L'ennui est qu'avec ce code, les transactions ne fonctionnent pas. Si une exception est levée dans ma méthode, le rollback n'est pas effectué, et des données sont stockées de manière permanente dans la base de données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Transactional(rollbackFor = Throwable.class) public void save(List<Value> values) { executor.execute(new Runnable() { public void run() { for ( Values val : values ) getHibernateTemplate.save(val); } }); }
D'où ma question : comment puis-je faire pour étendre mon contexte transactionnel à tous les threads utilisés pour les accès à la base ?
Merci d'avance
Partager