JSPservletPkg
Class JSPloader

java.lang.Object
  |
  +--java.lang.ClassLoader
        |
        +--JSPservletPkg.JSPloader

public class JSPloader
extends java.lang.ClassLoader

ClassLoader invoked by ClassEntry for a given jar name.

Changes:

Copyright (c) 2000-2001

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 as published by the Free Software Foundation; version 2
 of the License.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 

Version:
1, 0, 4
Author:
Alexis Grandemange
See Also:
JSPhandler, JSPhandler.ClassEntry, JSPservlet

Inner Class Summary
(package private)  class JSPloader.ClassInfo
          Maintain class object and serial number.
(package private)  class JSPloader.ProtectionDomainInfo
          Maintain Protection Domains and CRL scheduled next update.
(package private)  class JSPloader.ResourceEntry
          resources value - maintains a buffer containing the resource and a lastModified time.
 
Inner classes inherited from class java.lang.ClassLoader
java.lang.ClassLoader.NativeLibrary
 
Field Summary
(package private) static java.lang.Class ac
           
private static sun.security.provider.PolicyFile allPermissionPolicy
          application server policy
private  java.net.URL baseURL
          base URL for policy checking
private static java.security.cert.Certificate[] certificate0
          null certificate list (unsigned archive)
(package private)  java.util.HashMap classes
          Loaded classes HashMap. key: full class name value: ClassInfo
private  java.lang.Object crlChecker
          CRLchecker instance
private  java.lang.reflect.Method crlCheckMethod
          CRLchecker check method
private static sun.security.provider.PolicyFile defaultPolicy
          policy set by default
(package private)  JSPhandler handler
          back pointer on JSPhandler
private static boolean isSSLset
          if true has tried to install jsse
private  java.lang.String jarName
          jar name
private  java.lang.String jarURL
          jar remote location (URL)
private  java.lang.Class JSPservletClass
          JSPservlet class - used at loadClass.
private  long lastModified
          cache file timestamp - used for caching
private  java.lang.Class pageBoxClass
          PageBoxAPI class - used at loadClass
(package private)  java.lang.ClassLoader parent
          Parent class loader.
private  sun.security.provider.PolicyFile policy
          policy used by loaded classes
private  java.lang.String policyFile
          policy file used by loaded classes
private  java.security.ProtectionDomain protectionDomain0
          ProtectionDomain for classes without certificate
private  java.util.HashMap protectionDomains
          map of protection domains
private  java.util.HashMap resources
          Loaded resources HashMap. key: remote location value: byte[]
private  java.util.Properties routingPageProp
          Version 1.0.3: routing page properties. Key: page relative path in the archive. Value: comment.
(package private) static java.lang.Class RPAclass
          To force loading ResourcePrivilegedAction when loader instantiated.
private  int size
          classes size
private static java.lang.String webInfClasses
          part to remove in case of war classes
 
Fields inherited from class java.lang.ClassLoader
bootstrapClassPath, classes, defaultDomain, defaultPermissions, getClassLoaderPerm, initialized, loadedLibraryNames, nativeLibraries, nativeLibraryContext, packages, parent, scl, sclSet, sys_paths, systemNativeLibraries, usr_paths
 
Constructor Summary
JSPloader(JSPhandler jh, java.lang.String jarName, java.lang.String jarURL)
          Constructor.
 
Method Summary
private  boolean copyClassesURL()
          Copy classes from remote location (URL).
protected  void finalize()
          to avoid loitering
 long getLastModified(java.lang.String name)
          Returns resource timestamp
 java.io.InputStream getResourceAsStream(java.lang.String name)
          Version 1.0.4: invokes ClassPathLoader.getResourceAsStream.
Externally called method (from Beans.Instantiate or to access resources).
(package private)  java.util.Properties getRoutingPages()
          Version 1.0.3: routing page properties accessor.
(package private)  java.lang.String getRoutingResource(java.lang.String name)
          Version 1.0.3 Returns comment associated with routing if the resource is a routing one or null.
(package private)  int getSize()
          Returns classes size.
 java.lang.Class loadClass(java.lang.String name, boolean resolve)
          Externally called method (from ClassEntry and JVM).
