Salut !
J'utilise Spring 2 et Hibernate 3 :
- Spring me gère les transactions avec annotation sur les méthodes (advice fourni par spring)
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 <!-- 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" />
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é)
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>
Exemple :
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)
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 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
Partager