15 votes

Le printemps : Gestionnaire de transactions piloté par annotation

Je suis en train de mettre en place un nouveau projet JPA+Spring. Quelle est la différence (pour moi, en tant que programmeur) entre :

<tx:annotation-driven transaction-manager="transactionManager" />

et

<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />

dans mon applicationContext.xml ?

32voto

Ralph Points 42744

Il y a une énorme différence entre les proxies et les aspects de tissage de code à octet. Les mandataires ne peuvent intercepter que si l'invocation provient de "l'espace extérieur", mais pas si l'invocation provient de l'objet lui-même (this.transactionalMethod()).

Cela signifie que si vous avez une classe avec deux méthodes, T et B. Méthode T a une annotation de transaction, et la méthode B invoque T par “this.T() ", alors le proxy n'est jamais invoqué (pour T ), il n'y a donc pas de gestion des transactions dans ce cas !

Si vous utilisez AspectJ, le code de gestion des transactions est tissé dans le code d'octet de l'application. T et elle sera exécutée, que l'invocation provienne de l'objet lui-même ou d'un autre objet.

7voto

Bozho Points 273663

Les docs dites :

Le mode par défaut "proxy" traite les beans annotés pour qu'ils soient proxiés en utilisant le framework AOP de Spring (en suivant la sémantique du proxy, comme discuté ci-dessus, s'appliquant aux appels de méthode entrant par le proxy uniquement). Le mode alternatif "aspectj" tisse plutôt les classes concernées avec l'aspect transactionnel AspectJ de Spring, modifiant le byte code de la classe cible pour s'appliquer à tout type d'appel de méthode. Le tissage AspectJ requiert spring-aspects.jar dans le classpath ainsi que l'activation du tissage en temps de chargement (ou en temps de compilation). (Voir la section 7.8.4.5, " Configuration de Spring " pour plus de détails sur la façon de configurer le tissage en temps de charge).

Le mode qui sera utilisé n'a pas d'importance (du point de vue du développeur).

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