Не использовать интерфейс UserTransaction в объектах CMT

Согласно спецификации Java EE, EJB управляемых контейнером транзакций (CMT) не могут обращаться к объекту UserTransaction. Однако WebLogic поддерживает поиск UserTransaction.

Данное правило отмечает фрагменты кода следующего типа:

WebLogic UserTransaction Lookup
< span class="Code"> < span class= "JavaType">UserTransaction< /span> xact = ctx.lookup("javax.transaction.UserTransaction");

или

< span class="Code"> < span class= "JavaType">UserTransaction< /span> xact = ctx.lookup("weblogic.transaction.UserTransaction");

В EJB с отмеченным кодом нельзя обращаться к UserTransaction. Решение зависит от того, какая операция с UserTransaction выполняется в коде. Изучите, для чего используется UserTransaction, и измените код соответствующим образом или удалите ссылку.

Вместо UserTransaction можно использовать UOWManager. При обращении к этому объекту также используется операция поиска JNDI, например:

Поиск UOWManager

< span class="Code"> < span class= "JavaType"> UOWManager < /span> uowMgr = ctx.lookup(" java:comp/websphere/UOWManager ");

Другой альтернативой может стать использование интерфейса SessionSynchronization, открывающего доступ к методам afterBegin, beforeCompletion и afterCompletion. Метод beforeCompletion позволяет вернуться к предыдущей версии транзакции в случае ошибки.