Tomcatがcontext.xmlファイルの削除を好むのはなぜですか?


24

私は職場でWebベースのJavaアプリケーションを開発していますが、(明らかに)開発中にローカルで実行する必要があります。私はTomcatのドキュメントを理解し、適切なcontext.xmlファイルを持っています/etc/tomcat6/Catalina/localhost/が、Tomcatはそれを削除することをたびたび決定します!つまり、Tomcatを元に戻し、再起動する必要があります。

なぜこれを行うのですか?私はそれについてTomcatのドキュメントを検索しましたが、賢明な人はいません。

(ああそうです:実際には呼び出されませんcontext.xmlowners.xml、それがこのアプリケーションのHTTPパスプレフィックスであるためです。)

更新

Tomcatの実行中にTomcatがファイル削除するのを見ました。バグを報告する必要があると思います...


この問題があります。戦争を置き換えると、アプリのアンデプロイが発生し、コンテキストファイルが削除されるようです。私は、回避策はありませんが、リロード= falseをより便利であるものを持っているのが大好きだstackoverflow.com/questions/4032773/...
artemb

回答:


18

簡単な要約:Tomcatがコンテキストファイルの削除を含むコンテキストをアンデプロイするいくつかの条件(warファイルの変更、webappの削除、または新しいコンテンツでの置換など)があります。

詳細:tomcatがautoDeployment(.xml記述子の変更をチェックし、webappディレクトリの変更をチェックすることを意味します)を行うかどうかは、以下によって決まります。

  1. $ CATALINA_HOME / conf / server.xmlセクションにローカライズされた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の中よりもわずかに異なる構文の強調表示作品を思わ前)
ヤンZyka

問題は、リンクを追加するだけでは、リンクのターゲットが消えて、答えが役に立たなくなる可能性があるということです。そのため、serverfault.comでは、リンクだけでなく実際の回答を投稿することをお勧めしています。そして、コメントしたとき、残りのテキストは表示されませんでした。リンクの簡単な要約ではなく、より完全な応答を実際に投稿することをお勧めします。
ジェニーDは、モニカーを復活させる

1
それは単に真実ではありません。元の回答には、リンクの下で見つけることができるものの短い要約が含まれていました(そして今でもそうです)。リンクがなくても答えは完全に理にかなっており、リンクと一緒に詳細を見つけることができます。
Jan Zyka

しかし、攻撃的なつもりはなかったので、そのように聞こえたら申し訳ありません:)私はこのウェブにはあまり興味がなく、同じことを解決して共有したかっただけです。
ヤンZyka

5

たとえば、実稼働環境でautoDeploy機能が必要ない場合は、conf / Catalina / localhostコンテキストファイルの次の属性を考慮することができます。

  • autoDeploy = "false"
  • そしてdeployXML = "false"

autoDeploy = "false"は、アプリケーションcontext.xml(META-INF内)がautoDeployのserver.xml設定をオーバーライドできるため、単独では機能しない場合があります。

  • アプリケーションのMETA-INF / context.xmlは、開発環境でautoDeployとともに使用されます
  • 運用環境のconf / Catalina / localhostコンテキスト、autoDeployなし。

deployXML属性のドキュメント属性のドキュメントは読む価値があります(§標準実装)。

徹底的な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

これは古いスレッドであることに気付きましたが、この問題を解決するために見つけたものを共有すると思いました...

私は、アプリケーション用のwarファイルの新しいコピーをデプロイするたびに、Tomcatのデスクトップバージョンのcontext.xmlファイルでまったく同じ問題を抱えていました。

問題は、ファイルシステム上でこのファイルに直接変更を加えていたためです。問題を修正したのは、Eclipseエディターでcontext.xmlファイルを編集することでした。私のEclipseの内部には、「servers」プロジェクトがあり、それを展開すると、context.xmlやserver.xmlなどのいくつかのファイルを見ることができます。ファイルシステムにアクセスする代わりに、ここからファイルを変更すると、変更は保持されるようです。

この解決策は、次のスレッドで見つかりました:https : //www.liferay.com/community/forums/-/message_boards/message/16511799

これが他の誰かに役立つことを願っています!

-スティーブン


0

タイトルで説明されている一般的な問題は、コンテキスト削除せずに戦争から再デプロイすることでカバーされていますが、現時点ではまだ未解決の問題です。

コンテキストを削除しない再デプロイと、アンデプロイがコンテキストを削除するアンデプロイ後にデプロイすることには、認識されている違いがあります。ドキュメントは古く、マネージャーGUIは再デプロイをまだサポートしていません。


-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>

conf / Catalina / localhostからcontext.xml(meapp.xml)を削除するtomcatも同じ問題があります

解決するには、context.xml.defaultを使用し、同じパスでcontext.xml.defaultというファイルを作成し、保持したいput構成内に作成します:

 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>

そのため、アプリを再デプロイするときに、confirパラメーターがまだそこにあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.