общий ejb 3 для нескольких веб-проектов со glassfish - PullRequest
3 голосов
/ 29 октября 2010

В настоящее время у меня есть проект J2EE, содержащий EJB и WAR. Все идет хорошо, пока у меня есть только один WAR и один модуль EJB, связанный в окончательном EAR. Теперь мне нужно разработать другую WAR, используя тот же модуль EJB.

Итак, я добавил модуль EJB в библиотеку новой WAR. Проблема в том, что когда я пытаюсь развернуть EAR, связанный с двумя WAR и общим EJB, я получаю следующее исключение:

Caused by: java.lang.RuntimeException: Error while binding JNDI name com.alex.ejb.MyBeanRemote__3_x_Internal_RemoteBusinessHome__ for EJB : MyBean

Когда я удаляю EJB из библиотеки второй WAR, все снова работает.

Я что-то пропустил?

Наконец, реальный вопрос - как разделить EJB в нескольких веб-приложениях?

Спасибо за помощь

Ответы [ 2 ]

4 голосов
/ 31 октября 2010

Проблема в том, что когда я пытаюсь развернуть EAR, связанный с двумя WAR и общим EJB, я получаю следующее исключение (...)

Это потому, что бины получаютразвернут дважды, вызывая конфликт имен.На самом деле, это не то, как вы должны упаковать свое приложение при использовании упаковки EAR.

Наконец, реальный вопрос заключается в том, «как совместно использовать EJB в нескольких веб-приложениях?»

Не помещайте ваши модули EJB в папку WEB-INF/lib ваших веб-модулей, ваш EAR должен иметь следующую структуру:

myear.ear
|-- META-INF
|   |-- application.xml
|   `-- sun-application.xml (optional)
|-- myejbmodule1-ejb.jar
|-- ...
|-- myejbmoduleN-ejb.jar
|-- mywebapp1-war.war
`-- mywebapp2-war.war

Ресурсы

0 голосов
/ 29 октября 2010

Вам не нужно включать EJB в новую WAR, вы можете просто найти его, используя JNDI или внедрив его. С точки зрения компиляции против него, вы можете создать JAR, который просто содержит интерфейс (ы), который вам нужно использовать, и это к classpath вашего нового проекта.

...