IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Challenge ! Spring + Hibernate = double transaction ?


Sujet :

Spring Java

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Challenge ! Spring + Hibernate = double transaction ?
    Salut @ tous !

    Je suis confronté à un pb avec Hibernate, Spring et les transactions : "[save|createQuery] is not valid without active transaction". J'utilise une Datasource configurée avec Tomcat, et je veux utiliser AOP pour la gestion des transactions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
     <property name="mappingResources">
      <list>
       <!--[all my mappings]-->
      </list>
     </property>
     <property name="hibernateProperties">
      <value>
       hibernate.connection.datasource=java:comp/env/jdbc/myapp
       hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
       hibernate.current_session_context_class=thread
       hibernate.transaction.factory_class=org.springframework.orm.hibernate3.SpringTransactionFactory
       hibernate.show_sql=true
      </value>
     </property>
    </bean>
     
    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     <property name="sessionFactory" ref="sessionFactory" />
    </bean>
     
    <tx:advice id="txAdvice" transaction-manager="txManager">
     <tx:attributes>
      <tx:method name="get*" read-only="true" />
      <tx:method name="*" isolation="READ_COMMITTED" rollback-for="com.myapp.framework.exception.ManagerException" />
     </tx:attributes>
    </tx:advice>
     
    <aop:config>
     <aop :p ointcut id="pcManager1" expression="execution(public * com.myapp.framework.dao.manager..*(..))" />
     <aop :p ointcut id="pcManager2" expression="execution(public * com.myapp.dao.manager..*(..))"/>
     <aop:advisor advice-ref="txAdvice" pointcut-ref="pcManager1" />
     <aop:advisor advice-ref="txAdvice" pointcut-ref="pcManager2" />
    </aop:config>
    Tout semble OK dans les logs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    opened session at timestamp: 12306501743
    DEBUG [org.hibernate.jdbc.ConnectionManager] (ConnectionManager.java:415) - opening JDBC connection
    DEBUG [org.hibernate.transaction.JDBCTransaction] (JDBCTransaction.java:54) - begin
    DEBUG [org.hibernate.transaction.JDBCTransaction] (JDBCTransaction.java:59) - current autocommit status: true
    DEBUG [org.hibernate.transaction.JDBCTransaction] (JDBCTransaction.java:62) - disabling autocommit
    DEBUG [org.hibernate.impl.SessionImpl] (SessionImpl.java:220) - opened session at timestamp: 12306501743
    et lorsque j'appelle une sauvegarde sur la session, j'ai une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    session = ((SessionFactory) MyBeanFactoryFromSpring.getInstance().getBean(BeanConstants.SESSION_FACTORY)).getCurrentSession();
    session.save(myObject);
    .. ce qui provoque ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    org.hibernate.HibernateException: save is not valid without active transaction
     at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:297)
    ...
    De plus, la transaction ouverte précédemment semble pourtant bien faire un rollback !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DEBUG [org.hibernate.transaction.JDBCTransaction] (JDBCTransaction.java:152) - rollback
    DEBUG [org.hibernate.transaction.JDBCTransaction] (JDBCTransaction.java:193) - re-enabling autocommit
    DEBUG [org.hibernate.transaction.JDBCTransaction] (JDBCTransaction.java:163) - rolled back JDBC Connection
    DEBUG [org.hibernate.jdbc.ConnectionManager] (ConnectionManager.java:296) - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
    DEBUG [org.hibernate.jdbc.ConnectionManager] (ConnectionManager.java:435) - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    Enfin, à noter que lorsque j'utilise la méthode "manuelle" (à savoir beginTransaction et commit), cela fonctionne !!! Je n'y comprends plus rien..

    Quelqu'un a une idée sur cette "double transaction" ?
    Dernière modification par Robin56 ; 25/07/2013 à 16h30. Motif: Ajout du préfixe

Discussions similaires

  1. [Data] Spring - Hibernate => Transactions
    Par Flam dans le forum Spring
    Réponses: 3
    Dernier message: 05/06/2012, 17h24
  2. Spring + Hibernate + JBoss : Transaction AOP
    Par meryodev dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 03/06/2011, 23h02
  3. [Data] Problème gestion transactions spring/hibernate
    Par Reno17 dans le forum Spring
    Réponses: 4
    Dernier message: 04/02/2010, 15h36
  4. [Data] Problème de transaction Spring Hibernate
    Par totoz dans le forum Spring
    Réponses: 0
    Dernier message: 01/07/2009, 16h21
  5. [Spring][Hibernate] Transaction déclarative
    Par mauvais_karma dans le forum Hibernate
    Réponses: 13
    Dernier message: 03/07/2008, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo