When you run your Java Platform, Enterprise Edition (Java EE) application client, a hierarchy of class loaders is created to load classes used by your application.
As the Java EE application client run time initializes, additional class loaders are created as children of the WebSphere class loader. If your client application uses resources such as Java DataBase Connectivity (JDBC) API, Java Message Service (JMS) API, or Uniform Resource Locator (URL), a different class loader is created to load each of those resources. Finally, the Application Client run time sets the WebSphere class loader to load classes within the EAR file by processing the client JAR manifest repeatedly. The system class path, defined by the CLASSPATH environment variable is never used and is not part of the hierarchy of class loaders.
To package your client application correctly, you must understand which class loader loads your classes. When the Java code loads a class, the class loader used to load that class is assigned to it. Any classes subsequently loaded by that class will use that class loader or any of its parents, but it will not use children class loaders.
WSCL0205W: The incorrect class loader was used to load [0]This message occurs when your client application class is loaded by one of the parent class loaders in the hierarchy. This situation is typically caused by having the same classes in the EAR file and on the hard disk drive. If one of the parent class loaders locates a class, that class loader loads it before the Application Client run time class loader. In some cases, your client application still functions correctly. In most cases, however, you receive "class not found" exceptions.
When packaging your Java EE client application, you must configure various class path fields. Ideally, you should package everything required by your application into your EAR file. This is the easiest way to distribute your Java EE client application to your clients. However, you should not package such resources as JDBC APIs, JMS APIs, or URLs. In the case of these resources, use class path references to access those classes on the hard disk drive. You might also have other classes installed on your client machines that you do not need to redistribute. In this case, you also want to use classpath references to access the classes on the hard disk drive, as described later in this topic.
Typically, you add modules (JAR files) to the root of the EAR file. In this case, you only need to specify the name of the module (JAR file) in the Class path field. If you choose to add a module with a path, you need to specify the path relative to the root of the EAR file.
For referencing class files, you must specify the directory relative to the root of the EAR file. With an assembly tool, you can add individual class files to the EAR file. It is recommended that these additional class files are packaged in a JAR file. Add this JAR file to the module Class path fields. If you add class files to the root of the EAR file, add ./ to the module Class path fields.
Consider the following example directory structure in which the file myapp.ear contains an application client JAR file named myclient.jar and a mybeans.jar EJB module. Additional classes reside in class1.jar and utility/class2.zip files. A class file named xyz.class is not packaged in a JAR file but is in the root of the EAR file. Specify ./ mybeans.jar utility/class2.zip class1.jar as the value of the Classpath property. The search order is: myapp.ear/myclient.jar myapp.ear/xyz.class myapp.ear/mybeans.jar myapp.ear/utility/class2.zip myapp.ear/class1.jar
Use the launchClient -CCclasspath parameter. This parameter is specified at run time and takes platform-specific class path values, which means multiple values are separated by semi-colons or colons. The client and the server are similar in this respect.
When you configure resources used by your client application using the Application Client Resource Configuration Tool, you can specify class paths that are required by the resource. For example, if your application is using a JDBC to a DB2® database, add db2java.zip to the class path field of the database provider. These class path values are platform-specific and require semi-colons or colons to separate multiple values.
On WebSphere Application Server for i5/OS®, if you use the IBM® Developer Kit for Java JDBC provider to access DB2/400, you do not have to add the db2_classes.jar file to the class path. However, if you use the IBM Toolbox for Java JDBC provider, specify the location of the jt400.jar file.
If you use the launchClient command, the WebSphere class loader hierarchy is created for you. However, if you use the launchClient API, you must perform this setup yourself. Copy the launchClient shell command in defining the Java system properties.