org.eclipse.persistence.dynamic
Class DynamicClassLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by org.eclipse.persistence.dynamic.DynamicClassLoader

public class DynamicClassLoader
extends ClassLoader

This custom ClassLoader provides support for dynamically generating classes within an EclipseLink application using byte codes created using a DynamicClassWriter. A DynamicClassLoader requires a parent or delegate class-loader which is provided to the constructor. This delegate class loader handles the lookup and storage of all created classes.

Since:
EclipseLink 1.2
Author:
dclarke, mnorman

Nested Class Summary
static class DynamicClassLoader.EnumInfo
           
 
Field Summary
 DynamicClassWriter defaultWriter
          Default writer to use if one is not specified.
 
Constructor Summary
DynamicClassLoader(ClassLoader delegate)
          Create a DynamicClassLoader providing the delegate loader and leaving the defaultWriter as DynamicClassWriter
DynamicClassLoader(ClassLoader delegate, DynamicClassWriter writer)
          Create a DynamicClassLoader providing the delegate loader and a default DynamicClassWriter.
 
Method Summary
 void addClass(String className)
          Register a class to be dynamically created using the default DynamicClassWriter.
 void addClass(String className, Class<?> parentClass)
          Register a class to be dynamically created using a copy of default DynamicClassWriter but specifying a different parent class.
 void addClass(String className, DynamicClassWriter writer)
          Register a class to be dynamically created using the provided DynamicClassWriter.
 void addEnum(String className, Object... literalLabels)
           
 Class<?> createDynamicClass(String className)
          Create a new dynamic entity type for the specified name assuming the use of the default writer and its default parent class.
 Class<?> createDynamicClass(String className, Class<?> parentClass)
          Create a new dynamic entity type for the specified name with the specified parent class.
 Class<?> createDynamicClass(String className, DynamicClassWriter writer)
          Create a dynamic class registering a writer and then forcing the provided class name to be loaded.
 DynamicClassWriter getClassWriter(String className)
           
 DynamicClassWriter getDefaultWriter()
           
static DynamicClassLoader lookup(Session session)
          Lookup the DynamicConversionManager for the given session.
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

defaultWriter

public DynamicClassWriter defaultWriter
Default writer to use if one is not specified.

Constructor Detail

DynamicClassLoader

public DynamicClassLoader(ClassLoader delegate)
Create a DynamicClassLoader providing the delegate loader and leaving the defaultWriter as DynamicClassWriter


DynamicClassLoader

public DynamicClassLoader(ClassLoader delegate,
                          DynamicClassWriter writer)
Create a DynamicClassLoader providing the delegate loader and a default DynamicClassWriter.

Method Detail

getDefaultWriter

public DynamicClassWriter getDefaultWriter()

getClassWriter

public DynamicClassWriter getClassWriter(String className)

addEnum

public void addEnum(String className,
                    Object... literalLabels)

addClass

public void addClass(String className)
Register a class to be dynamically created using the default DynamicClassWriter.

See Also:
addClass(String, DynamicClassWriter)

addClass

public void addClass(String className,
                     Class<?> parentClass)
Register a class to be dynamically created using a copy of default DynamicClassWriter but specifying a different parent class.

See Also:
addClass(String, DynamicClassWriter)

addClass

public void addClass(String className,
                     DynamicClassWriter writer)
              throws DynamicException
Register a class to be dynamically created using the provided DynamicClassWriter. The registered writer is used when the findClass(String) method is called back on this loader from the ClassLoader.loadClass(String) call.

If a duplicate request is made for the same className and the writers are not compatible a DynamicException will be thrown. If the duplicate request contains a compatible writer then the second request is ignored as the class may already have been generated.

Throws:
DynamicException
See Also:
findClass(String)

createDynamicClass

public Class<?> createDynamicClass(String className,
                                   DynamicClassWriter writer)
Create a dynamic class registering a writer and then forcing the provided class name to be loaded.


createDynamicClass

public Class<?> createDynamicClass(String className)
Create a new dynamic entity type for the specified name assuming the use of the default writer and its default parent class.

See Also:
#creatDynamicClass(String, DynamicClassWriter)

createDynamicClass

public Class<?> createDynamicClass(String className,
                                   Class<?> parentClass)
Create a new dynamic entity type for the specified name with the specified parent class.

See Also:
#creatDynamicClass(String, DynamicClassWriter)

lookup

public static DynamicClassLoader lookup(Session session)
Lookup the DynamicConversionManager for the given session. If the existing ConversionManager is not an instance of DynamicConversionManager then create a new one and replace the existing one.

Parameters:
session -
Returns: