org.vrspace.server
Class VRSpaceLoader

java.lang.Object
  extended byjava.lang.ClassLoader
      extended byjava.security.SecureClassLoader
          extended byjava.net.URLClassLoader
              extended byorg.vrspace.server.VRSpaceLoader
All Implemented Interfaces:
java.lang.Runnable

public class VRSpaceLoader
extends java.net.URLClassLoader
implements java.lang.Runnable

Big bad class loader. It delegates all calls for all classes specified along with package name to parent classloader, this usually means system class loader. If this loader fails, looks for class in URLs specified by vrspace.loader.classpath property or by addURL/addDir calls. Behaviour changes when a class is specified without package name. Such classes are searched by package path. This allows us to change any class with another class without need to recompile. Still we need to respect polymorhpism etc. To use this feature, you'll have to 1) create new VRSpaceLoader explicitly or 2) use Thread.getContextClassLoader().loadClass() instead of Class.forName() To specify package search path, use vrspace.loader.packages property or call addPackage/removePackage. In properties, delimit urls/packages with ;


Nested Class Summary
 class VRSpaceLoader.ClassReference
          Work in progress
 
Constructor Summary
VRSpaceLoader()
           
VRSpaceLoader(java.net.URL[] urls)
           
VRSpaceLoader(java.net.URL[] urls, java.lang.ClassLoader parent)
           
VRSpaceLoader(java.net.URL[] urls, java.lang.ClassLoader parent, java.net.URLStreamHandlerFactory factory)
           
 
Method Summary
 void addDir(java.lang.String dir)
          Adds all files in a local directory to classpath
 void addDirs(java.lang.String[] dirs)
          Adds all files in specified directories to classpath
 void addPackage(java.lang.String name)
          Add a package to package search path.
protected  void addURL(java.net.URL url)
           
protected static void checkURL(java.net.URL url)
           
protected  java.lang.Class findClass(java.lang.String name)
          Tries to guess package name of the specified class
 java.net.URL findResource(java.lang.String name)
          Debug only; this sometimes fails in conjunction with other classloaders.
 java.lang.String getPath()
          This returns full class search path in a string, delimited by File.pathSeparator
 java.lang.Class loadClass(java.lang.String name, boolean resolve)
          This actually loads a class.
static void main(java.lang.String[] args)
           
 void removePackage(java.lang.String name)
          Remove a package from package search path.
 void run()
           
 void startServer(java.lang.String[] args)
          Starts vrspace server with specified arguments
 
Methods inherited from class java.net.URLClassLoader
definePackage, findResources, getPermissions, getURLs, newInstance, newInstance
 
Methods inherited from class java.security.SecureClassLoader
defineClass
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, definePackage, 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, toString, wait, wait, wait
 

Constructor Detail

VRSpaceLoader

public VRSpaceLoader()

VRSpaceLoader

public VRSpaceLoader(java.net.URL[] urls)

VRSpaceLoader

public VRSpaceLoader(java.net.URL[] urls,
                     java.lang.ClassLoader parent)

VRSpaceLoader

public VRSpaceLoader(java.net.URL[] urls,
                     java.lang.ClassLoader parent,
                     java.net.URLStreamHandlerFactory factory)
Method Detail

addPackage

public void addPackage(java.lang.String name)
Add a package to package search path.


removePackage

public void removePackage(java.lang.String name)
Remove a package from package search path.


addURL

protected void addURL(java.net.URL url)

checkURL

protected static void checkURL(java.net.URL url)
                        throws java.io.IOException
Throws:
java.io.IOException

addDir

public void addDir(java.lang.String dir)
            throws java.io.IOException,
                   java.net.MalformedURLException
Adds all files in a local directory to classpath

Throws:
java.io.IOException
java.net.MalformedURLException

getPath

public java.lang.String getPath()
This returns full class search path in a string, delimited by File.pathSeparator


addDirs

public void addDirs(java.lang.String[] dirs)
             throws java.io.IOException,
                    java.net.MalformedURLException
Adds all files in specified directories to classpath

Throws:
java.io.IOException
java.net.MalformedURLException

findClass

protected java.lang.Class findClass(java.lang.String name)
                             throws java.lang.ClassNotFoundException
Tries to guess package name of the specified class

Throws:
java.lang.ClassNotFoundException

loadClass

public java.lang.Class loadClass(java.lang.String name,
                                 boolean resolve)
                          throws java.lang.ClassNotFoundException
This actually loads a class. If parent fails, searches for class definition all jars/dirs/urls specified in the classpath.

Throws:
java.lang.ClassNotFoundException

findResource

public java.net.URL findResource(java.lang.String name)
Debug only; this sometimes fails in conjunction with other classloaders.


run

public void run()
Specified by:
run in interface java.lang.Runnable

main

public static void main(java.lang.String[] args)

startServer

public void startServer(java.lang.String[] args)
                 throws java.lang.Exception
Starts vrspace server with specified arguments

Throws:
java.lang.Exception
See Also:
Server