Транзакция присутствует на сервере в Никогда не вызывать в wildfly12 с JTA = "false"? - PullRequest
0 голосов
/ 24 сентября 2018

Мы используем wildfly12 и используем источник данных с jta = false в нашем ejb, у нас есть атрибут транзакции NEVER, но выдается исключение во время вызова другого класса ejb с атрибутом транзакции NEVER, исключение, как показано ниже:

Transaction present on server in Never call

согласно приведенной ниже ссылке
Транзакция присутствует на сервере в Никогда не вызывать
мы знаем, что мы не можем вызвать метод из ejb с атрибутом транзакции NEVER, но мы установили jta=false, я ожидал, что менеджер транзакций не работает.

1 Ответ

0 голосов
/ 25 сентября 2018

К сожалению, 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, вам действительно нужно убедиться, что созданный метод действительно запускает / возобновляет транзакцию и не распространяет контекст транзакции.

...