Sun GlassFish Enterprise Server 2.1 Developer's Guide

The Class Loader Hierarchy

Class loaders in the Enterprise Server runtime follow a delegation hierarchy that is illustrated in the following figure and fully described in Table 2–1.

Figure 2–1 Class Loader Runtime Hierarchy

Figure shows the class loader runtime hierarchy.

The following table describes the class loaders in the Enterprise Server.

Table 2–1 Sun GlassFish Enterprise Server Class Loaders

Class Loader 

Description 

Bootstrap

The Bootstrap class loader loads the basic runtime classes provided by the JVM, plus any classes from JAR files present in the system extensions directory. It is parent to the System class loader. To add JAR files to the system extensions, directory, see Using the Java Optional Package Mechanism.

System

The System class loader loads Enterprise Server launch classes. It is parent to the Shared Chain class loader. It is created based on the system-classpath attribute of the java-config element in the domain.xml file. In the developer profile, select the Enterprise Server component in the Admin Console and the JVM Settings tab. In the cluster profile, select the JVM Settings component under the relevant configuration. Then select the Path Settings tab and edit the System Classpath field. See Using the System Class Loader and java-config in Sun GlassFish Enterprise Server 2.1 Administration Reference.

Add the classes to the system-classpath attribute of the domain administration server (DAS) in addition to the system-classpath attribute on the server instances that use the classes. The default name for the DAS configuration is server-config.

Shared Chain 

The Shared Chain class loader loads most of the core Enterprise Server classes. It is parent to the MBean class loader and the Common class loader. Classes specified by the classpath-prefix and classpath-suffix attributes of the java-config element in the domain.xml file are added to this class loader. In the developer profile, select the Enterprise Server component in the Admin Console and the JVM Settings tab. In the cluster profile, select the JVM Settings component under the relevant configuration. Then select the Path Settings tab and edit the Classpath Prefix or Classpath Suffix field.

The environment classpath is included if env-classpath-ignored="false" is set in the java-config element.

Use classpath-prefix to place libraries ahead of Enterprise Server implementation classes in the shared chain. The classpath-prefix is ideal for placing development and diagnostic patches. To avoid overriding implementation classes, use classpath-suffix to place libraries after implementation classes in the shared chain.

Add the classes to the classpath-prefix or classpath-suffix attribute of the DAS in addition to the corresponding attribute on the server instances that use the classes. The default name for the DAS configuration is server-config.

MBean

The MBean class loader loads the MBean implementation classes. See MBean Class Loading.

Common

The Common class loader loads classes in the domain-dir/lib/classes directory, followed by JAR files in the domain-dir/lib directory. It is parent to the Connector class loader. No special classpath settings are required. The existence of these directories is optional; if they do not exist, the Common class loader is not created. See Using the Common Class Loader.

Connector

The Connector class loader is a single class loader instance that loads individually deployed connector modules, which are shared across all applications. It is parent to the LifeCycleModule class loader and the Application class loader. 

LifeCycleModule

The LifeCycleModule class loader is created once per lifecycle module. Each lifecycle-module element’s classpath attribute is used to construct its own class loader. For more information on lifecycle modules, see Chapter 13, Developing Lifecycle Listeners.

Application

The Application class loader loads the classes in a specific enabled individually deployed module or Java EE application. One instance of this class loader is present in each class loader universe; see Class Loader Universes. The Application class loader is created with a list of URLs that point to the locations of the classes it needs to load. It is parent to the Web class loader.

The Application class loader loads classes in the following order: 

  1. Classes specified by the library-directory element in the application.xml deployment descriptor or the –-libraries option during deployment; see Application-Specific Class Loading

  2. Classes specified by the application's or module's location attribute in the domain.xml file, determined during deployment

  3. Classes in the classpaths of the application's sub-modules

  4. Classes in the application's or module's stubs directory

The location attribute points to domain-dir/applications/j2ee-apps/app-name or domain-dir/applications/j2ee-modules/module-name.

The stubs directory is domain-dir/generated/ejb/j2ee-apps/app-name or domain-dir/generated/ejb/j2ee-modules/module-name.

Web

The Web class loader loads the servlets and other classes in a specific enabled web module or a Java EE application that contains a web module. This class loader is present in each class loader universe that contains a web module; see Class Loader Universes. One instance is created for each web module. The Web class loader is created with a list of URLs that point to the locations of the classes it needs to load. The classes it loads are in WEB-INF/classes or WEB-INF/lib/*.jar. It is parent to the JSP Engine class loader.

JSP Engine

The JSP Engine class loader loads compiled JSP classes of enabled JSP files. This class loader is present in each class loader universe that contains a JSP page; see Class Loader Universes. The JSP Engine class loader is created with a list of URLs that point to the locations of the classes it needs to load.