php.java.bridge
Class DynamicJavaBridgeClassLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by java.security.SecureClassLoader
          extended by php.java.bridge.DynamicClassLoader
              extended by php.java.bridge.DynamicJavaBridgeClassLoader

 class DynamicJavaBridgeClassLoader
extends DynamicClassLoader

The bridge class loader which uses the DynamicClassLoader when possible.

Author:
jostb

Nested Class Summary
 
Nested classes/interfaces inherited from class php.java.bridge.DynamicClassLoader
DynamicClassLoader.URLClassLoaderEntry, DynamicClassLoader.URLClassLoaderFactory
 
Field Summary
(package private) static java.lang.String CLASSPATH
           
(package private) static java.lang.String LD_LIBRARY_PATH
           
 
Fields inherited from class php.java.bridge.DynamicClassLoader
cacheTimeout, classLoaderCache, classLoaders, classPaths, defaultCacheTimeout, defaultLazy, instanceIndex, lazy, nf, parentCache, parentCacheMap, THE_TEMP_FILE_OBSERVER, urlsToAdd
 
Constructor Summary
protected DynamicJavaBridgeClassLoader()
           
protected DynamicJavaBridgeClassLoader(java.lang.ClassLoader parent)
           
protected DynamicJavaBridgeClassLoader(DynamicJavaBridgeClassLoader other)
           
 
Method Summary
(package private) static void addJars(java.util.List list, java.io.File dir)
           
(package private) static void checkJarFile(java.io.File f)
           
static JarLibraryPath checkJarLibraryPath(java.lang.String rawPath, java.lang.String rawContextDir, java.lang.String cwd, java.lang.String searchpath)
          Set the library path for the bridge instance.
(package private) static java.net.URL checkUrl(java.net.URL url)
           
 void clear()
          Clear the loader so that it can be used in new requests.
 DynamicJavaBridgeClassLoader clearVMLoader()
          The VM associates a map with each loader to speed up Class.forName().
protected  DynamicClassLoader.URLClassLoaderFactory getUrlClassLoaderFactory()
           
 java.lang.Class loadClass(java.lang.String name)
          I have decided to override loadClass instead of findClass, so that this method will actually get to re-load classes if necessary.
static DynamicJavaBridgeClassLoader newInstance(java.lang.ClassLoader parent)
          Create an instance of the dynamic java bridge classloader It may return null due to security restrictions on certain systems, so don't use this method directly but call: new JavaBridgeClassLoader(bridge, DynamicJavaBridgeClassLoader.newInstance()) instead.
 void reset()
          Reset to initial state.
protected  java.lang.String resolveLibraryName(java.lang.String name)
          Searches for a library name in our classpath
 java.lang.String toString()
           
 void updateJarLibraryPath(JarLibraryPath path)
          Update the library path for the bridge instance.
 void updateJarLibraryPath(java.lang.String rawPath, java.lang.String rawContextDir, java.lang.String cwd, java.lang.String searchpath)
          Update the library path for the bridge instance.
 
Methods inherited from class php.java.bridge.DynamicClassLoader
addDelayedURLs, addURL, addURL, addURLClassLoader, addURLs, addURLs, addURLs, addURLs, addURLs, arrayToString, clearCache, clearLoader, copyInto, createURLClassLoader, debugMsg, destroyObserver, findResource, findResources, getClassPathFromCache, getLastModified, getStringFromURLArray, getURLArrayFromString, invalidate, invalidate, lazyAddURLs, realAddURLs, setCacheTimeout, setLazy, setUrlClassLoaderFactory
 
Methods inherited from class java.security.SecureClassLoader
defineClass, defineClass, getPermissions
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

LD_LIBRARY_PATH

static final java.lang.String LD_LIBRARY_PATH

CLASSPATH

static final java.lang.String CLASSPATH
Constructor Detail

DynamicJavaBridgeClassLoader

protected DynamicJavaBridgeClassLoader(DynamicJavaBridgeClassLoader other)

DynamicJavaBridgeClassLoader

