使用 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 在伺服器範圍內可用,並且可能在公共目錄中的所有內容之前加載,因為所呈現的層次結構還規定了首先加載的內容。

相關內容