2 votes

aucune transaction n'est en cours depuis la migration de printemps vers 4.3.3

Je suis confronté à un problème et je n'arrive pas à trouver de solution.

Je suis en train de migrer un projet de Hibernate 5.1.1 à 5.2.2 et Spring de 4.1.0 à 4.3.3.

En utilisant weblogic, lorsque j'essaie de déployer mon oreille, je reçois une TransactionRequiredException : aucune transaction n'est en cours.

Cela se produit sur un haricot qui est censé faire beaucoup de requêtes à la base de données, et la méthode est annotée @PostConstruct.

Cela fonctionnait bien avant, j'ai mis à jour ma configuration hibernate selon le guide de migration et je n'arrive pas à trouver la solution.

Voici la configuration modifiée pour Hibernate 5.2.2 :

<prop key="hibernate.transaction.coordinator_class">jta</prop>
<!-- How to produce transaction -->
<prop      key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform</prop>

Voici un extrait du journal du serveur :

Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress
   at org.hibernate.internal.SessionImpl.checkTransactionNeeded(SessionImpl.java:3428) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
   at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1395) [hibernate-core-5.2.2.Final.jar:5.2.2.Final]
   at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1391) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
   at org.springframework.orm.hibernate5.SessionFactoryUtils.flush(SessionFactoryUtils.java:144) ~[spring-orm-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at org.springframework.orm.hibernate5.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:95) ~[spring-orm-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:932) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:744) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:487) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE]
   at com.sun.proxy.$Proxy408.findAll(Unknown Source) ~[?:?]

Il fonctionnait bien avant ma tentative de migration et je suppose que c'est lié au fait que le bean est initialisé mais que la transaction est fermée.

Ce qui est étrange, c'est que lorsque je débogue la méthode, je parviens à obtenir les premiers appels à la base de données, mais l'opération échoue par la suite.

Dans les deux cas, j'utilise :

getHibernateTemplate().executeWithNativeSession(new HibernateCallback<List<E>>()

L'un d'entre vous a-t-il rencontré ce genre de problème ?

J'ai cherché sur Internet pendant des jours et je n'ai pas trouvé une seule réponse correspondant à ce problème (en fait, cela se produit également sur mes tests Junit).

Merci d'avance pour votre aide.

A la vôtre !

1voto

Strider Points 356

J'ai rencontré le même problème lors de la migration vers Hibernate 5.2.2 et Spring 4.3.3.

Dans mon code, je n'utilisais pas nécessairement une méthode de construction @Post mais j'avais la même exception aucune transaction n'est en cours lors de l'appel d'un simple Obtenez de la base de données.

J'ai trouvé ce lien sur le forum Spring, et à la fin de la discussion, il a été souligné que le problème se produit dans certaines transactions, mais pas dans d'autres.

Dans mon cas, lorsque j'ai annoté ma transaction avec REQUIRED propagation, le problème a disparu (il était SUPPORTS au début).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X