JDBC 実装 jar に Tomcat の「endorsed」ディレクトリを使用しますか?

JDBC 実装 jar に Tomcat の「endorsed」ディレクトリを使用しますか?

弊社のベンダーは、MySQL JDBC jar を Tomcat 6 の "$CATALINA_HOME/endorsed" ディレクトリに配置することを推奨しています。

その勧告の目的が何なのか私には分かりません。

クラスローダーの使い方Tomcat 6 では、「承認済み」メカニズムについて次のように述べられています。

Java は、「Endorsed Standards Override Mechanism」と呼ばれるメカニズムをサポートしており、JCP の外部で作成された API (W3C の DOM や SAX など) を置き換えることができます。また、XML パーサー実装の更新にも使用できます。詳細については、以下を参照してください。 http://docs.oracle.com/javase/1.5.0/docs/guide/standards/index.html

Tomcat は、コンテナを起動するコマンド ラインにシステム プロパティ設定 -Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS を含めることで、このメカニズムを利用します。このオプションの既定値は $CATALINA_HOME/endorsed です。この承認済みディレクトリは、デフォルトでは作成されません。

したがって、「$CATALINA_HOME/endorsed」ディレクトリを作成し、コマンド ラインでアクティブ化すると、JDK に付属する API の実装をオーバーライドするために使用できます。ただし、JDK には JDBC のデフォルト実装は付属していません。

MySQL JDBC 実装を「Web アプリケーション クラスローダーよりも上位の」クラスローダー (この場合は「共通」クラスローダー) にロードする場合:

Tomcat 6 クラスローダー階層

...Classloader Howto で説明されているように、これを「$CATALINA_HOME/lib」または「$CATALINA_BASE/lib」に配置します。

ベンダーは悪い習慣を推奨していますか?

自分の為にメモする

Tomcat 5では、クラスローダー階層は次の通りです。

Tomcat 5 クラスローダー階層

簡素化に感謝します!

答え1

はい、そうです。

この推奨の目的は、JAR をサーバー全体で利用できるようにし、共通ディレクトリ内のすべてのものより先にロードできるようにすることです。これは、提示された階層によって最初にロードされるものが決まるためです。

関連情報