2010-09-30 5 views
2

Avoir une transaction dans une classe de service Grails sur lequel un drapeau de rollback est défini:Grails: maintenir le contexte transactionnel de service au contrôleur

TransactionAspectSupport 
      .currentTransactionInfo() 
       .transactionStatus 
        .setRollbackOnly() 

ce qui se passe est que lorsque nous revenons au contrôleur une exception:

org.springframework.transaction.UnexpectedRollbackException 

que nous devons attraper dans le contrôleur (mais pas dans l'une des classes de service). Ce code est en cours de refactorisation de la solution précédente où toute la logique est arrivée directement dans le contrôleur. Tout conseil sur ce qui se passe que les voyages de cette exception levée lorsque la méthode retourne, étant donné que:

static transactional = true 

a été mis sur toutes les classes. Devinant il y a des versets de contrôleur subtils Service de magie se passe - quelqu'un est-il au courant? Pour l'instant, il suffit d'attraper l'exception en guise de solution de contournement, mais l'objet TransactionStatus qui aurait autrement été renvoyé est perdu.

Toute pensée très appréciée

Répondre

3

gestion des transactions dans Grails est assez laid (pour moi). Donc, je profite des transactions déclaratives de printemps: Chapter 9. Transaction management Ils fonctionnent parfaitement dans les services de grails.

Retour à setRollbackOnly(). Cette méthode n'est pas simple ... Tandis que vous avez défini RollBack = true dans votre transaction interne, vous avez déclenché l'annulation de votre transaction externe pour que vous obteniez une exception.

J'ai problème similaire il y a quelque temps - ici est l'information utile pour trouver la meilleure solution pour vous convenant:

+0

Merci pour cela. Cependant, nous sommes à court de temps pour étudier ces alternatives et pour l'instant, nous ne faisons qu'attraper l'exception car la transaction existe le service et entre dans le contrôleur. Réponse définitivement appréciée cependant – Alex

Questions connexes