FileDocCategorySizeDatePackage
ClassLoaderFactory.javaAPI DocGlassfish v2 API8792Fri May 04 22:32:28 BST 2007org.apache.catalina.startup

ClassLoaderFactory

public final class ClassLoaderFactory extends Object

Utility class for building class loaders for Catalina. The factory method requires the following parameters in order to build a new class loader (with suitable defaults in all cases):

  • A set of directories containing unpacked classes (and resources) that should be included in the class loader's repositories.
  • A set of directories containing classes and resources in JAR files. Each readable JAR file discovered in these directories will be added to the class loader's repositories.
  • ClassLoader instance that should become the parent of the new class loader.
author
Craig R. McClanahan
version
$Revision: 1.4 $ $Date: 2007/05/05 05:32:28 $

Fields Summary
private static com.sun.org.apache.commons.logging.Log
log
private static int
debug
Debugging detail level for processing the startup.
Constructors Summary
Methods Summary
public static java.lang.ClassLoadercreateClassLoader(java.io.File[] unpacked, java.io.File[] packed, java.lang.ClassLoader parent)
Create and return a new class loader, based on the configuration defaults and the specified directory paths:

param
unpacked Array of pathnames to unpacked directories that should be added to the repositories of the class loader, or null for no unpacked directories to be considered
param
packed Array of pathnames to directories containing JAR files that should be added to the repositories of the class loader, or null for no directories of JAR files to be considered
param
parent Parent class loader for the new class loader, or null for the system class loader.
exception
Exception if an error occurs constructing the class loader

        return createClassLoader(unpacked, packed, null, parent);
    
public static java.lang.ClassLoadercreateClassLoader(java.io.File[] unpacked, java.io.File[] packed, java.net.URL[] urls, java.lang.ClassLoader parent)
Create and return a new class loader, based on the configuration defaults and the specified directory paths:

param
unpacked Array of pathnames to unpacked directories that should be added to the repositories of the class loader, or null for no unpacked directories to be considered
param
packed Array of pathnames to directories containing JAR files that should be added to the repositories of the class loader, or null for no directories of JAR files to be considered
param
urls Array of URLs to remote repositories, designing either JAR resources or uncompressed directories that should be added to the repositories of the class loader, or null for no directories of JAR files to be considered
param
parent Parent class loader for the new class loader, or null for the system class loader.
exception
Exception if an error occurs constructing the class loader


        if (log.isDebugEnabled()) 
            log.debug("Creating new class loader");

        // Construct the "class path" for this class loader
        ArrayList list = new ArrayList();

        // Add unpacked directories
        if (unpacked != null) {
            for (int i = 0; i < unpacked.length; i++)  {
                File file = unpacked[i];
                if (!file.exists() || !file.canRead())
                    continue;
                if (log.isDebugEnabled())
                    log.debug("  Including directory or JAR " 
                        + file.getAbsolutePath());
                URL url = new URL("file", null,
                                  file.getCanonicalPath() + File.separator);
                list.add(url.toString());
            }
        }

        // Add packed directory JAR files
        if (packed != null) {
            for (int i = 0; i < packed.length; i++) {
                File directory = packed[i];
                if (!directory.isDirectory() || !directory.exists() ||
                    !directory.canRead())
                    continue;
                String filenames[] = directory.list();
                for (int j = 0; j < filenames.length; j++) {
                    String filename = filenames[j].toLowerCase();
                    if (!filename.endsWith(".jar"))
                        continue;
                    File file = new File(directory, filenames[j]);
                    if (log.isDebugEnabled())
                        log.debug("  Including jar file " + file.getAbsolutePath());
                    URL url = new URL("file", null,
                                      file.getCanonicalPath());
                    list.add(url.toString());
                }
            }
        }

        // Add remote URLs
        if (urls != null) {
            for (int i = 0; i < urls.length; i++) {
                list.add(urls[i].toString());
            }
        }

        // Construct the class loader itself
        String array[] = (String[]) list.toArray(new String[list.size()]);
        StandardClassLoader classLoader = null;
        if (parent == null)
            classLoader = new StandardClassLoader(array);
        else
            classLoader = new StandardClassLoader(array, parent);
        classLoader.setDelegate(true);
        return (classLoader);

    
public static intgetDebug()
Return the debugging detail level.



    // ------------------------------------------------------ Static Properties


              
        

        return (debug);

    
public static voidsetDebug(int newDebug)
Set the debugging detail level.

param
newDebug The new debugging detail level


        debug = newDebug;