web-dev-qa-db-ja.com

サーバーを再起動せずにTomcatで「server.xml」を編集しますか?

Tomcat 8のconfフォルダにある「server.xml」ファイルを編集しました。新しいHostタグを新しいWebサイトに追加しました。

Tomcatサーバーを再起動する必要がありますか?

新しく編集されたserver.xmlをTomcatで解析して適用できますか?

10
Basil Bourque

まず、Tomcatを再起動せずに実際にファイルを編集することは可能ですが、変更は実行中のプロセスによって無視されるため、質問は完全には正しく行われていません。

本当の問題は、Tomcatを再起動せずにserver.xmlの変更を適用する方法です。

Tomcatのオンラインドキュメントの startup process および class-loader ページから情報を収集すると、これをより詳細に理解できます。

具体的には、 serverStartup.txt および 起動プロセスのUML図 で説明されており、関連する部分は次のように要約できます。

Sequence 1. Start from Command Line
  ...
Sequence 2. Process command line argument (start, startd, stop, stopd)
Class: org.Apache.catalina.startup.Bootstrap (assume command->start)
What it does:
a) Catalina.setAwait(true);
b) Catalina.load()
    b3) createStartDigester()
        Configures a digester for the main server.xml elements
    b4) Load the server.xml and parse it using the digester
        Parsing the server.xml using the digester is an automatic
        XML-object mapping tool, that will create the objects defined
        in server.xml
        Startup of the actual container has not started yet.
    b6) Calls initialize on all components, this makes each object
        register itself with the JMX agent.

これは、サーブレットエンジン(Catalina)のBootstrapクラスローダーの作成後に発生します。

この情報があれば、スタートアッププロセスでserver.xmlファイルがいつ解析されるかは明らかですが、このファイルに変更を適用するためにTomcatを再起動する必要がある理由の質問には実際には答えません。

その答えは、some部分が実行時に動的に変更できるということです JMXを使用して 。これを可能にするには、適切なMBeanを登録する必要があり(上記のb6ステップ)、SET操作を受け入れる必要があります(一部のMBeanにはGETインターフェースしかない)。

あなたの特定のケースでは、準備ができていないため、実行時に新しいホストを作成して登録する方法はありません。これが、Tomcatプロセスを再起動してBootstrap =クラスローダーはそのオブジェクトをインスタンス化し、JMXエージェントに登録します。

その後、任意のJDKにバンドルされているjconsoleなどのJMXクライアントからそのホストを変更できます。

jconsoleをJMX対応のTomcatに接続し、ホストMBeanを参照して、使用可能なすべての属性を確認します。

jconsole showing attributes of Host MBean

使用可能なすべての操作を確認します(例として以下に示すものの1つ)。

jconsole showing an example operation on the Host MBean

14
dawud

いいえ。再起動が必要です。

<Context> のTomcatドキュメントページには、次のように記載されています。

…メインのconf/server.xmlファイルは、Tomcatを再起動しないとリロードできません。

7
Basil Bourque