проблема с инъекцией EJB, который находится в банке - PullRequest
0 голосов
/ 28 июня 2011

У меня есть некоторые проблемы, связанные с инъекцией EJB, и я нигде не смог найти решение.
Моя ситуация следующая: у меня есть файл EAR, который включает WAR и несколько JAR-файлов, все они перечислены вфайл application.xml.Все отлично работает для этой части.Проблемы возникают, когда я пытаюсь добавить то, что мы можем назвать «системой плагинов».У меня есть JAR с некоторыми страницами .xhtml, бобами и EJB-компонентами.Этот JAR-файл, если необходимо, вставляется в EAR в определенном каталоге (назовем его «плагинами») и обнаруживается в приложении при запуске.
Когда JAR-файл обнаруживается, его путь добавляется в загрузчик класса WAR, поэтомувсе страницы и бэк-бин обнаруживаются без проблем.Что не работает, так это внедрение EJB (я пытался использовать нотацию @EJB, @Inject, поиск ...).Я не могу внедрить ни один из EJB-компонентов, которые находятся внутри плагина JAR.
Я предполагаю, что сервер приложений рассматривает JAR как простой библиотечный модуль и не ищет в нем никакого EJB-компонента, поэтому они находятся внутриJAR, но нельзя использовать из приложения.

Мой вопрос: есть ли способ заставить это работать?Я попытался добавить JAR в файл EAR MANIFEST.MF, но ничего не изменилось ...


сервер приложений, который я использую, - glassfish 3.0.О application.xml: в нем нет ссылок на файлы JAR, которые являются частью того, что я назвал «системой плагинов».Это потому, что я обнаруживаю их при развертывании (или перезапуске) приложения на сервере приложений, поэтому они могут находиться или не находиться внутри системы, и я действительно не знаю этого до запуска системы.Каждый JAR плагина представляет собой «набор» страниц и функциональных возможностей, которые можно динамически добавлять или удалять из системы (более реальная система плагинов).Моя структура EAR выглядит следующим образом:

MyApp.EAR

  • META-INF
  • lib
  • plugins
    • plugin1.JAR
  • app.WAR
  • logic1.JAR
  • logic2.JAR

например: в приложении.xml У меня есть ссылки на app.WAR, logic1.JAR и logic2.JAR (они всегда находятся внутри системы), при запуске приложение ищет в папке «плагины» любые плагины (определенные JAR), которые будут добавлены в систему..

Надеюсь, мне стало понятнее, что я пытаюсь сделать ...

1 Ответ

1 голос
/ 28 июня 2011

Кажется, что EJB даже не зарегистрированы в дереве JNDI сервера. Какой сервер приложений вы используете? Вы можете взглянуть на это дерево JNDI, чтобы увидеть, есть ли EJB, но способ сделать это зависит от конкретного сервера.

Как вы объявляете JAR, который содержит EJB в файле EAR application.xml?

Это должно быть что-то вроде:

<application>
  ....
  <module>
    <ejb>nameOfTheJarFile.jar</ejb>
  </module>
</application>

Jar должен находиться в каталоге "/ lib" EAR.

Надеюсь, это поможет.

...