Tomcat обновляет context.xml, но не должен - PullRequest
5 голосов
/ 06 марта 2012

Документация Tomcat (http://tomcat.apache.org/tomcat-6.0-doc/config/context.html)

Только в том случае, если для приложения отсутствует файл контекста в каталоге $ CATALINA_BASE / conf / [enginename] / [имя хоста] /, в отдельном файле в / META-INF / context.xml внутри файлов приложения. Если веб-приложение упаковано как WAR, то /META-INF/context.xml будет скопировано в $ CATALINA_BASE / conf / [enginename] / [hostname] / и переименовано в соответствии сПуть к контексту приложения. Как только этот файл существует, он не будет заменен, если новая WAR с новым /META-INF/context.xml будет помещена в appBase хоста.

Текст, выделенный жирным шрифтом, ясен. Но я уведомляю, что это не так (мне нужно именно это поведение)

Вот шаги:

  1. aaa.war с context.xml, включенным в META-INF
  2. копировать в веб-приложения. Tomcat развертывает. Файл conf\Catalina\localhost\aaa.xml ОК
  3. изменить aaa.war, изменив META-INF / context.xml
  4. копировать в веб-приложения
  5. Файл conf\Catalina\localhost\aaa.xml изменен !!!

Что не так? Это ошибка или hidden функция?

Справочная информация - проблема, которую я хочу решить:

Конфигурация, независимая сборка и установка.Я сажаю военный файл.Клиент настраивает свой Tomcat, используя свои собственные настройки.когда я отправляю новую версию, я просто поставляю войну без конфигурации, и при развертывании она будет использовать специфическую для клиента конфигурацию.

По документации лучшее место - context.xml. Но если он перезаписывается каждый раз, нет смыслаиспользовать на всех.(Зачем мне использовать JNDI и тому подобное, если нужно создать новый результат? Изменение чего-либо во время сборки не является большим преимуществом конфигурации.)

Среда: windows, tomcat 6.0.33

1 Ответ

6 голосов
/ 06 марта 2012

Я столкнулся с той же проблемой, и документация по крайней мере неадекватна, если не вводит в заблуждение напрямую.

Проблема заключается в том, что если вы скопируете новую версию уже развернутого WAR-файла в каталог веб-приложений, Tomcat не будет повторно развертывать существующее приложение, но удалит развертывание старого приложения, а затем развернет новое приложение. Разница может сначала показаться незначительной, но проблема в том, что во время отмены развертывания старого приложения все контекстные файлы в conf / Catalina / localhost также удаляются. Затем новый файл контекста из текущего файла WAR будет скопирован в conf / Catalina / localhost во время развертывания нового приложения.

Единственное возможное решение, которое я нашел, - это не развертывание нового приложения в виде файла WAR, а замена или перезапись расширенного каталога, например. не копировать aaa.war в webapps /, а распаковать aaa.war непосредственно в webapps / aaa /.

...