К сожалению, jta=false
, установленный в источнике данных, не означает, что транзакция не запущена.Это означает, что источник данных не будет частью транзакции.Если не указано иначе, компонент CTM EJB начинает транзакцию в любом случае.Таким образом, транзакция запускается, а затем контекст транзакции распространяется на любой метод EJB, который вызывает компонент.Примечание: транзакция может быть приостановлена на время обработки метода (https://docs.oracle.com/cd/E19226-01/820-7627/bncik/index.html), но возобновлена на момент завершения метода.
Вернуться к случаю jta=false
. Если установить jta=false
при входе в метод CMJ EJB запускает глобальную транзакцию. Когда вы используете такой источник данных в методе, источник данных не зачисляется в глобальную транзакцию. Это означает, что все изменения данных фиксируются немедленно.
Если вы установитеjta=true
затем источник данных зачисляется в транзакцию, и фиксация изменений данных запускается в тот момент, когда менеджер транзакций говорит (что обычно происходит в конце метода EJB).
Если вы хотите вызватьметод, помеченный TransactionAttributeType.NEVER
, вам действительно нужно убедиться, что созданный метод действительно запускает / возобновляет транзакцию и не распространяет контекст транзакции.