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 !