Interface ClassLoaderResolver

All Known Implementing Classes:
ClassLoaderResolverImpl

public interface ClassLoaderResolver
Class to allow resolution and loading of classes in a persistence framework. Implementations are to define the rules for resolving the classes. For example JDO used within JavaSE would likely differ from JDO used within a JavaEE container. The search class path order is:
  • the primary classloader argument passed in for the specific call
  • the primary classloader (set using setPrimary and kept in ThreadLocal variable)
  • the current thread context classloader (Thread.currentThread().getContextClassLoader())
  • the ExecutionContext classloader
  • the runtime classloader (for creating implementation of persistent interfaces)
  • the user registered classloader (if one was provided by persistence property datanucleus.primaryClassLoader, or the classLoader for the enhancer)
  • Method Details

    • classForName

      Class classForName(String name, ClassLoader primary)
      Class loading method, allowing specification of a primary loader. This method does not initialize the class. Will throw ClassNotResolvedException if the class can't be found in the classpath.
      Parameters:
      name - Name of the Class to be loaded
      primary - the primary ClassLoader to use (or null)
      Returns:
      The Class given the name, using the specified ClassLoader
    • classForName

      Class classForName(String name, ClassLoader primary, boolean initialize)
      Class loading method, allowing specification of a primary loader and whether the class should be initialised or not. Will throw ClassNotResolvedException if the class can't be found in the classpath.
      Parameters:
      name - Name of the Class to be loaded
      primary - the primary ClassLoader to use (or null)
      initialize - whether to initialize the class or not.
      Returns:
      The Class given the name, using the specified ClassLoader
    • classForName

      Class classForName(String name)
      Class loading method. This method does not initialize the class
      Parameters:
      name - Name of the Class to be loaded
      Returns:
      The Class given the name, using the specified ClassLoader
    • classForName

      Class classForName(String name, boolean initialize)
      Class loading method, allowing for initialisation of the class.
      Parameters:
      name - Name of the Class to be loaded
      initialize - whether to initialize the class or not.
      Returns:
      The Class given the name, using the specified ClassLoader
    • isAssignableFrom

      boolean isAssignableFrom(String class_name_1, Class class_2)
      Method to test whether the type represented by the specified class_2 parameter can be converted to the type represented by class_name_1 parameter.
      Parameters:
      class_name_1 - Class name
      class_2 - Class to compare against
      Returns:
      Whether they are assignable
    • isAssignableFrom

      boolean isAssignableFrom(Class class_1, String class_name_2)
      Method to test whether the type represented by the specified class_name_2 parameter can be converted to the type represented by class_1 parameter.
      Parameters:
      class_1 - First class
      class_name_2 - Class name to compare against
      Returns:
      Whether they are assignable
    • isAssignableFrom

      boolean isAssignableFrom(String class_name_1, String class_name_2)
      Method to test whether the type represented by the specified class_name_2 parameter can be converted to the type represented by class_name_1 parameter.
      Parameters:
      class_name_1 - Class name
      class_name_2 - Class name to compare against
      Returns:
      Whether they are assignable
    • getResources

      Enumeration<URL> getResources(String resourceName, ClassLoader primary) throws IOException
      Finds all the resources with the given name.
      Parameters:
      resourceName - the resource name. If resourceName starts with "/", remove it before searching.
      primary - the primary ClassLoader to use (or null)
      Returns:
      An enumeration of URL objects for the resource. If no resources could be found, the enumeration will be empty. Resources that the class loader doesn't have access to will not be in the enumeration.
      Throws:
      IOException - If I/O errors occur
      See Also:
    • getResource

      URL getResource(String resourceName, ClassLoader primary)
      Finds the resource with the given name.
      Parameters:
      resourceName - the path to resource name relative to the classloader root path. If resourceName starts with "/", remove it.
      primary - the primary ClassLoader to use (or null)
      Returns:
      A URL object for reading the resource, or null if the resource could not be found or the invoker doesn't have adequate privileges to get the resource.
      See Also:
    • setRuntimeClassLoader

      void setRuntimeClassLoader(ClassLoader loader)
      ClassLoader registered to load classes created at runtime. One ClassLoader can be registered, and if one ClassLoader is already registered, the registered ClassLoader is replaced by loader.
      Parameters:
      loader - The ClassLoader in which classes are defined
    • registerUserClassLoader

      void registerUserClassLoader(ClassLoader loader)
      ClassLoader registered by users to load classes. One ClassLoader can be registered, and if one ClassLoader is already registered, the registered ClassLoader is replaced by loader.
      Parameters:
      loader - The ClassLoader in which classes are loaded
    • setPrimary

      void setPrimary(ClassLoader primary)
      Sets the primary classloader for the current thread. The primary should be kept in a ThreadLocal variable.
      Parameters:
      primary - the primary classloader
    • unsetPrimary

      void unsetPrimary()
      Unsets the primary classloader for the current thread