Question

sont des événements Java EE 6 CDI transactionnel?

Si je tire un événement dans une transaction, puis annuler la transaction, sont les effets de l'écouteur d'événement roula aussi bien?

Est-ce comportement en fonction de l'écouteur d'événement lui-même les opérations de soutien?

Qu'en est-il si je tente de roll-back l'exception de l'intérieur puis écouteur d'événement, il ne roll-back de la transaction qui a déclenché l'événement?

Était-ce utile?

La solution

De chapitre de la spécification 1.0 CDI, on peut définir un événement à « transactionnel » en spécifiant une TransactionPhase observe, où TransactionPhase est l'un:

  • IN_PROGRESS,
  • BEFORE_COMPLETION,
  • AFTER_COMPLETION,
  • AFTER_FAILURE,
  • AFTER_SUCCESS

Un tel aspect de déclaration comme:

void onDocumentUpdate(@Observes(during=AFTER_SUCCESS) @Updated Document doc) { ... }

Si l'observateur a déclaré être « transactionnel », le conteneur appelle immédiatement l'observateur, sinon il enregistre la méthode d'observation pour l'appel plus tard au cours de la phase d'achèvement de la transaction, à l'aide d'une synchronisation JTA.

Cependant:

  

Toute méthode d'observation appelé avant la fin d'une transaction peut appeler setRollbackOnly () pour forcer une annulation de la transaction. Une méthode d'observation ne peut engager directement, commettre ou transactions JTA rollback.

Si la méthode d'observation jette une exception (et lui-même est pas « transactionnel ») les Abandonne d'exception traitement de l'événement.

Alors, pour obtenir le comportement que je suis à la recherche, je crois que j'enregistrer mon observateur comme « transactionnel », et préciser le BEFORE_COMPLETION TransactionPhase. Je voudrais donc appeler setRollbackOnly () si je voulais annuler la transaction qui a initié l'événement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top