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