Эти изменения были внедрены в Wildfly 8 и были (как отмечено ниже) основаны на стандартизации глобального пространства имен JNDI в EJB 3.1.
Из Wildfly 8 Руководство разработчика :
EJB 3.1 представил стандартизированное глобальное пространство имен JNDI и ряд связанных пространств имен, которые отображаются в различные области приложения Java EE.Для переносимых поисков JNDI используются три пространства имен JNDI: java: global, java: module и java: app.Если вы используете поиски JNDI в своем приложении, вам нужно будет изменить их в соответствии с новым стандартизированным соглашением о пространстве имен JNDI.
Чтобы соответствовать новым правилам пространства переносимых имен JNDI, вам необходимо просмотреть правила пространства имен JNDI иизмените код приложения, следуя этим правилам.
Руководство также отмечает:
WildFly 8 ужесточил имена пространств имен JNDI, чтобы обеспечить предсказуемые и согласованные правила для каждого именипривязать к серверу приложений и предотвратить будущие проблемы совместимости.Это означает, что у вас могут возникнуть проблемы с текущими пространствами имен в вашем приложении, если они не следуют новым правилам.
Вот фрагмент из таблицы, показывающий Примеры отображений JNDI в предыдущих выпускахи как они могут выглядеть сейчас , специфичные для UserTransaction
:
Previous Namespace New Namespaces
------------------ --------------
java:comp/UserTransaction java:comp/UserTransaction (This will not be accessible for non EE threads, e.g. Threads your application directly creates)
java:comp/UserTransaction java:jboss/UserTransaction (Globally accessible, use this if java:comp/UserTransaction is not available)
Редактировать re: WFLYEJB0137:
Это теоретическое ремесло и может бытьничего не стоит - дайте мне знать, и я его удалю. Учебное пособие по Java EE 6 - Управляемые контейнером транзакции говорит:
Корпоративные компоненты, использующие разграничение управляемых контейнером транзакций, также не должны использовать интерфейс javax.transaction.UserTransaction.
Далее:
(Транзакция) Обязательно Атрибут
Если клиент работает в транзакции и вызывает метод корпоративного компонента,Метод выполняется в рамках транзакции клиента.Если клиент не связан с транзакцией, контейнер запускает новую транзакцию перед запуском метода.
Атрибут Required является неявным атрибутом транзакции для всех методов корпоративного компонента, работающих с разграничением транзакций, управляемым контейнером.. Обычно вы не устанавливаете атрибут Required, если вам не нужно переопределять другой атрибут транзакции.Поскольку атрибуты транзакции являются декларативными, вы можете легко изменить их позже.
Сообщение об исключении в значительной степени говорит само за себя:
WFLYEJB0137: Только сессионные и управляемые сообщениями компоненты сРазграничению управляемых компонентом транзакций разрешен доступ к UserTransaction
Ваш EJB использует разграничение управляемой контейнером транзакции (CMT), которое не взаимодействует с разграничением управляемой компонентом (BMT), в котором лежит UserTransaction
.
Относительно переключения на BMT и
WFLYJPA0060: для выполнения этой операции требуется транзакция (либо использовать транзакцию, либо расширенный контекст постоянства)
Iнайдено Для выполнения этой операции требуется транзакция (либо использовать транзакцию, либо расширенный контекст постоянства) , что, по-видимому, указывает на то, что вы управляете транзакцией, как вы отметили в своих комментариях @Marco.Похоже, что вы сделали соответствующую модификацию.