com.javageeks.classloader
Class JDBCClassLoader

java.lang.Object
  |
  +--java.lang.ClassLoader
        |
        +--com.javageeks.classloader.JDBCClassLoader
All Implemented Interfaces:
ClassLoaderStrategy, java.io.Serializable

public class JDBCClassLoader
extends java.lang.ClassLoader
implements ClassLoaderStrategy

See Also:
Serialized Form

Constructor Summary
JDBCClassLoader(java.lang.ClassLoader parent, java.sql.Connection conn, java.lang.String sql)
          Constructor.
JDBCClassLoader(java.sql.Connection conn, java.lang.String sql)
          Constructor.
 
Method Summary
 java.lang.Class findClass(java.lang.String className)
          Called by ClassLoader.loadClass when a classname is requested.
 byte[] findClassBytes(java.lang.String className)
          Return byte array (which will be turned into a Class instance via ClassLoader.defineClass) for class
 java.lang.String findLibraryPath(java.lang.String libraryName)
          Return full path to native library given by the name libraryName.
 java.util.Enumeration findResourcesEnum(java.lang.String resourceName)
          Return Enumeration of resources corresponding to resourceName.
 java.net.URL findResourceURL(java.lang.String resourceName)
          Return URL for resource given by resourceName
static void main(java.lang.String[] args)
          Test driver routine; assumes an IDB database with the following schema:
CREATE TABLE class_tbl ( bytecode binary, classname varchar(80) primary key );
 
Methods inherited from class java.lang.ClassLoader
defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, resolveClass, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JDBCClassLoader

public JDBCClassLoader(java.sql.Connection conn,
                       java.lang.String sql)
Constructor. The SQL statement must return at least one row, the first column of which will be a BINARY column, and must contain a ? where the name of the fully-qualified classname will appear. Example: "SELECT bytecode FROM class_tbl WHERE class_tbl.name = ?"
Parameters:
conn - The JDBC Connection to use. Must be already connected.
sql - The SQL statement to execute to retrieve the bytecode.

JDBCClassLoader

public JDBCClassLoader(java.lang.ClassLoader parent,
                       java.sql.Connection conn,
                       java.lang.String sql)
Constructor. The SQL statement must return at least one row, the first column of which will be a BINARY column, and must contain a ? where the name of the fully-qualified classname will appear. Example: "SELECT bytecode FROM class_tbl WHERE class_tbl.name = ?"
Parameters:
parent - The parent ClassLoader (in the 1.2 JDK scheme of things)
conn - The JDBC Connection to use. Must be already connected.
sql - The SQL statement to execute to retrieve the bytecode.
Method Detail

findClassBytes

public byte[] findClassBytes(java.lang.String className)
Return byte array (which will be turned into a Class instance via ClassLoader.defineClass) for class
Specified by:
findClassBytes in interface ClassLoaderStrategy

findResourceURL

public java.net.URL findResourceURL(java.lang.String resourceName)
Return URL for resource given by resourceName
Specified by:
findResourceURL in interface ClassLoaderStrategy

findResourcesEnum

public java.util.Enumeration findResourcesEnum(java.lang.String resourceName)
Return Enumeration of resources corresponding to resourceName.
Specified by:
findResourcesEnum in interface ClassLoaderStrategy

findLibraryPath

public java.lang.String findLibraryPath(java.lang.String libraryName)
Return full path to native library given by the name libraryName.
Specified by:
findLibraryPath in interface ClassLoaderStrategy

findClass

public java.lang.Class findClass(java.lang.String className)
                          throws java.lang.ClassNotFoundException
Called by ClassLoader.loadClass when a classname is requested.
Overrides:
findClass in class java.lang.ClassLoader

main

public static void main(java.lang.String[] args)
                 throws java.lang.Exception
Test driver routine; assumes an IDB database with the following schema:
CREATE TABLE class_tbl ( bytecode binary, classname varchar(80) primary key );