Использование бобов из других модулей? - PullRequest
2 голосов
/ 29 ноября 2009

Я думаю, что это просто - но я не могу найти правильную комбинацию поисковых терминов, чтобы получить ответ. Если у меня есть многомодульное приложение, как мне получить bean-компоненты в модуле A, доступные для bean-компонентов в модуле B.

Настройка проекта выглядит примерно так:

project.ear/module-a.jar/resources/beans.xml
project.ear/module-a.jar/java/foo/bar.class
project.ear/module-b.war/java/foo/barFactory.class

Файл beans.xml недоступен ни по пути классов, ни по файловой системе. Есть ли способ сделать это? Или я должен все делать по-другому?

Ответы [ 2 ]

3 голосов
/ 29 ноября 2009

Ваш appserver, вероятно, использует разные загрузчики классов для каждого модуля в EAR, что не позволяет одному модулю видеть ресурсы в другом. Это поведение по умолчанию загрузчиков классов JavaEE.

Вам либо нужно

  • перенастроить ваш сервер приложений для использования «унифицированного» загрузчика классов по всему EAR (который сильно зависит от сервера приложений, но отлично, если вы можете заставить его работать), или
  • упаковывает все в один модуль (например, ваша WAR может содержать все) или
  • объявляет формальный манифест для модуля WAR, позволяя ему объявлять свои зависимости от отдельных модулей JAR, что должно позволить WAR видеть ресурсы в модуле JAR.
1 голос
/ 31 декабря 2009

Я думаю, есть более простое решение, чем упомянутые выше 3 скаффмана.

  1. Вставьте в модуль -b.war / WEB-INF / web.xml эти строки:

    <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>

    classpath*:/resources/beans.xml

    </param-value>

    </context-param>

    Это позволяет загружать каждый файл /resources/beans.xml из любого фрагмента classpath (то есть любого jar-файла на classpath), которого вам достаточно.

  2. Вы должны загрузить module-a.jar как часть module-b.war (module-a.jar находится в каталоге module-b.war / WEB-INF / lib).

У меня очень похожая гранулярность в моем проекте: business-logic.jar с конфигурацией его bean-компонентов и frontend.war, который использует bean-компоненты, сконфигурированные в предыдущем с помощью ref = "someBean". Это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...