2016-09-07 6 views
0

От Weld documentation:Область событий CDI уволен во время операции

транзакционные наблюдатели получают уведомления о событиях во время до или после стадии завершения сделки, в которой произошло событие .

Означает ли это, что объем событий CDI, запущенных во время транзакции, ограничен этой транзакцией?

Я полагаю, что да, но я просто хочу быть уверенным, что мне не нужно делать какие-либо очистки после завершения транзакции.

ответ

1

Я думаю, вы слегка неправильно поняли концепцию.

Нет такой вещи, как «область событий». История транзакций выглядит следующим образом: у вас есть транзакционный метод, и в рамках этого метода вы запускаете событие. Где-то в вашем приложении у вас есть наблюдатели, у которых есть тип, необходимый для наблюдения за этим событием, и они также связаны с определенной фазой транзакции.

Это на практике означает, что такой наблюдатель будет уведомлен, когда сделка не достигнет заданного состояния - не раньше и не позже:

public void observeAfterCompletion(@Observes(during = AFTER_COMPLETION) Foo someEvent) { 
     // this will be notified once the transaction reached AFTER_CEMPLETION stage 
    } 

    public void observeBeforeCompletion(@Observes(during = BEFORE_COMPLETION) Foo event) { 
     // this will be notified once the transaction reaches BEFORE_COMPLETION stage 
    } 

Для получения дополнительной информации о том, когда же сделка достигает данного состояния, вам нужно проверить спецификацию JTA, а не CDI.

Невозможно выполнить очистку при завершении транзакции.

Нет, вы этого не сделаете. Вы не чистите что-либо после стандартного мероприятия, вам тоже не нужно это делать.