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.

Copyright (c) 2000-2001 Version 1.0.2: Use of AccessController.doPrivileged for invocation from sandboxed archives.

 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
Author:
Alexis Grandemange
See Also:
JSPhandler, JSPhandler.ClassEntry

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
          ressources 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.
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
(package private)  java.lang.String jarName
          jar name
(package private)  java.lang.String jarURL
          jar remote location (URL)
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
(package private)  java.util.HashMap resources
          Loaded resources HashMap.
(package private) static java.lang.Class RPAclass
           
(package private)  java.lang.reflect.Constructor RPAconstr
           
private  int size
          classes size
private static java.lang.String SSL_SERVICE
          JES2 jsse service.
private static JSPservletPkg.ServiceReference sslSR
          SSL service reference.
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)
          Externally called method (from Beans.Instantiate or to access resources).
private  java.io.InputStream getResourceForward(java.lang.String name)
          method called by getResourceAsStream.
(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)
          Forward load requests.
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 handler)
          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

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

jarName

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

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

parent

java.lang.ClassLoader parent
parent class loader

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

SSL_SERVICE

private static final java.lang.String SSL_SERVICE
JES2 jsse service.

sslSR

private static JSPservletPkg.ServiceReference sslSR
SSL service reference.

RPAconstr

java.lang.reflect.Constructor RPAconstr

RPAclass

static java.lang.Class RPAclass

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

setSSL

private static final void setSSL(JSPhandler handler)
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
Forward load requests. To:
  1. Bootstrap and system class loaders (findSystemClass).
  2. JSPservlet class loader.
  3. Parent class loader.

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

getResourceForward

private final java.io.InputStream getResourceForward(java.lang.String name)
method called by getResourceAsStream.
Parameters:
name - name of the resource to stream.
Returns:
InputStream

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)
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

finalize

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