2010-11-19 28 views
11

¿Los eventos CDI de Java EE 6 son transaccionales?¿Los eventos CDI de Java EE 6 son transaccionales?

Si ejecuto un evento en una transacción y luego retrotrae la transacción, ¿los efectos del detector de eventos también se retrotraeron?

¿Este comportamiento depende del propio detector de eventos que admite transacciones?

¿Qué sucede si trato de retrotraer la excepción desde dentro del detector de eventos, revierte la transacción que activó el evento?

+0

código? (15chrs.) – Bozho

+0

Un ejemplo de código conciso de productores y oyentes de eventos de CDI está disponible en: http://www.adam-bien.com/roller/abien/entry/java_ee_6_observer_with –

Respuesta

15

Desde el events chapter de la especificación CDI 1.0, se puede definir un evento para ser "transaccional" especificando el TransactionPhase uno está observando, donde TransactionPhase es uno de:

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

Tal declaración parece:

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

Si el observador no se declara como "transaccional", entonces el contenedor llama al observador de inmediato, de lo contrario se registra el método de observador para la invocación más tarde, durante la realización de transacciones fase, utilizando una sincronización JTA.

Sin embargo:

Cualquier método observador llamado antes de la finalización de una transacción pueden llamar setRollbackOnly() para forzar una operación de deshacer la transacción. Un método de observación no puede iniciar, comprometer o revertir directamente las transacciones de JTA.

Si el método del observador arroja una excepción (y no es en sí "transaccional"), la excepción cancela el procesamiento del evento.

Por lo tanto, para lograr el comportamiento que estoy buscando, creo que registraría mi observador como "transaccional", y especifico BEFORE_COMPLETION TransactionPhase. Luego, llamaría a setRollbackOnly() si quería deshacer la transacción que inició el evento.

Cuestiones relacionadas