private  boolean loadClassDataFS()
          Loads class from local cache (File System).
private  boolean loadClassDataURL()
          Loads class from remote location (URL).
private  java.lang.Class loadForward(java.lang.String name)
          Version 1.0.4.
private  java.lang.String loadPolicy()
          Copy policy file from remote location (URL).
(package private)  JSPloader.ResourceEntry newResourceEntry()
          Helper method.
private  boolean parseStream(java.util.jar.JarInputStream jis, boolean toSave, boolean isWar)
          Parses the jar stream.
private static void setSSL(JSPhandler.Log log)
          Installs jsse.
 
Methods inherited from class java.lang.ClassLoader
, addClass, check, defineClass, defineClass, defineClass, defineClass0, definePackage, findBootstrapClass, findClass, findLibrary, findLoadedClass, findNative, findResource, findResources, findSystemClass, getBootstrapClassPath, getBootstrapResource, getBootstrapResources, getCallerClassLoader, getDefaultDomain, getGetClassLoaderPerm, getPackage, getPackages, getParent, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, initializePath, isAncestor, loadClass, loadLibrary, loadLibrary0, resolveClass, resolveClass0, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

handler

JSPhandler handler
back pointer on JSPhandler

jarURL

private java.lang.String jarURL
jar remote location (URL)

jarName

private java.lang.String jarName
jar name

classes

java.util.HashMap classes
Loaded classes HashMap. key: full class name value: ClassInfo
See Also:
JSPloader.ClassInfo

size

private int size
classes size

resources

private java.util.HashMap resources
Loaded resources HashMap. key: remote location value: byte[]
See Also:
JSPloader.ResourceEntry

parent

java.lang.ClassLoader parent
Parent class loader. Used only in ResourcePrivilegedAction in Version 1.0.4.

baseURL

private java.net.URL baseURL
base URL for policy checking

defaultPolicy

private static sun.security.provider.PolicyFile defaultPolicy
policy set by default

allPermissionPolicy

private static sun.security.provider.PolicyFile allPermissionPolicy
application server policy

policy

private sun.security.provider.PolicyFile policy
policy used by loaded classes

policyFile

private java.lang.String policyFile
policy file used by loaded classes

webInfClasses

private static final java.lang.String webInfClasses
part to remove in case of war classes

certificate0

private static final java.security.cert.Certificate[] certificate0
null certificate list (unsigned archive)

protectionDomain0

private java.security.ProtectionDomain protectionDomain0
ProtectionDomain for classes without certificate

protectionDomains

private java.util.HashMap protectionDomains
map of protection domains

lastModified

private long lastModified
cache file timestamp - used for caching

crlChecker

private java.lang.Object crlChecker
CRLchecker instance

crlCheckMethod

private java.lang.reflect.Method crlCheckMethod
CRLchecker check method

isSSLset

private static boolean isSSLset
if true has tried to install jsse

pageBoxClass

private java.lang.Class pageBoxClass
PageBoxAPI class - used at loadClass

JSPservletClass

private java.lang.Class JSPservletClass
JSPservlet class - used at loadClass. Version 1.0.2

routingPageProp

