Tomcat のインストール中に、複数のフォーラムで CATALINA_HOME 変数を設定する必要があり、Tomcat の親ディレクトリを指す必要があります。私はEclipseを介してWebプロジェクトを実行していますが、この環境変数が設定されていなくても実行されます。
この変数が解決する正確な目的と、設定が必須になる時期を知りたいです。
また、Tomcat/bin ディレクトリにある tomcat-juli.jar の正確な使用方法を知りたいです。
Tomcat をインストールしたら、デフォルトで設定されている変数に続く Java オプションの下の Tomcat プロパティを確認します。
-Dcatalina.home=C:\Program Files (x86)\Apache Software Foundation\Tomcat 6.0
-Dcatalina.base=C:\Program Files (x86)\Apache Software Foundation\Tomcat 6.0
-Djava.endorsed.dirs=C:\Program Files (x86)\Apache Software Foundation\Tomcat 6.0\endorsed
-Djava.io.tmpdir=C:\Program Files (x86)\Apache Software Foundation\Tomcat 6.0\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=C:\Program Files (x86)\Apache SoftwareFoundation\Tomcat
6.0\conf\logging.properties
Eclipse 内で実行している場合でも、CATALINA_HOME を自分で設定する必要はありません。CATALINA_HOMEやCATALINA_BASEを設定する必要があるのは、デフォルト値を上書きしたい場合だけです。最も一般的なのは、Tomcat の複数のインスタンスを実行するために同じ Tomcat バイナリを使用している場合です。
tomcat-juli.jar
この tomcat-juli.jar は、ロギング目的で使用されるサード パーティ コンポーネントです。Apache Commons Logging の完全な実装が含まれているため、log4j の存在を検出し、それ自体を構成できます。
tomcat-juli.jar の使い方
log4j をグローバルに使用するように Tomcat を構成する場合:
Q>この変数が解決する正確な目的は何ですか
A>クラスのJavadocは次のように述べています。Bootstrap
このアプリケーションは、("catalina.home" の下の "server" ディレクトリにあるすべての JAR ファイルを蓄積することによって) Catalina 内部クラスのロードに使用するクラス ローダーを構築し、コンテナの通常の実行を開始します。このラウンドアバウト アプローチの目的は、Catalina の内部クラス (およびそれらが依存する XML パーサーなどの他のクラス) をシステム クラス パスから除外し、アプリケーション レベルのクラスから見えないようにすることです。
しかし、もっとあります。CATALINA_HOME
および(互換的に)CATALINA_BASE
「ベースディレクトリ」を定義します。これは、work
ディレクトリを参照するために使用され(コンパイルされたjspsを保持するために使用されます)、コンテキスト構成ファイルなどを見つけるのにも役立ちます。
Eclipse が知らないうちにこれらのプロパティを設定している可能性があります。すべてのシステム プロパティを出力して、内容を確認します。
Q> 設定が必須になるのはいつですか
A> 私が覚えている限りでは
Q> tomcat-juli.jar の正確な使用
A> Tomcat のドキュメントから直接:
Apache Tomcat には、java.util.logging API のいくつかの重要な要素の独自の実装があります。この実装は「JULI」と呼ばれます。重要なコンポーネントは、Tomcat で実行されているさまざまな Web アプリケーション (およびそれらのさまざまなクラス ローダー) を認識しているカスタム LogManager 実装です。アプリケーションごとのプライベート ロギング構成をサポートします。また、Web アプリケーションがメモリからアンロードされたときに Tomcat から通知されるため、そのクラスへの参照をクリアしてメモリ リークを防ぐことができます。