protected DynamicJavaBridgeClassLoader(java.lang.ClassLoader parent)

DynamicJavaBridgeClassLoader

protected DynamicJavaBridgeClassLoader()
Method Detail

checkJarLibraryPath

public static JarLibraryPath checkJarLibraryPath(java.lang.String rawPath,
                                                 java.lang.String rawContextDir,
                                                 java.lang.String cwd,
                                                 java.lang.String searchpath)
                                          throws java.io.IOException
Set the library path for the bridge instance. Examples: setJarLibPath(";file:///tmp/test.jar;file:///tmp/my.jar");
setJarLibPath("|file:c:/t.jar|http://.../a.jar|jar:file:///tmp/x.jar!/");
The first char must be the token separator.

Parameters:
rawPath - The path
rawContextDir - The context dir, e.g. /usr/lib/php/extensions
searchpath - The search path
cwd - The current working dir
Returns:
The JarLibraryPath
Throws:
java.io.IOException

updateJarLibraryPath

public void updateJarLibraryPath(java.lang.String rawPath,
                                 java.lang.String rawContextDir,
                                 java.lang.String cwd,
                                 java.lang.String searchpath)
                          throws java.io.IOException
Update the library path for the bridge instance. Examples: setJarLibPath(";file:///tmp/test.jar;file:///tmp/my.jar");
setJarLibPath("|file:c:/t.jar|http://.../a.jar|jar:file:///tmp/x.jar!/");
The first char must be the token separator.

Parameters:
rawPath - The path
rawContextDir - The context dir, e.g. /usr/lib/php/extensions
searchpath -
cwd -
Throws:
java.io.IOException

updateJarLibraryPath

public void updateJarLibraryPath(JarLibraryPath path)
Update the library path for the bridge instance.

Parameters:
path - the checked JarLibraryPath
See Also:
checkJarLibraryPath(String, String, String, String)

checkUrl

static java.net.URL checkUrl(java.net.URL url)
                      throws java.io.IOException
Throws:
java.io.IOException

checkJarFile

static void checkJarFile(java.io.File f)
                  throws java.io.IOException
Throws:
java.io.IOException

addJars

static void addJars(java.util.List list,
                    java.io.File dir)

clearVMLoader

public DynamicJavaBridgeClassLoader clearVMLoader()
The VM associates a map with each loader to speed up Class.forName(). Since our loader can shrink, we discard the VM cache when clear() or reset() is called.

Returns:
A new instance which should be used instead of the current instance.

reset

public void reset()
Reset to initial state.


clear

public void clear()
Clear the loader so that it can be used in new requests.


resolveLibraryName

protected java.lang.String resolveLibraryName(java.lang.String name)
Searches for a library name in our classpath

Parameters:
name - the library name, e.g. natcJavaBridge.so
Returns:
never returns. It throws a UnsatisfiedLinkError.
Throws:
java.lang.UnsatisfiedLinkError

getUrlClassLoaderFactory

protected DynamicClassLoader.URLClassLoaderFactory getUrlClassLoaderFactory()

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

loadClass

public java.lang.Class loadClass(java.lang.String name)
                          throws java.lang.ClassNotFoundException
Description copied from class: DynamicClassLoader
I have decided to override loadClass instead of findClass, so that this method will actually get to re-load classes if necessary. Otherwise, the Java system would call the final method "getLoadedClass(name)", (i.e. use it's own caching) without dynamically re-loading classes if necessary.

Overrides:
loadClass in class DynamicClassLoader
Parameters:
name - The class name
Returns:
The class
Throws:
java.lang.ClassNotFoundException

newInstance

public static DynamicJavaBridgeClassLoader newInstance(java.lang.ClassLoader parent)
Create an instance of the dynamic java bridge classloader It may return null due to security restrictions on certain systems, so don't use this method directly but call: new JavaBridgeClassLoader(bridge, DynamicJavaBridgeClassLoader.newInstance()) instead.

Parameters:
parent - The parent class loader
Returns:
A new DynamicJavaBridgeClassLoader