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 Detail

      • 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:
        ClassLoader.getResources(java.lang.String)
      • 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:
        ClassLoader.getResource(java.lang.String)
      • 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