Java EE 客户机应用程序类装入
运行 Java™ Platform, Enterprise Edition (Java EE) 应用程序客户机时,将创建类装入器的层次结构以装入应用程序所使用的类。
- Application Client for WebSphere® Application Server (Application Client) 运行时将此值设置为 WAS_LOGGING 环境变量。
extensions class loader 是引导程序类装入器的子代。 此类装入器包含 java/jre/lib/ext 目录中的 JAR 文件或 Java 命令上的 -Djava.ext.dirs 参数定义的 JAR 文件。 Application Client 客户机运行时不设置 -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 文件和类。 Application Client 运行时将此参数设置为 WAS_CLASSPATH 环境变量。
- WebSphere 类装入器将装入 Application Client 运行时以及放在 Application Client 用户目录中的任何类。 此类装入器使用的目录由 WAS_EXT_DIRS 环境变量定义。 WAS_BOOTCLASSPATH, WAS_CLASSPATH, 并且在 app_server_root/bin/setupCmdLine 脚本中为 WebSphere Application Server 安装设置了 WAS_EXT_DIRS 环境变量。 或者在用于客户机安装的 app_server_root/bin/setupClient 脚本中。
随着 Java EE 应用程序客户机运行时初始化,将创建其他类装入器作为 WebSphere 类装入器的子代。 如果客户端应用程序使用 Java DataBase Connectivity ( JDBC ) API、Java Message Service (JMS) API 或 Uniform Resource Locator ( URL ) 等资源,则需要创建不同的类加载器来加载这些资源。 最后,应用程序客户端运行时会设置 WebSphere 类加载器,通过重复处理客户端 JAR 清单来加载 EAR 文件中的类。 从不使用 CLASSPATH 环境变量定义的系统类路径,它不是类装入器层次结构的一部分。
要正确打包客户机应用程序,您必须了解使用哪个类装入器来装入类。 当 Java 代码装入类时,会将用于装入该类的类装入器分配给该类。 该类后面装入的所有类都使用该类装入器,或使用它的任何父类装入器,但不会使用它的子类装入器。
WSCL0205W: The incorrect class loader was used to load [0]当客户机应用程序类由层次结构中某个父类装入器装入时,会显示此消息。 这种情况通常是由于 EAR 文件和硬盘驱动器上包含相同的类而造成的。 如果某个父类装入器找到一个类,那么该类装入器在 Application Client 运行时类装入器装入该类之前将它装入。 在某些情况下,您的客户机应用程序仍然正确运行。 但是,在大多数情况下,您会收到
class not found异常。
配置 classpath 字段
打包 Java EE 客户机应用程序时,必须配置各种类路径字段。 理论上,您应该将应用程序的所有需要打包到 EAR 文件。 这是将 Java EE 客户机应用程序分发到客户机的最简单方法。 然而,您不应该将诸如 JDBC API、JMS API 或 URL 的资源打包。 对于这些资源,使用类路径引用来访问硬盘驱动器上的那些类。 您也许在客户端机器上安装了无需重新分发的其他类。 在这种情况下,您也要使用类路径引用访问硬盘驱动器上的类,请见本主题稍后的描述。
EAR 文件中的引用类
- 值必须引用 EAR 文件中包含的 JAR 和类文件。
- 值必须与 EAR 文件根相关。
- 这些值不能是文件系统中的绝对路径。
- 多个值必须用空格分隔,不能用冒号或分号分隔。
通常,向 EAR 文件的根添加模块(JAR 文件)。 这样,您只需在 Class 路径字段指定模块(JAR 文件)的名称。 如果选择使用路径添加模块,那么需要指定与 EAR 文件根相关的路径。
要引用类文件,您必须指定与 EAR 文件根相关的目录。 使用组装工具,您可以向 EAR 文件添加独立的类文件。 建议您将这些附加类文件打包到 JAR 文件中。 将此 JAR 文件添加到模块 Class 路径字段中。 如果将类文件添加到 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 作为类路径属性的值。 搜索顺序为: myapp.ear/myclient.jar
myapp.ear/xyz.class myapp.ear/mybeans.jar myapp.ear/utility/class2.zip
myapp.ear/class1.jar
不在 EAR 文件中的引用类
使用 launchClient -CCclasspath 参数。 在运行时指定此参数,并采用特定于平台的类路径值,这意味着用分号或冒号分隔多个值。 在这方面,客户机与服务器类似。
资源类路径
使用 Application Client Resource Configuration Tool (ACRCT) 或 z/OS® ACRCT 脚本编制工具配置客户机应用程序所使用的资源时,可以指定资源所需的类路径。 例如,如果应用程序正在将 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 命令。