Java EE 用戶端應用程式類別載入
當您執行 Java™ Platform, Enterprise Edition (Java EE) 應用程式用戶端時,會建立類別載入器階層,以載入應用程式所使用的類別。
- Application Client for WebSphere® Application Server (應用程式用戶端) 執行時期會將此值設為 WAS_LOGGING 環境變數。
extensions class loader 是引導類別載入器的子項。 這個類別載入器包含 java/jre/lib/ext 目錄中的 JAR 檔,或 Java 指令上 -Djava.ext.dirs 參數所定義的 JAR 檔。 應用程式用戶端用戶端執行時期未設定 -Djava.ext.dirs 參數。 因此,它會使用 java/jre/lib/ext 目錄中的 JAR 檔。
延伸類別載入器是引導類別載入器的子項。 這個類別載入器包含 app_server_root /java/ext 目錄、java_home/lib/ext 或 java_home/jre/lib/ext 目錄,以及 /QIBM/UserData/Java400/ext 目錄中的 JAR 檔。 app_server_root 目錄是產品安裝路徑。 java_home 目錄是 Java 檔的安裝路徑。
注意: java_home 參數可以是三個值中的任何一個值,視啟用的 Java 虛擬機器 (JVM) 而定。 三個可能的值如下:
- /QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit (Java SE 6 32 位元)
- /QOpenSys/QIBM/ProdData/JavaVM/jdk60/64bit (Java SE 6 64 位元)
- 系統類別載入器包含 Java 指令上 -classpath 參數所定義的 JAR 檔和類別。 應用程式用戶端執行時期會將這個參數設為 WAS_CLASSPATH 環境變數。
- WebSphere 類別載入器會載入應用程式用戶端執行時期,以及位於應用程式用戶端使用者目錄中的任何類別。 這個類別載入器所用的目錄是由 WAS_EXT_DIRS 環境變數來定義。 WAS_BOOTCLASSPATH、 WAS_CLASSPATH、 及 WAS_EXT_DIRS 環境變數設定在 WebSphere Application Server 安裝架構的 app_server_root/bin/setupCmdLine Script 中, 或在用於用戶端安裝的 app_server_root/bin/setupClient Script 中。
當 Java EE 應用程式用戶端執行時期起始設定時,會建立其他類別載入器作為 WebSphere 類別載入器的子項。 如果您的用戶端應用程式使用諸如 Java DataBase 連線功能 (JDBC) 之類的資源 API、Java 訊息服務 (JMS) API 或「統一資源定址器 (URL)」會建立不同的類別載入器來載入其中每一個資源。 最後,應用程式用戶端執行時期會反覆地處理用戶端 JAR 資訊清單,將 WebSphere 類別載入器設為載入 EAR 檔內的類別。 永不使用 CLASSPATH 環境變數所定義的系統類別路徑,它不是類別載入器階層的一部分。
如果要正確包裝用戶端應用程式,您必須瞭解哪些類別載入器會載入您的類別。 當 Java 程式碼載入類別時,會將用來載入該類別的類別載入器指派給它。 後續由該類別載入的任何類別都會使用該類別載入器或其任何母項,但不會使用子類別載入器。
WSCL0205W: The incorrect class loader was used to load [0]當階層中的其中一個母類別載入器載入用戶端應用程式類別時,會出現此訊息。 此狀況通常是由於在 EAR 檔及硬碟上具有相同的類別所導致。 如果其中一個母類別載入器找到類別,該類別載入器會在應用程式用戶端執行時期類別載入器之前載入它。 在某些情況下,您的用戶端應用程式仍可正常運作。 不過,在大部分情況下,您會收到
找不到類別異常狀況。
配置類別路徑欄位
包裝 Java EE 用戶端應用程式時,您必須配置各種類別路徑欄位。 理論上,您應該將應用程式所需的一切包裝成 EAR 檔。 這是將 Java EE 用戶端應用程式配送至用戶端最簡單的方法。 不過,您不應該包裝 JDBC API、JMS API 或 URL 之類的資源。 如果是這些資源,請使用類別路徑參照來存取硬碟上的那些類別。 您也可能在用戶端機器上安裝了不需要重新配送的其他類別。 在此情況下,您也想要使用類別路徑參照來存取硬碟上的類別,如本主題稍後的說明。
參照 EAR 檔內的類別
- 這些值必須參照 EAR 檔內包含的 JAR 和類別檔。
- 這些值必須相對於 EAR 檔的根目錄。
- 這些值無法參照檔案系統中的絕對路徑。
- 多個值必須以空格而非冒號或分號區隔。
通常,您會將模組 (JAR 檔) 新增至 EAR 檔的根目錄。 在此情況下,您只需要在「類別路徑」欄位中指定模組 (JAR 檔) 的名稱。 如果您選擇新增含有路徑的模組,您必須指定 EAR 檔根目錄的相對路徑。
若要參照類別檔,您必須指定相對於 EAR 檔根目錄的目錄。 使用組合工具,您可以將個別類別檔新增至 EAR 檔。 建議將這些額外的類別檔包裝在 JAR 檔中。 將這個 JAR 檔新增至模組類別路徑欄位。 如果您將類別檔新增至 EAR 檔的根目錄,請新增 ./ 模組類別路徑欄位。
請考量下列範例目錄結構,其中檔案 myapp.ear 包含名為 myclient.jar 的應用程式用戶端 JAR 檔及 mybeans.jar EJB 模組。 其他類別位於 class1.jar 和 utility/class2.zip 檔案中。 名為 xyz.class 的類別檔未包裝在 JAR 檔中,但位於 EAR 檔的根目錄中。 指定 ./
mybeans.jar utility/class2.zip class1.jar 作為 Classpath 內容的值。 搜尋順序為: myapp.ear/myclient.jar
myapp.ear/xyz.class myapp.ear/mybeans.jar myapp.ear/utility/class2.zip
myapp.ear/class1.jar
參照不在 EAR 檔中的類別
使用 launchClient -CCclasspath 參數。 此參數在執行時期指定,並採用平台專用的類別路徑值,這表示多個值以分號或冒號區隔。 用戶端與伺服器在這方面類似。
資源類別路徑
當您使用「應用程式用戶端資源配置工具」來配置用戶端應用程式所使用的資源時,您可以指定資源所需的類別路徑。 例如,如果您的應用程式使用 JDBC 至 DB2® 資料庫,請將 db2java.zip 新增至資料庫提供者的類別路徑欄位。 這些類別路徑值是平台專用的,需要分號或冒號來區隔多個值。
在 WebSphere Application Server for i5/OS上,如果您使用 IBM® Developer Kit for Java JDBC 提供者來存取 DB2/400, 您不需要將 db2_classes.jar 檔新增至類別路徑。 不過,如果您使用 IBM Toolbox for Java JDBC 提供者,請指定 jt400.jar 檔的位置。
使用 launchClient API
如果您使用 launchClient 指令,則會為您建立 WebSphere 類別載入器階層。 不過,如果您使用 launchClient API ,則必須自行執行此設定。 在定義 Java 系統內容時複製 launchClient Shell 指令。