Liberty не поддерживает распространение исходящих или входящих транзакций для удаленных интерфейсов EJB.
По умолчанию сущностные объекты EJB управляются контейнером и используют
атрибут транзакции Required. Это значит, что имеющиеся определения
EJB, в которых не заданы никакие свойства container-transaction,
по умолчанию настраиваются для использования транзакций, хотя они не
поддерживаются.
Это правило помечает код Java, использующий следующие аннотации EJB для применения удаленных бизнес-интерфейсов или домашних интерфейсов:
javax.ejb.Remotejavax.ejb.RemoteHomeЭто правило также отмечает следующие ссылки в файле ejb-jar.xml:
<remote/><business-remote/>
Для спецификации EJB требуются продукты с поддержкой распространения исходящих транзакций для продолжения отправки контекста пустых транзакций.
Этот контекст может быть отклонен компонентами EJB, использующими атрибуты транзакции Required
(значение по умолчанию),
Mandatory или Supports. Клиент с активной глобальной транзакцией на может запустить сущностный объект EJB с атрибутами транзакции по умолчанию, если какой-либо клиент или сервер запущен в Liberty.
Чтобы клиент мог запустить сущностный объект EJB, этот объект EJB необходимо изменить для использования атрибутов транзакции RequiresNew или NotSupported.
Хотя объект EJB с такими атрибутами может быть запущен, выполняемая им работа в транзакциях не будет фиксироваться в составе транзакций клиента.
Обратите внимание, что распространение транзакций поддерживается для удаленных интерфейсов EJB, выполняющихся в той же JVM, однако для этого требуется дополнительно исследовать алгоритм работы приложения.
Для объектов EJB 2.x удаленные интерфейсы часто не нужны, но настраиваются в ejb-jar.xml.
Удаленные интерфейсы нужны только в том случае, если ваш код выполняется в двух разных JVM.
В случае WebSphere это значит, что код должен выполняться на двух разных
серверах приложений или в приложении-клиенте и на сервере приложений, которые
используют разные JVM. Признаком использования удаленных объектов EJB может
служить информация CORBA, например URL провайдера iiop://, в поиске EJB.
Обращение к объекту EJB, выполняющемуся в той же JVM, через удаленный
интерфейс можно заменить на более эффективный локальный интерфейс. Всегда,
когда это возможно, изменяйте аннотацию @Remote на @Local или @RemoteHome на
@LocalHome и тестируйте все сценарии использования кода. По аналогии с
конфигурацией ejb-jar.xml удалите определения <remote/> и
<business-remote/> и протестируйте все сценарии
использования. Хотя распространение транзакций поддерживается в этом случае,
для большей эффективности рекомендуется перейти к использованию локальных
интерфейсов.
Те объекты EJB, которые должны поддерживать удаленный доступ, лучше всего заключить в оболочку в виде веб-службы. См. инструкции по внесению соответствующих изменений в код с помощью WebSphere Application Server Developer Tools for Eclipse в документе Добавление аннотаций к объекту EJB для создания веб-службы. После добавления оболочки в виде веб-службы к объектам EJB используйте клиент веб-служб для вызова веб-службы EJB. После тестирования удалите аннотации Remote и соответствующую конфигурацию EJB.
За дополнительной информацией обратитесь к следующим разделам: