Class DynamicClassLoader


  • public class DynamicClassLoader
    extends java.lang.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
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addClass​(java.lang.String className)
      Register a class to be dynamically created using the default DynamicClassWriter.
      void addClass​(java.lang.String className, java.lang.Class<?> parentClass)
      Register a class to be dynamically created using a copy of default DynamicClassWriter but specifying a different parent class.
      void addClass​(java.lang.String className, EclipseLinkClassWriter writer)
      Register a class to be dynamically created using the provided DynamicClassWriter.
      void addEnum​(java.lang.String className, java.lang.Object... literalLabels)  
      java.lang.Class<?> createDynamicClass​(java.lang.String className)
      Create a new dynamic entity type for the specified name assuming the use of the default writer and its default parent class.
      java.lang.Class<?> createDynamicClass​(java.lang.String className, java.lang.Class<?> parentClass)
      Create a new dynamic entity type for the specified name with the specified parent class.
      java.lang.Class<?> createDynamicClass​(java.lang.String className, DynamicClassWriter writer)
      Create a dynamic class registering a writer and then forcing the provided class name to be loaded.
      EclipseLinkClassWriter getClassWriter​(java.lang.String className)  
      DynamicClassWriter getDefaultWriter()  
      static DynamicClassLoader lookup​(Session session)
      Lookup the DynamicConversionManager for the given session.
      • Methods inherited from class java.lang.ClassLoader

        clearAssertionStatus, getDefinedPackage, getDefinedPackages, getName, getParent, getPlatformClassLoader, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, resources, 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​(java.lang.ClassLoader delegate)
        Create a DynamicClassLoader providing the delegate loader and leaving the defaultWriter as DynamicClassWriter
      • DynamicClassLoader

        public DynamicClassLoader​(java.lang.ClassLoader delegate,
                                  DynamicClassWriter writer)
        Create a DynamicClassLoader providing the delegate loader and a default DynamicClassWriter.
    • Method Detail

      • addEnum

        public void addEnum​(java.lang.String className,
                            java.lang.Object... literalLabels)
      • addClass

        public void addClass​(java.lang.String className,
                             EclipseLinkClassWriter 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 java.lang.Class<?> createDynamicClass​(java.lang.String className,
                                                     DynamicClassWriter writer)
        Create a dynamic class registering a writer and then forcing the provided class name to be loaded.
      • createDynamicClass

        public java.lang.Class<?> createDynamicClass​(java.lang.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:
        createDynamicClass(String, DynamicClassWriter)
      • createDynamicClass

        public java.lang.Class<?> createDynamicClass​(java.lang.String className,
                                                     java.lang.Class<?> parentClass)
        Create a new dynamic entity type for the specified name with the specified parent class.
        See Also:
        createDynamicClass(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: