Где разместить общую библиотеку в JBoss AS 5? - PullRequest
13 голосов
/ 21 января 2010

Я новичок в Jboss, но у меня есть несколько веб-приложений, каждое из которых использует spring-hibernate и другие библиотеки и портлеты с открытым исходным кодом, поэтому в настоящее время каждый военный файл включает эти jar-файлы. Как мне переместить эти банки в обычное место, чтобы мне не нужно было помещать их в каждый файл войны? Я предполагаю, что местоположение server/default/lib, но я не уверен.

Кроме того, чем отличаются эти банки на WEB-INF/lib против JBOSS/server/default/lib? Буду ли я сталкиваться с какой-либо проблемой загрузчика классов?

Также у меня есть статические данные, которые хранятся в статических полях, таких как Singleton, будут ли они общими для всех файлов WAR?

Ответы [ 4 ]

19 голосов
/ 21 января 2010

загрузки классов:

Вы правы, поставьте .jar s на JBOSS/server/<configuration>/lib или JBOSS/lib.

JBoss AS поставляется в комплекте с библиотеками Hibernate, протестированными с этой версией AS.

См. jboss-6.0.0-SNAPSHOT\server\default\conf\jboss-service.xml:

<server>
  <!-- Load all jars from the JBOSS_HOME/server/<config>/lib directory and
       the shared JBOSS_HOME/common/lib directory. This can be restricted to
       specific jars by specifying them in the archives attribute.
       TODO: Move this configuration elsewhere
  -->
  <classpath codebase="${jboss.server.lib.url}" archives="*"/>
  <classpath codebase="${jboss.common.lib.url}" archives="*"/>
</server>

Также см .:

Разница между WEB-INF/lib и JBOSS/server/default/lib:

Libs в WEB/lib поставляются с вашей WAR и видны только внутри этой WAR. Если у вас есть другой модуль, например EJB JAR, они не будут видны из него, и вы получите ClassNotFoundException или (если у вас есть класс в нескольких местах) ClassCastException.

Lib в JBOSS-AS/server/<config>/lib видны для всего сервера, таким образом, все развернутые приложения и их модули. Однако (IIRC) они не имеют приоритета, поэтому, если вы принесете эту библиотеку, например, в WAR, но не в EJB jar, вы можете использовать две разные версии, что нежелательно (может привести к вышеупомянутому ClassCastException).

Поведение загрузки классов может быть изменено несколькими способами, например, см. JBoss wiki .

Статические данные:

Не полагайтесь на статические поля в Java EE, это вызывает проблемы. Например,. один и тот же класс может быть загружен разными загрузчиками классов, поэтому будет несколько экземпляров этих статических значений.
Если вы хотите обмениваться данными между несколькими WAR-файлами, используйте внешнее хранилище - базу данных, файл (с синхронизацией, если вы пишете в него), JBoss Cache и т. Д.

2 голосов
/ 27 мая 2010
0 голосов
/ 26 декабря 2016
  1. Перейдите в каталог% JBOSS_HOME% \ server \ default \ conf
  2. Открыть файл jboss-service.xml
  3. Под тегом вы найдете

Добавьте новый тег classpath, как показано ниже, чтобы включить папку sharedlib на локальном компьютере

Примечание: пожалуйста, не забудьте включить протокол файла в базу кода

0 голосов
/ 21 января 2010

JBOSS / server / default / lib работает нормально.

Все банки в этой папке будут загружены в JBoss.

...