Domanda

Gli eventi sono Java EE 6 CDI transazionale?

Se io generare un evento in una transazione, e, successivamente, il rollback della transazione, sono gli effetti del listener di eventi rollback come bene?

E 'questo comportamento dipende l'ascoltatore evento stesso sostenendo le transazioni?

Che dire se provo e roll-back l'eccezione dall'interno poi listener di eventi, lo fa roll-back della transazione che ha generato l'evento?

È stato utile?

Soluzione

eventi capitolo della specifica CDI 1.0, si può definire un evento per essere "transazionale" specificando il TransactionPhase uno sta osservando, dove TransactionPhase è uno dei seguenti:

  • in_progress,
  • BEFORE_COMPLETION,
  • AFTER_COMPLETION,
  • AFTER_FAILURE,
  • AFTER_SUCCESS

Un tale aspetto dichiarazione del tipo:

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

Qualora l'osservatore non è dichiarato essere "transazionale", allora il contenitore chiama l'osservatore subito, altrimenti si registra il metodo osservatore invocazione successivamente durante la fase di completamento dell'operazione, utilizzando una sincronizzazione JTA.

Tuttavia:

  

Qualsiasi metodo osservatore chiamato prima del completamento di una transazione può chiamare setRollbackOnly () per forzare un rollback della transazione. Un metodo osservatore non può direttamente avviare, commit o rollback le transazioni JTA.

Se il metodo osservatore genera un'eccezione (ed è di per sé non "transazionale") le Aborts eccezione di elaborazione della manifestazione.

Quindi, per ottenere il comportamento che sto cercando, credo avrei registrare il mio osservatore come "transazionale", e specificare il BEFORE_COMPLETION TransactionPhase. Vorrei quindi chiamare setRollbackOnly () se volevo rollback della transazione che ha avviato l'evento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top