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 :

Hibernate-spring AOP : Problème d'ordre des advices sur le même pointcut [Framework]


Sujet :

Spring Java

  1. #1
    Membre régulier Avatar de 17mounir
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2005
    Messages : 101
    Points : 78
    Points
    78
    Par défaut Hibernate-spring AOP : Problème d'ordre des advices sur le même pointcut
    Salut !
    J'utilise Spring 2 et Hibernate 3 :

    - Spring me gère les transactions avec annotation sur les méthodes (advice fourni par spring)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      <!-- Transaction manager pour une SessionFactory Hibernate -->
      <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
      </bean>
     
      <!-- Cette declaration rend actif le mode transactionnel par annotation  -->
      <tx:annotation-driven transaction-manager="transactionManager" />
    Je souhaite ajouter un autre advice (after returning) sur des méthodes transactional (avec les annotations)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <!-- Aspects en AOP -->
    <aop:config>
    	<aop:aspect id="observerAspect"  ref="observerAdvice">
                   <aop:pointcut id="myPointcut" expression="execution(* *.I*Service.*(..))" />
                   <aop:after-returning pointcut-ref="myPointcut" method="sendObservation" />
    	</aop:aspect>
    </aop:config>
     
    <!-- Advice -->	
    <bean id="oserverAdvice"    class=" x.ObserverAdvice" >
    </bean>
    Mon problème est que mon nouveau advice doit m'ouvrir une autre transaction et j'ai l'impression que la première n'est pas comitée (l'advice de spring est appelé après celui que j'ai ajouté)

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @Transactional (Propagation.REQUIRED)
    public void interceptedMethod() {
     
    }
     
    // Le scénario souhaité :
    // 1- Spring intercept cette méthode et ouvre une transaction
    // 2- interceptedMethod est executée (sans exception !)
    // 3- Spring ferme la transaction qu'il a cré
    // 4- observerAspect intercept cette méthode (elle est couvert par le pointcut)
    J'ai l'impression que 4 est exécuté avant le 3 (j'en suis sur car j'ai marqué mon advice avec @Transactional.PROPAGATION.NEVER et la j'ai l'exception qu'une exception existe)

    J'ai plusieurs questions :

    Coment je peux faire pour bien débugguer l'ouverture et la fermeture de mes transactions ?

    J'ai l'impression qu'il y a différentes façon de faire de l'aop (MethodInterceptor aussi) c'est quoi la plus simple et récente (je suis en spring 2)

    Y a t 'il un moyen de défnir un ordre pour les advice qui match le même pointcut ?

    ça fait des heures que je suis bloqué :-S

    Merci d'avance

  2. #2
    Membre régulier Avatar de 17mounir
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2005
    Messages : 101
    Points : 78
    Points
    78
    Par défaut
    Il y a un moyen tout simple pour définir l'ordre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <aop:aspect id="observerAspect"  ref="observerAdvice" order="1">
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <tx:annotation-driven transaction-manager="transactionManager" order="2" />
    Pour l'instant ça semble très bien marcher

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VxiR2] Problème d'ordre des invites
    Par coolmek dans le forum Webi
    Réponses: 1
    Dernier message: 14/11/2011, 14h57
  2. Problème d'ordre des print
    Par csseur22 dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 16/06/2009, 20h31
  3. problème d'ordre des tris
    Par knulp dans le forum Administration
    Réponses: 9
    Dernier message: 12/03/2009, 14h12
  4. Problème avec ordre des modules
    Par rafailow dans le forum Langage
    Réponses: 1
    Dernier message: 05/08/2008, 21h10
  5. Problème d'ordre des points dans un Tchart
    Par pasqual dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2007, 12h04

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