Приложение EJB 3.1, развернутое только для WAR: как насчет ejb-jar.xml? - PullRequest
8 голосов
/ 26 июля 2010

У меня есть приложение JavaEE6, состоящее из Web-компонентов и EJB-компонентов, которое развернуто только для WAR (с использованием EJB3.1). Сборка основана на Maven. Я только что прочитал о новой возможности заказать инициализацию модуля в Java EE 6 здесь , которая мне также нужна для моего приложения. Кроме того, я хотел бы иметь возможность определить некоторые свойства EJB в XML.

Поскольку пример развернут как EAR-проект, порядок определяется в application.xml. Но в WAR-развернутом проекте нет application.xml. Теперь мне интересно, где я могу определить такую ​​информацию? Или можно как-то использовать application.xml в WAR-deployed-app?

EDIT:

Ой, я не правильно прочитал пример module-order-example, в первый момент я подумал о том, в каком порядке загружаются EJB-компоненты в моем приложении. Конечно, у меня есть только один модуль в моем WAR-приложении, поэтому заказывать не имеет смысла.

Хорошо, но, как я понимаю, остается один большой вопрос (также изменил название вопроса, чтобы отразить изменение): Как насчет ejb-jar.xml? Могу ли я как-нибудь определить материал о моих EJB-компонентах в XML (как это полезно для некоторых настроек, чтобы избежать перекомпиляции)?

Ответы [ 2 ]

9 голосов
/ 26 июля 2010

Короче говоря, это невозможно при развертывании на основе WAR.

Функция инициализации модулей в Java EE 6 предназначена для инициализации различных модулей приложения в определенном порядке.В тот момент, когда у вас есть приложение EJB на основе WAR, у вас больше нет отдельных модулей для вашего EJB и веб-приложения.В развертывании на основе WAR существует только один модуль - модуль веб-приложения .

Поэтому, если вам необходимо реализовать ту же функцию, что и порядок инициализации модуля, предлагаемый в Java EE 6,вам придется выполнить одно из следующих действий:

  • Разделить EJB-компонент на отдельный модуль и использовать развертывание на основе EAR.
  • Это более или менее хитроумно, как былосделано в Java EE 5, и вы хотели бы избежать этого.Возможно, вы захотите закодировать в логике, чтобы убедиться, что одиночные EJB-компоненты были созданы (при условии, что это связано с использованием синглетонов в вашем приложении), прежде чем они будут использованы в коде.1015 * Расположение файла ejb-jar.xml в файле WAR

    В спецификации EJB 3.1 (в главе «Упаковка») рассматривается вопрос о местонахождении ejb-Файл jar.xml при развертывании в WAR:

    В файле .war дескриптор развертывания хранится с именем WEB-INF / ejb-jar.xml.

    PS: я еще не пробовал этот стиль развертывания.YMMV.

5 голосов
/ 02 августа 2010

Дополнительное примечание по EJB в обработке .wars и ejb-jar.xml.Как уже отмечалось, расположение: WEB-INF / ejb-jar.xml, но также обратите внимание, что проверяется местоположение only , даже если в WEB-INF / lib / - есть jar-файлы ejbs через стандартные правилаФайлы META-INF / ejb-jar.xml там игнорируются.

Экспертная группа была довольно разделена на эту, поэтому, если у вас есть предпочтения, еще не поздно отправить отзыв в список экспертной группы EJB 3.1для рассмотрения в EJB.next.

Мой голос состоял в том, чтобы разрешить отдельным jar-файлам иметь файлы META-INF / ejb-jar.xml так же, как эти jar-файлы теперь могут иметь persistence.xmls, beans.xmls, веб-фрагментыи т.д. Большая проблема для меня заключалась в том, что он противоречит API Embedded EJB Container, который поддерживает путь класса EAR, который допускает несколько jar / модулей, каждый из которых, возможно, содержит файл META-INF / ejb-jar.xml.В результате, если вы используете встроенный API для тестирования мульти-jar-приложения ejb, которое состоит из одного .war-файла, вы сталкиваетесь с задачей объединения любых данных ejb-jar.xml, которые у вас есть, в один ejb-jar.xml для веб-приложения.Вроде боль для пользователей.

...