Согласно спецификации Java EE, EJB управляемых контейнером транзакций (CMT) не могут обращаться к объекту UserTransaction. Однако WebLogic поддерживает поиск UserTransaction.
Данное правило отмечает фрагменты кода следующего типа:
WebLogic UserTransaction Lookup|
UserTransaction xact = ctx.lookup("javax.transaction.UserTransaction"); или
UserTransaction xact = ctx.lookup("weblogic.transaction.UserTransaction"); |
В EJB с отмеченным кодом нельзя обращаться к UserTransaction. Решение зависит от того, какая операция с UserTransaction выполняется в коде. Изучите, для чего используется UserTransaction, и измените код соответствующим образом или удалите ссылку.
Вместо UserTransaction можно использовать UOWManager. При обращении к этому объекту также используется операция поиска JNDI, например:
Поиск UOWManager|
UOWManager uowMgr = ctx.lookup("java:comp/websphere/UOWManager"); |
Другой альтернативой может стать использование интерфейса SessionSynchronization, открывающего доступ к методам afterBegin, beforeCompletion и afterCompletion. Метод beforeCompletion позволяет вернуться к предыдущей версии транзакции в случае ошибки.