Чому tomcat любить видалити мій файл context.xml?


24

Я розробляю веб-додаток Java на роботі і (очевидно) треба запускати його локально під час розробки. Я зрозумів, що документи Tomcat мають відповідний файл context.xml, /etc/tomcat6/Catalina/localhost/але так часто Tomcat вирішує видалити його! Що означає, що я повинен повернути його та перезапустити Tomcat.

Чому це робиться? Я шукав документи Tomcat про це, і я не мудріший.

(О так: це насправді не називається, context.xmlале owners.xmlоскільки це префікс шляху HTTP для цієї програми.)

Оновлення

Зараз я бачив, як Tomcat видаляв файл під час роботи Tomcat . Я думаю, мені потрібно подати помилку ...


Мати цю проблему. Схоже, що при заміні війни це спричиняє нерозгортання програми, що призводить до видалення файлу контексту. У мене немає роботи навколо , але хотілося б мати один , який є більш зручним , ніж поповнюються = помилковий stackoverflow.com/questions/4032773 / ...
artemb

Відповіді:


18

Короткий підсумок : існує декілька умов (наприклад, зміна файлу війни, видалення веб-сайту або заміна його новим вмістом), згідно з яким tomcat не використовує контекст, включаючи видалення файлу контексту.

Докладніше : чи робить tomcat чи не робить autoDeployment (означає перевірку змін у дескрипторі .xml, а також перевірку змін у каталогу webapp):

  1. server.xml, розміщений у розділі $ CATALINA_HOME / conf / server.xml:

    <Host name = "localhost" appBase = "webapps" unpackWARs = "true" autoDeploy = "true" xmlValidation = "false" xmlNamespaceAware = "false">

  2. Ви також можете встановити це властивість у вашому контекстному файлі, перевантажуючи значення

Цитування документа в випадках, коли autoDeploy = true може призвести до видалення вашого контекстного файлу:

  • Видалення файлу WAR призведе до нерозгортання програми із видаленням будь-якого пов’язаного розширеного каталогу, контекстного файлу та робочого каталогу.
  • Видалення каталогу призведе до нерозгортання програми із видаленням будь-якого пов'язаного файлу контексту та робочого каталогу.
  • Оновлення файлу WAR призведе до нерозгортання програми із видаленням будь-якого пов'язаного розгорнутого каталогу, контекстного файлу та робочої директорії.
  • Оновлення каталогу (а не вмісту каталогів) призведе до нерозгортання програми із видаленням будь-якого пов'язаного файлу контексту та робочого каталогу.

Вичерпні відомості : http://tomcat.apache.org/tomcat-6.0-doc/config/host.html#Automatic%20Application%20Deployment



:) будь ласка, допоможіть собі (здається, підсвічування синтаксису працює дещо інакше, ніж у stackoverflow, який видалив частину відповіді раніше)
Jan Zyka

Вся справа в тому, що якщо ви просто додасте посилання, ціль посилання може зникнути, що робить відповідь марною. Ось чому serverfault.com рекомендує опублікувати фактичну відповідь, а не лише посилання. І коли я коментував, решту тексту не було видно. Я все ж рекомендую фактично опублікувати більш повну відповідь, а не короткий підсумок посилання.
Дженні Д каже, що поверніть Моніку

1
Це просто неправда. Оригінальна відповідь містила (і все ще є) короткий підсумок того, що ви можете знайти за посиланням. Без посилання відповідь все ще має ідеальний сенс, і разом із посиланням ви можете знайти деталі.
Jan Zyka

Але я не планував бути образливим, так шкода, якби це звучало так :) Я не дуже впадав у цю мережу, просто вирішував те саме і хотів поділитися.
Jan Zyka

5

Якщо ви не хочете функцію autoDeploy, наприклад , у виробничих середовищах ви можете врахувати такі атрибути у контекстному файлі conf / Catalina / localhost:

  • autoDeploy = "помилково"
  • і розгорнутиXML = "помилково"

autoDeploy = "false" може працювати не поодинці, оскільки контекст програми.xml (у META-INF) може замінити налаштування сервера.xml для autoDeploy.

  • META-INF / context.xml програми буде використовуватися в середовищі розробки з autoDeploy
  • Конфф / Каталіна / локальний контекст у виробництві, без автоматичного розгортання.

Документацію щодо атрибутів документації атрибутівXX варто прочитати (§ Стандартна реалізація).

Вичерпний випадок користувача autoDeploy, і коли контекст видалений: тобто додаток нерозподілений, справа користувача задокументована тут .



1

Я чесно не знаю, що міркує Tomcat про це, але спробуйте додати наступний атрибут XML у ваш елемент контексту

reloadable="false"

Отже, ваш контекст може виглядати приблизно так:

<Context path="/" docBase="/some/path/name" reloadable="false">
<!-- Context related stuff -->
</Context>

Це повинно запобігти видаленню файлу Tomcat


На жаль, це ускладнює розвиток, оскільки мені доведеться перезавантажувати Tomcat після кожної збірки.
staticsan

Оформити замовлення jrebel, щоб допомогти у цьому у розвитку: zeroturnaround.com/jrebel
harmanjd

0

Я усвідомлюю, що це стара тема, але я думав, що поділюсь тим, що знайшов, щоб виправити цю проблему ...

У мене була та сама проблема з моїм файлом контексту.xml для моєї настільної версії Tomcat, що ставав клоборованим кожен раз, коли я розгортав нову копію файлу війни для моєї заявки.

Проблема була через те, що я вносив зміни до цього файлу безпосередньо у файловій системі. Виправлена ​​проблема полягала в тому, щоб відредагувати файл context.xml через мій редактор Eclipse. Всередині мого Eclipse є проект "сервери", який, як тільки ви розгорнете його, може побачити кілька файлів, таких як контекст.xml та сервер.xml. Здається, що якщо ви змінюєте файли звідси замість того, щоб виходити у файлову систему, ваші зміни зберігаються.

Я знайшов це рішення в наступній темі: https://www.liferay.com/community/forums/-/message_boards/message/16511799

Я сподіваюся, що це допоможе комусь іншому!

-StephenS


0

Загальне питання, як описано в заголовку, висвітлюється Повторним розгортанням з війни без вилучення контексту, який наразі залишається відкритим.

Існує визнане відмінність між повторним розгортанням, яке не видаляє контекст, і розгортанням після розгортання, де нерозгортання видаляє контекст. Документація застаріла, а графічний інтерфейс менеджера все ще не підтримує повторне розгортання.


-1

Іноді необхідні різні значення для програми на сервері, наприклад шлях для зберігання завантажених файлів. У середовищі розробників Mabe у нас є щось подібне:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" reloadable="false">
     <Parameter name="rutaTrabajo" value="C:\Larry\Proyectos\app\rutaTrabajoxx" override="true"/>
</Context>

Але у сервера шлях інший:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" >
     <Parameter name="rutaTrabajo" value="/usr/share/App/rutaTrabajo" override="true"/>
</Context>

У мене також є та ж проблема, що tomcat видаляє context.xml (meapp.xml) з conf / Catalina / localhost

Для вирішення я використовую context.xml.default, в тому ж шляху я створюю файл, який називається context.xml.default, і всередині put config, який я хочу провести:

 cat context.xml.default
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" >
     <Parameter name="rutaTrabajo" value="/usr/share/ParkiMeApp/rutaTrabajo" override="true"/>
</Context>

Отже, при повторному розміщенні тоді додатка підтверджені параметри все ще є.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.