使用 Tomcat 的“endorsed”目录来存放 JDBC 实现 jar?

使用 Tomcat 的“endorsed”目录来存放 JDBC 实现 jar?

我们的供应商建议将 MySQL JDBC jar 放入 Tomcat 6“$CATALINA_HOME/endorsed”目录中。

我不清楚这项建议的目的是什么。

类加载器使用方法Tomcat 6 对“认可”机制作出了如下规定:

Java 支持一种称为“认可标准覆盖机制”的机制,允许替换 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 实现加载到“高于 webapp 类加载器”的类加载器中,在本例中为“通用”类加载器:

Tomcat 6 类加载器层次结构

...可以将其放入“$CATALINA_HOME/lib”或“$CATALINA_BASE/lib”,如 Classloader Howto 中所述。

我的供应商是否推荐了不良做法?

注意自我

在 Tomcat 5 中类加载器层次结构如下:

Tomcat 5 类加载器层次结构

感谢上帝的简化!

答案1

恩,他是。

该建议的目的是使 JAR 在整个服务器中可用,并且可能在公共目录中的所有内容之前加载,因为所呈现的层次结构还决定了首先加载的内容。

相关内容