«общие зависимости между веб-приложениями» - одна из причин, по которой существует JNDI.
- «уменьшить размер военного пакета» - ложная причина (Jetty была протестирована до 4 ГБ военных файлов, с около 5000 jars в WEB-INF / lib с объединением более 2 000 000 миллионов записей)
Вариант 1. Правильное использование файлов WAR, устранение общих зависимостей.
Если вы пропустить общие общие зависимости, которые вы ...
- Улучшить время запуска сервера.
- Улучшить время развертывания веб-приложения.
- Разрешить горячее развертывание для работы (вы не включаете блокировку / закрепление загрузчиков классов)
- Уменьшено использование памяти (при использовании традиционных файлов war без общих ресурсов используются дескрипторы файлов LESS)
- Файловая система I / O уменьшается (файл блокируется / contention / et c для ресурсов общего JAR, доступ к которым осуществляется из нескольких загрузчиков классов)
Вариант 2. Правильное использование JNDI.
Если вы все еще н Используйте общие ресурсы (заметьте, я сказал «ресурсы», а не зависимости, не загрузчики классов и т. д. c), затем рассмотрите возможность настройки ресурсов через API и совместного использования этого ресурса с JNDI.
Вы должны связать ресурс в расположение JNDI по вашему выбору на уровне сервера, предоставляя только API в качестве метода использования.
Поместите jar-файлы API (не jar-файлы реализации) в ваши war-файлы WEB-INF/lib
каждого веб-приложения.
Запустите веб-приложение, получите доступ к общему ресурсу через поиск JNDI, используйте этот ресурс через API.
Это разделит ресурс и то, как различные загрузчики классов работают правильно.
Загрузчик классов сервера отвечает за общий ресурс.
Каждый загрузчик классов веб-приложения отвечает за свой собственный jar API, обращаясь к общему ресурсу через слой JNDI.
Опция 3: удаление вся изоляция загрузчика классов WebApp и инвертирование поведения.
Этот параметр вряд ли будет хорошим выбором Если вы хотите описать проблему, просто включите ее здесь для полноты.
В вашем WebAppContext
вы можете щелкнуть кнопкой мыши на том, как поведение поиска загрузчика классов работает полностью. От пути сервлета c к пути Java спецификатора c.
Используйте WebAppContext.setParentLoaderPriority(true)
, чтобы использовать поведение Java.
Это означает, что когда вашему веб-приложению нужен класс, он сначала проверяет родительский загрузчик классов (сервер), а затем веб-приложение для загрузки класса.