Frage

Java EE 6 CDI Ereignisse transaktionale?

Wenn ich ein Ereignis in einer Transaktion ausgelöst, und anschließend die Transaktion rückgängig zu machen, sind die Auswirkungen des Ereignis-Listener als auch ein Rollback?

Dieses Verhalten ist abhängig von dem Ereignis-Listener selbst unterstützt Transaktionen?

Was ist, wenn ich versuche, und Roll-back die Ausnahme von innen dann Ereignis-Listener, tut es roll-back die Transaktion, die das Ereignis gefeuert?

War es hilfreich?

Lösung

Von den Ereignissen Kapitel der CDI-1.0-Spezifikation, man kann ein Ereignis zu sein „transaktional“ definieren, indem die Transaction Spezifizieren eines beobachtet, wobei ein von Transaction:

  • IN_PROGRESS,
  • BEFORE_COMPLETION,
  • After_Completion,
  • AFTER_FAILURE,
  • AFTER_SUCCESS

Eine solche Erklärung sieht aus wie:

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

Wenn der Beobachter nicht deklariert wird „transaktionale“ zu sein, dann wird der Container ruft den Betrachter sofort, sonst meldet er die Beobachter Methode zum späteren Aufruf während der Transaktionsabschlussphase, eine JTA Synchronisation verwendet wird.

Allerdings:

  

Alle Beobachter Verfahren vor Abschluss einer Transaktion aufgerufen nennen setRollbackOnly () eine Transaktion Rollback zu erzwingen. Ein Beobachter Verfahren kann nicht direkt initiiert, Commit oder Rollback JTA-Transaktionen.

Wenn der Beobachter Methode löst eine Ausnahme (und selbst nicht „transaktionale“) die Ausnahme Abbruch Verarbeitung des Ereignisses.

So, das Verhalten zu erreichen, ich suche, ich glaube, ich würde meinen Beobachter als „transaktionale“, Register und die BEFORE_COMPLETION Transaction angeben. Ich würde dann rufen setRollbackOnly (), wenn ich die Transaktion, die das Ereignis rückgängig zu machen wollte eingeleitet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top