EJBs 2.0 на OpenEJB - куда мне положить нужные банки? - PullRequest
3 голосов
/ 14 октября 2010

Мы использовали WAS 6.1 для развертывания наших веб-приложений. Теперь нам нужно перейти на экономичное решение Tomcat + OpenEJB. Контейнер OpenEJB 3.1.2 подключен к Tomcat 6.18, здесь нет отдельного сервера OpenEJB.

Итак, я пытаюсь развернуть мои объекты EJB 2.1 в OpenEJB ...

Моя проблема в том, что для кода EJB требуются внешние библиотеки .jar, и я не знаю, где их разместить, чтобы они фактически учитывались в пути к классам контейнера. Он отлично работает в catalina.home / lib, поэтому он работает и в openejb.home / lib. Но все же я предпочел бы найти способ упаковать EJB-компоненты, чтобы их можно было легко развернуть с помощью привязанного .jar, вставленного прямо на место для использования контейнером OpenEJB.

Это может включать создание .ear или .jar с правильными файлами дескрипторов ... Любое решение, которое работает, мне достаточно.

Может ли кто-нибудь помочь?

Ответы [ 2 ]

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

Подход к уху

Вы можете просто вставить его в каталог веб-приложений / каталогов Tomcat, и он будет поднят.

Пример уха (действительный):

myapplication.ear
  lib/
  lib/libraryOne.jar
  lib/libraryTwo.jar
  redEjbs.jar
  blueEjbs.jar

Распространенная ошибка (недействительно):

myapplication.ear
  libraryOne.jar  (err. not a javaee module)
  libraryTwo.jar  (err. not a javaee module)
  redEjbs.jar
  blueEjbs.jar

В корне разрешены только модули Java EE.Это файлы EJB, файлы .war, файлы Connector .rar и файлы приложения-клиента.До Java EE 5 библиотеки должны были быть явно перечислены в файле application.xml.Java EE 5 и вперед, их можно добавить в каталог lib / и понимать, что они являются просто обычными jar-файлами, а не модулем Java EE.

Свернутый подход EAR

В OpenEJB / Tomcat вы можете поместить все свои библиотеки в файл war и избавиться от концепции ушей.Теперь это часть Java EE 6.

mywebapp.war
  WEB-INF/lib/libraryOne.jar
  WEB-INF/lib/libraryTwo.jar
  WEB-INF/lib/redEjbs.jar
  WEB-INF/lib/blueEjbs.jar

Распространенная ошибка, включая спецификации:

mywebapp.war
  WEB-INF/lib/javax.ejb.jar   (err. clashes with the related system library)
  WEB-INF/lib/libraryOne.jar
  WEB-INF/lib/libraryTwo.jar
  WEB-INF/lib/redEjbs.jar
  WEB-INF/lib/blueEjbs.jar

Не похоже, что это проблема, но добавление для полноты.

Распространенная ошибка, нарушенные зависимости:

tomcat/lib/libraryTwo.jar

mywebapp.war
  WEB-INF/lib/libraryOne.jar
  WEB-INF/lib/redEjbs.jar
  WEB-INF/lib/blueEjbs.jar

Вышеуказанное недопустимо с точки зрения спецификации и невозможно для сервера, но может привести к некорректной загрузке приложений.Если для libraryTwo.jar нужны классы в libraryOne.jar, это приложение никогда не будет работать, так как загрузчик классов Tomcat "lib" не может видеть классы из загрузчика классов "webapp", поэтому классы из libraryTwo.jar никогда не будут успешно загружены.К сожалению, виртуальная машина почти никогда не скажет фактический пропавший класс и вместо этого сообщит о первом классе в цепочке событий, которые приводят к необходимости пропущенного класса.Это почти всегда класс бобов или сервлетов.

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

Спасибо, Дэвид.Я перепробовал все вышеперечисленное, но все равно не повезло.Я полагаю, что подход Collapsed EAR не будет работать для меня, поскольку, насколько я знаю, Tomcat 6.0.18 не соответствует спецификациям J2EE 6.Может быть, я ошибаюсь, но я пытался, и это все равно не сработало.Итак, вернемся к стандартному подходу EAR.

Мой EAR организован точно так, как описано в вашем самом первом примере.Один Ejb jar, два jar библиотеки в / lib, и все.Tomcat все еще не может создать экземпляр моего EJB, поскольку класс EJB относится к недостижимому классу из библиотеки Jar Two.

Я упростил свой файл application.xml, чтобы он объявлял только один отдельный EJB:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ...>
<application>
  <display-name>ProxyaEAR</display-name>
  <module id="EjbModule">
     <ejb>ProxyaEJB.jar</ejb>
  </module>
</application>

Любые другие мысли ??

...