我们的供应商建议将 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 类加载器”的类加载器中,在本例中为“通用”类加载器:
...可以将其放入“$CATALINA_HOME/lib”或“$CATALINA_BASE/lib”,如 Classloader Howto 中所述。
我的供应商是否推荐了不良做法?
注意自我
在 Tomcat 5 中类加载器层次结构如下:
感谢上帝的简化!
答案1
恩,他是。
该建议的目的是使 JAR 在整个服务器中可用,并且可能在公共目录中的所有内容之前加载,因为所呈现的层次结构还决定了首先加载的内容。