Есть ли причины размещать зависимость в каталоге lib веб-сервера, а не включать его в файл War? - PullRequest
2 голосов
/ 17 сентября 2009

Если у меня есть Jar зависимостей для моего приложения, лучше ли поместить его в каталог lib файлов war или в глобальный каталог приложений сервера (например, Tomcat)? Что я получу, используя один подход над другим?

Пространство дисков приходит на ум, но мы живем во времена, когда дисковое пространство дешевое. Есть ли разница в использовании памяти? Может ли кто-то с большим опытом, чем я, перечислить плюсы и минусы обоих вариантов?

Ответы [ 3 ]

3 голосов
/ 17 сентября 2009

Вообще говоря, гораздо лучше иметь автономную WAR, чтобы вам не приходилось полагаться на конфигурацию контейнера. Это также значительно упрощает развертывание. Поэтому постарайтесь поместить библиотеку в WAR, если можете.

Однако я сталкивался со случаями, когда установка библиотек в контейнер имеет смысл. Например,

  1. У нас есть несколько внутренних библиотек, используемых каждым веб-приложением, и они огромны. Мы устанавливаем их в контейнер, чтобы все веб-приложения использовали одну и ту же версию и экономили память и дисковое пространство.

  2. Библиотеки, установленные в WEB-INF / lib, недоступны для контейнера. Если вам нужно сослаться на них в context.xml (как драйвер JDBC, определенный в Ресурсах), вы должны поместить их в server / lib.

  3. Если вы хотите отправить журналы log4j из всех веб-приложений в один и тот же файл, вы должны поместить log4j jar на сервер / lib. В противном случае каждое веб-приложение использует свой собственный регистратор.

1 голос
/ 17 сентября 2009

Для более подробного описания иерархии загрузчиков классов, реализованной Catalina, вы должны проверить Загрузчики классов Tomcat, КАК . Это поможет вам понять, когда сделать банки доступными для контейнера, для всех веб-приложений, только для одного веб-приложения ... и где их разместить.

1 голос
/ 17 сентября 2009

Если вы хотите использовать возможности управления ресурсами контейнера - например, подключение к базе данных SQL и предоставление для нее JNDI-поиска и пула соединений - тогда самому программному обеспечению контейнера потребуется доступ к библиотекам и драйверам для управления ресурсами.

В противном случае вы, вероятно, не захотите устанавливать их в каталог server / lib и предполагать, что они есть и будут работать, поскольку разные веб-приложения могут иметь несколько разные требования к версии.

...