private java.util.Properties routingPageProp
Version 1.0.3: routing page properties.
  • Key: page relative path in the archive.
  • Value: comment.

  • RPAclass

    static java.lang.Class RPAclass
    To force loading ResourcePrivilegedAction when loader instantiated.

    ac

    static java.lang.Class ac
    Constructor Detail

    JSPloader

    public JSPloader(JSPhandler jh,
                     java.lang.String jarName,
                     java.lang.String jarURL)
              throws JSPloaderException
    Constructor. Initialize variables. Can load classes without resolving them.
    1. If no sandbox:
      1. Tries loading classes from cache (loadClassDataFS).
      2. Tries loading classes from remote location (loadClassDataURL).
    2. If sandbox:
      1. Defines all permission and default policies.
      2. Loads archive policy and update keystore if needed.
      3. Instantiates CRLchecker.
      4. Tries loading classes from cache (loadClassDataFS).
      5. Tries copying archive from remote location and load classes.
    Parameters:
    jh - invoking JSPhandler. Used to access properties, member variables and log.
    jarName - application prefix.
    jarURL - jar remote location (URL).
    Method Detail

    getRoutingPages

    java.util.Properties getRoutingPages()
    Version 1.0.3: routing page properties accessor.

    setSSL

    private static final void setSSL(JSPhandler.Log log)
    Installs jsse.
    Parameters:
    log - JSPhandler log.

    getSize

    final int getSize()
    Returns classes size.

    getLastModified

    public final long getLastModified(java.lang.String name)
    Returns resource timestamp
    Parameters:
    name - name of the resource.
    Returns:
    long either
    1. -1: no information (resource managed by container)
    2. 0: unknown timestamp
    3. >1: valid timestamp

    parseStream

    private final boolean parseStream(java.util.jar.JarInputStream jis,
                                      boolean toSave,
                                      boolean isWar)
    Parses the jar stream.
    1. Creates local cache if toSave.
    2. Scans jis. For each entry, write on local cache if toSave, define the class and save it in classes HashMap.
    Parameters:
    jis - JarInputStream from local cache or URL.
    toSave - in case of URL loading, save jar in local cache.
    isWar - true WAR file, false JAR file.
    Returns:
    boolean either
    1. false: unable to parse the jar file or URL. Causes: wrong location, network problem
    2. true: jar loaded

    loadClassDataFS

    private final boolean loadClassDataFS()
    Loads class from local cache (File System).
    Returns:
    boolean either
    1. false:
      • unable to find the jar file
      • unable to parse the jar file
      • causes: wrong location
    2. true: jar loaded

    copyClassesURL

    private final boolean copyClassesURL()
    Copy classes from remote location (URL).
    Returns:
    boolean either
    1. false:unable to find the jar URL
    2. true: jar loaded

    loadPolicy

    private final java.lang.String loadPolicy()
    Copy policy file from remote location (URL).
    Returns:
    String policy file path.

    loadClassDataURL

    private final boolean loadClassDataURL()
    Loads class from remote location (URL).
    Returns:
    boolean either
    1. false:
      • unable to find the jar URL
      • unable to parse the jar URL
      • causes: wrong location, network problem
    2. true: jar loaded

    loadForward

    private final java.lang.Class loadForward(java.lang.String name)
                                       throws java.lang.ClassNotFoundException
    Version 1.0.4. Looks for the class in classPathLoader.
    Forward load requests. To:
    1. JSPservlet class loader.
    2. Parent class loader.
    3. Bootstrap and system class loaders (findSystemClass).

    Parameters:
    name - name of the class to load.
    Returns:
    Class

    loadClass

    public java.lang.Class loadClass(java.lang.String name,
                                     boolean resolve)
                              throws java.lang.ClassNotFoundException
    Externally called method (from ClassEntry and JVM).
    1. Calls loadForward for special suffixes.
    2. Find the requested class in classes cache.
    3. If not found, calls loadForward.

    Parameters:
    name - name of the class to load.
    resolve - if the class must be resolved.
    Returns:
    Class
    Overrides:
    loadClass in class java.lang.ClassLoader

    newResourceEntry

    final JSPloader.ResourceEntry newResourceEntry()
    Helper method. ResourceEntry is not in the scope of ResourcePrivilegeAction that needs to create it.

    getResourceAsStream

    public java.io.InputStream getResourceAsStream(java.lang.String name)
    Version 1.0.4: invokes ClassPathLoader.getResourceAsStream.
    Externally called method (from Beans.Instantiate or to access resources). This method shouldn't be synchronized as URL handling requires time.
    Parameters:
    name - name of the resource to stream.
    Returns:
    InputStream
    Overrides:
    getResourceAsStream in class java.lang.ClassLoader

    getRoutingResource

    final java.lang.String getRoutingResource(java.lang.String name)
    Version 1.0.3

    Returns comment associated with routing if the resource is a routing one or null.

    Parameters:
    name - name of the resource to stream.

    finalize

    protected void finalize()
    to avoid loitering
    Overrides:
    finalize in class java.lang.Object