Java EE 客户机应用程序类装入
运行 Java™ Platform, Enterprise Edition (Java EE) 应用程序客户机时,创建类装入器的层次结构,以装入应用程序使用的类。
- WebSphere® Application Server (Application Client) 的应用程序客户机运行时设置该值为 WAS_LOGGING 环境变量。
extensions class loader 是引导程序类装入器的子代。此类装入器包含 java/jre/lib/ext 目录中的 JAR 文件或 Java 命令上 -Djava.ext.dirs 参数定义的 JAR 文件。 应用程序客户机客户机运行时不设置 -Djava.ext.dirs 参数。因此它使用 java/jre/lib/ext 目录中的 JAR 文件。
扩展类装入器是引导程序类装入器的子代。此类装入器包含 JAR 文件,位于 app_server_root /java/ext、java_home/lib/ext 或 java_home/jre/lib/ext 以及 /QIBM/UserData/Java400/ext 目录中。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 类装入器装入 Application Client 运行时和位于应用程序客户机用户目录中的所有类。此类装入器使用的目录由 WAS_EXT_DIRS 环境变量定义。在 WebSphere Application Server 安装的 app_server_root/bin/setupCmdLine 脚本或客户机安装的 app_server_root/bin/setupClient 脚本中设置WAS_BOOTCLASSPATH、WAS_CLASSPATH 和 WAS_EXT_DIRS 环境变量。
Java EE 应用程序客户机运行时开始时,创建附加的类装入器作为 WebSphere 的子代类装入器。如果您的客户机应用程序使用诸如 Java 数据库连接 (JDBC) API、Java 消息服务 (JMS) API 或统一资源定位符 (URL) 等此类的资源,那么将创建不同的类装入器以装入每种资源。最后,Application Client 运行时设置 WebSphere 类装入器重复处理客户机 JAR 清单,以装入 EAR 文件中的类。从不使用 CLASSPATH 环境变量定义的系统类路径,它不是类装入器层次结构的一部分。
要正确打包客户机应用程序,您必须了解使用哪个类装入器来装入类。当 Java 代码装入类时,系统为它分配用来装入类的类装入器。该类后面装入的所有类都使用该类装入器,或使用它的任何父类装入器,但不会使用它的子类装入器。
WSCL0205W:用不正确的类装入器装入 [0]当客户机应用程序类由层次结构中某个父类装入器装入时,会显示此消息。这种情况通常是由于 EAR 文件和硬盘驱动器上包含相同的类而造成的。如果某个父类装入器找到一个类,那么该类装入器在应用程序客户机运行时类装入器装入该类之前将它装入。在某些情况下,您的客户机应用程序仍然正确运行。但是,大多数情况下,您将接收到“未找到类”异常。
配置 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 文件的根添加类文件,那么将 ./ 添加到模块 Class 路径字段。
考虑以下示例目录结构,其中文件 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 参数。在运行时指定此参数,并采用特定于平台的类路径值,这意味着用分号或冒号分隔多个值。在这方面,客户机与服务器类似。
资源类路径
当使用应用程序客户机应用程序客户机资源配置工具 (ACRCT) 或 z/OS® ACRCT 脚本编制工具配置客户机应用程序使用的资源时,可以指定资源需要的类路径。例如,如果应用程序正在使用 DB2® 数据库的 JDBC,那么将 db2java.zip 添加到数据库提供程序的类路径字段。这些类路径值是特定于平台的,并且需以分号或冒号来分隔多个值。
在 WebSphere Application Server for i5/OS™ 上,如果您使用 Java JDBC 提供程序的 IBM® Developer Kit 访问 DB2/400,那么不必将 db2_classes.jar 文件添加到类路径。但是,如果您将 IBM Toolbox 用于 Java JDBC 提供程序,那么请指定 jt400.jar 文件位置。
使用 launchClient API
如果使用 launchClient 命令,那么为您创建 WebSphere 类装入器层次结构。但是,如果您使用 launchClient API,您必须自己执行该设置。复制 Java 系统属性中定义的 launchClient shell 命令。