JBoss 6 распаковывает баночки из WEB-INF / lib of war

когда я запускаю JBoss 6, я вижу, что он распаковывает все файлы jar из WEB-INF / lib в папку tmp / vfs / automountXXX. Например. jackrabbit-server.war содержит библиотеку asm-3.1.jar, то в папке tmp я вижу следующие папки с файлами:

asm-3.1.jar-83dc35ead0d41d41/asm-3.1.jar
asm-3.1.jar-2a48f1c13ec7f25d/contents/"unpacked asm-3.1.jar"

он не берет файлы из my.ear / lib, только WEB-INF / lib ... Почему так? И есть ли способ предотвратить это? Это просто замедляет запуск (и остановку) сервера приложений, что не очень удобно при разработке ... кстати. переупаковка структуры войны в ухо таким образом, дала мне то же самое рабочее приложение и сэкономила 1 минуту, пока запускается сервер приложений ... 1 минута достаточно ... Надеюсь, есть более простой способ, без переупаковки в режиме разработки.

Если это как-то связано со спецификацией JavaEE 6 и ejb-jars, которые теперь можно разместить в WEB-INF / lib, значит, в моих военных файлах таких библиотек нет ...

ОБНОВЛЕНИЕ: на самом деле, когда я перепаковываю jackrabbit-server.war в jackrabbit-server.ear, который содержит jackrabbit-server.war, и перемещаю все его библиотеки в jackrabbit-server.ear / lib, я все еще вижу две папки в tmp:

asm-3.1.jar-215a36131ebb088e/asm-3.1.jar
asm-3.1.jar-14695f157664f00/contents/

но в этом случае последняя папка пуста. Таким образом, он по-прежнему создает две папки, но не распаковывает мою библиотеку. Также я использую разнесенное развертывание, поэтому вопрос касается только файлов jar, а не распаковки ear / war.


person Maxym    schedule 05.01.2011    source источник


Ответы (2)


Он также будет распаковывать EAR, только не в том же месте. Вам придется поискать, где их распаковывают, но они там есть.

Это делается из соображений производительности. В противном случае загрузка классов была бы чрезвычайно медленной, так как пришлось бы рекурсивно просматривать вложенные ZIP-файлы в поисках того, что ему нужно.

Таким образом, вы можете почувствовать, что распаковка замедляет вас, но на самом деле она ускоряет работу.

person skaffman    schedule 05.01.2011
comment
Ну вижу смысл распаковывать, а вот про режим разработки спрашиваю. Это не производство, поэтому мне нужен сервер для быстрого запуска, и в этом случае я не чувствую медленной загрузки классов. Было бы неплохо получить опцию в конфигурации сервера :) Для продакшена - ›Полностью согласен с вами, но для меня странно другое: почему распаковываются только библиотеки из WEB-INF / lib, почему сервер игнорирует папку ear / lib тогда ( только что расширил свой вопрос этой информацией)? - person Maxym; 05.01.2011
comment
@Maxym: медленная загрузка классов ощущается только во время запуска, поэтому она влияет на dev больше, чем на производство. Как только классы загружены, замедление прекращается. - person skaffman; 05.01.2011

Согласно обсуждению на форуме JBoss AS, это может быть ошибкой. И нет никакого обходного пути, чтобы исправить / избежать / настроить это сейчас.

Единственная идея, которая у меня возникла, заключалась в том, чтобы переупаковать свои приложения: внутри EAR я переместил библиотеки из WEB-INF \ lib из WAR в EAR \ lib (в WAR остались только struts, иначе это не сработает), и еще одно приложение WAR, которое я сделал как EAR и все его библиотеки я мог переместить в EAR \ lib. В режиме разработки я могу легко использовать эту структуру, и это экономит мне 2+ минуты на загрузку сервера приложений, а это много ... Теперь JBoss запускается за 1:50 минут по сравнению с 4 минутами раньше ...

person Maxym    schedule 08.01.2011