Как и в MDB, транзакция запускается контейнером непосредственно перед тем, как ваш метод @Asynchronous
, @Schedule
или @Timeout
(и соответствующие перехватчики) фактически вызывается и фиксируется сразу после завершения метода (и перехватчиков).
Как обычно, транзакция распространяется на все bean-компоненты, вызываемые в указанном методе, и на все bean-компоненты, вызываемые этими bean-компонентами, рекурсивно. Конечно, другие вызванные bean-компоненты могут изменить семантику транзакции своего вызова метода, указав другие параметры @TransactionAttribute
(скажем REQUIRES_NEW
или NOT_SUPPORTED
).
Примечание: транзакции никогда не передаются в bean-компоненты с @TransactionManagement(BEAN)
. Контейнер будет всегда приостанавливать любую незавершенную транзакцию, прежде чем вызывать метод для bean-управляемой транзакции.