Почему я не должен включать защиту от JARLocking в рабочей среде?

Я запускаю веб-приложения на сервере Tomcat7 и не могу их развернуть. Кажется, что Windows блокирует определенный файл JAR в папке приложения. Я обнаружил, что есть атрибут контекста под названием «antiJARLocking», для которого я могу установить значение «true» (определено здесь: http://tomcat.apache.org/tomcat-6.0-doc/config/context.html#Standard_Implementation), которые могут решить проблему.

Дело в том, что я видел пару человек, заявляющих, что я НЕ должен устанавливать для этого атрибута значение true в производственной среде; но я не могу найти, каковы причины этого. Я знаю, что установка для этого атрибута значения true может замедлить запуск Tomcat и/или запуск приложения, но мне это не кажется большой проблемой..? Я ошибся?

Знаете ли вы какую-либо другую причину, объясняющую, почему некоторые могут препятствовать использованию «антиJARLocking» в производстве? Есть ли другое решение проблемы блокировки JAR?

Если это может помочь, я использую tomcat 7.0.40. Файл jar, который постоянно блокируется, называется «ojbdc6.jar».

Спасибо за помощь!


person MathieuB    schedule 18.03.2014    source источник
comment
stackoverflow.com/a/3811021/2591612   -  person Engineer2021    schedule 18.03.2014
comment
« [...] tomcat сделал копию веб-приложения во временной папке. Это замедляет развертывание, и почти с каждым повторным развертыванием размер временного каталога увеличивается, поэтому мне пришлось выполнить процедуру для удаления старых развертываний моего приложения из временного каталога. » Это полезная информация! Спасибо. Я также согласен с « [...] и с java всегда полезно перезапустить сервер после повторного развертывания в рабочей среде (OutOfMemoryError всегда скрывается в темноте, даже если ваш собственный код не протекает) »   -  person MathieuB    schedule 18.03.2014
comment
Эта опция antiJARLocking отсутствует в Tomcat 8. Вместо этого см. antiResourceLocking в Документация по Контейнеру контекста.   -  person Basil Bourque    schedule 22.05.2016


Ответы (2)


Функции защиты от блокировки ресурсов Tomcat предназначены для устранения ошибок в развернутых веб-приложениях, которые приводят к открытию файлов, но не к их закрытию. В некоторых операционных системах, в первую очередь в Windows, это предотвращает удаление файла, что, в свою очередь, предотвращает полное удаление веб-приложения. Обычно единственный способ удалить эти файлы — сначала остановить Tomcat. Блокировка ресурсов копирует веб-приложение в каталог с уникальным именем в рабочем каталоге и развертывает его оттуда. Каждое повторное развертывание получает новый каталог, поэтому невозможность удалить старый каталог не является непосредственной проблемой.

Нет конкретной причины, по которой функции защиты от блокировки ресурсов не следует использовать в рабочей среде. Однако вам нужно знать, что заблокированные файлы фактически являются утечкой памяти, и после нескольких повторных развертываний вы можете в конечном итоге заполнить permGen и вызвать OOME.

Быстрое и грязное решение блокировки odbc6.jar — переместить его из WEB-INF/lib в $CATALINA_HOME/lib. Лучшее решение — выяснить, почему он заблокирован (вам, вероятно, потребуется использовать комбинацию профилировщика и отладчика, чтобы найти основную причину) и исправить это.

person Mark Thomas    schedule 18.03.2014

Согласно этой вики,

Вы НЕ должны включать эту опцию в рабочей среде. Параметр antiResourceLocking может предотвратить повторное развертывание JSP при их редактировании (требуется повторное развертывание [sic] веб-приложения вместо [sic], а иногда и очистка рабочего каталога). По-видимому, существуют небольшие ограничения на невозможность получить определенные пути ресурсов к ресурсам веб-приложений для веб-приложений, которые запускаются из специальной «временной» области, но мы никогда не сталкивались с ними на практике.

person Engineer2021    schedule 18.03.2014
comment
В любом случае, я не думаю, что это хорошая идея изменять страницу JSP непосредственно в процессе производства; но тем не менее, это полезно знать. - person MathieuB; 18.03.2014