2010-11-28 23 views
0

supose Je l'exemple suivant:Comment utiliser les conseillers en transactions avec des annotations?

@Transactional(propagation=Propagation.SUPPORTS, readOnly=true) 
public class MyServiceImpl implements MyService { 

    ... 

    @Transactional(propagation=Propagation.REQUIRED, readOnly=false) 
    public TransactionResponse addMyEntity(MyEntity e) throws SQLException{ 
     ... 
    } 

    ... 
} 

Et dans mon applicationContext:

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

Ok, maintenant je veux ajouter un intercepteur après l'annulation de la transaction si un SQLException est levée. Comment puis-je faire ceci?

Merci à l'avance

EDIT

Je vais essayer de clarifier ce que je suis en train de faire:

J'ai WS, qui persiste quelques informations sur une base de données et retourne une réponse (un booléen IsOk et un errorMessage si quelque chose a mal tourné)

Chaque fois qu'une exception est levée, je dois:

  • Annule la transaction
  • Générez la réponse avec le message d'erreur et renvoyez-la au client.

Il est comme un try/catch autour du proxy de transaction ressort

+0

J'ai déjà résolu mon problème en ajoutant un try/catch au point de terminaison WS. J'ai oublié qu'il y avait une couche de plus au dessus de mon service. Le point de terminaison est hors de la transaction, donc je peux (et je sais maintenant que je dois) gérer la réponse dans le point de terminaison. Néanmoins, j'aimerais savoir s'il existe un moyen de faire ce que j'essayais de faire auparavant. – Neuquino

+0

pouvez-vous montrer comment vous définissez votre aspect supplémentaire? (code xml et java) – Bozho

Répondre

1

Utilisez l'attribut order de tx:annotation-driven et de l'intercepteur vous allez utiliser. Ainsi vous spécifiez lequel s'exécute avant l'autre. Voir la section AOP AspectJ advice ordering

+0

Merci @Bozho, mais je ne comprends pas comment je peux définir le point de jointure pour faire ce que je dois faire. S'il vous plaît, lisez la mise à jour EDIT – Neuquino