Class NonManagedPluginRegistry

  • All Implemented Interfaces:
    PluginRegistry

    public class NonManagedPluginRegistry
    extends java.lang.Object
    implements PluginRegistry
    Manages the registry of Extensions and Extension Points outside any OSGI container. This implementation cannot handle multiple versions of the same plugin, so it either raises an exception or logs the issue as a warning. This is different to that mandated by the OSGi specification 3.0 $3.5.2.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      protected static class  NonManagedPluginRegistry.ExtensionSorter
      Sorter for extensions that puts DataNucleus extensions first, then any vendor extension.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private boolean allowUserBundles
      Whether to load up any user (third-party) bundles.
      private java.lang.String bundleCheckType
      Type of check on bundles (EXCEPTION, LOG, NONE).
      private ClassLoaderResolver clr
      ClassLoaderResolver corresponding to the persistence context.
      private static java.lang.String DATANUCLEUS_PKG
      DataNucleus package to define whether to check for deps, etc.
      (package private) ExtensionPoint[] extensionPoints
      extension points
      (package private) java.util.Map<java.lang.String,​ExtensionPoint> extensionPointsByUniqueId
      extension points keyed by Unique Id (plugin.id +"."+ id)
      private static char JAR_SEPARATOR
      Character that is used in URLs of jars to separate the file name from the path of a resource inside the jar.
      example: jar:file:foo.jar!/META-INF/manifest.mf
      private static java.io.FilenameFilter MANIFEST_FILE_FILTER
      filters all accepted manifest file names
      private static java.lang.String PLUGIN_DIR
      directories that are searched for plugin files
      (package private) java.util.Map<java.lang.String,​Bundle> registeredPluginByPluginId
      registered bundles files keyed by bundle symbolic name
    • Field Detail

      • DATANUCLEUS_PKG

        private static final java.lang.String DATANUCLEUS_PKG
        DataNucleus package to define whether to check for deps, etc.
        See Also:
        Constant Field Values
      • PLUGIN_DIR

        private static final java.lang.String PLUGIN_DIR
        directories that are searched for plugin files
        See Also:
        Constant Field Values
      • MANIFEST_FILE_FILTER

        private static final java.io.FilenameFilter MANIFEST_FILE_FILTER
        filters all accepted manifest file names
      • JAR_SEPARATOR

        private static final char JAR_SEPARATOR
        Character that is used in URLs of jars to separate the file name from the path of a resource inside the jar.
        example: jar:file:foo.jar!/META-INF/manifest.mf
        See Also:
        Constant Field Values
      • clr

        private final ClassLoaderResolver clr
        ClassLoaderResolver corresponding to the persistence context.
      • extensionPointsByUniqueId

        java.util.Map<java.lang.String,​ExtensionPoint> extensionPointsByUniqueId
        extension points keyed by Unique Id (plugin.id +"."+ id)
      • registeredPluginByPluginId

        java.util.Map<java.lang.String,​Bundle> registeredPluginByPluginId
        registered bundles files keyed by bundle symbolic name
      • bundleCheckType

        private java.lang.String bundleCheckType
        Type of check on bundles (EXCEPTION, LOG, NONE).
      • allowUserBundles

        private boolean allowUserBundles
        Whether to load up any user (third-party) bundles.
    • Constructor Detail

      • NonManagedPluginRegistry

        public NonManagedPluginRegistry​(ClassLoaderResolver clr,
                                        java.lang.String bundleCheckType,
                                        boolean allowUserBundles)
        Constructor.
        Parameters:
        clr - the ClassLoaderResolver
        bundleCheckType - Type of check on bundles (EXCEPTION, LOG, NONE)
        allowUserBundles - Whether to only load DataNucleus bundles (org.datanucleus).
    • Method Detail

      • getExtensionPoint

        public ExtensionPoint getExtensionPoint​(java.lang.String id)
        Description copied from interface: PluginRegistry
        Acessor for the ExtensionPoint
        Specified by:
        getExtensionPoint in interface PluginRegistry
        Parameters:
        id - the unique id of the extension point
        Returns:
        null if the ExtensionPoint is not registered
      • registerExtensionPoints

        public void registerExtensionPoints()
        Description copied from interface: PluginRegistry
        Look for Bundles/Plugins and register them. Register also ExtensionPoints and Extensions declared in /plugin.xml files
        Specified by:
        registerExtensionPoints in interface PluginRegistry
      • registerExtensions

        public void registerExtensions()
        Description copied from interface: PluginRegistry
        Look for Bundles/Plugins and register them. Register also ExtensionPoints and Extensions declared in /plugin.xml files
        Specified by:
        registerExtensions in interface PluginRegistry
      • registerExtensionPointsForPluginInternal

        protected void registerExtensionPointsForPluginInternal​(java.util.List<ExtensionPoint> extPoints,
                                                                boolean updateExtensionPointsArray)
        Register extension-points for the specified plugin.
        Parameters:
        extPoints - ExtensionPoints for this plugin
        updateExtensionPointsArray - Whether to update "extensionPoints" array
      • registerBundle

        protected Bundle registerBundle​(java.net.URL manifest)
        Register the plugin bundle.
        Parameters:
        manifest - the url to the "meta-inf/manifest.mf" file or a jar file
        Returns:
        the Plugin
      • registerBundle

        protected Bundle registerBundle​(java.util.jar.Manifest mf,
                                        java.net.URL manifest)
        Register the plugin bundle.
        Parameters:
        mf - the Manifest
        manifest - the url to the "meta-inf/manifest.mf" file or a jar file
        Returns:
        the Plugin
      • getManifestURL

        private java.net.URL getManifestURL​(java.net.URL pluginURL)
        Get the URL to the "manifest.mf" file relative to the plugin URL ($pluginurl/meta-inf/manifest.mf)
        Parameters:
        pluginURL - the url to the "plugin.xml" file
        Returns:
        a URL to the "manifest.mf" file or a URL for a jar file
      • createExecutableExtension

        public java.lang.Object createExecutableExtension​(ConfigurationElement confElm,
                                                          java.lang.String name,
                                                          java.lang.Class[] argTypes,
                                                          java.lang.Object[] args)
                                                   throws java.lang.ClassNotFoundException,
                                                          java.lang.SecurityException
        Description copied from interface: PluginRegistry
        Loads a class (do not initialize) from an attribute of ConfigurationElement
        Specified by:
        createExecutableExtension in interface PluginRegistry
        Parameters:
        confElm - the configuration element
        name - the attribute name
        argTypes - Types of the constructor arguments
        args - The arguments
        Returns:
        the instance
        Throws:
        java.lang.ClassNotFoundException - If an error occurs
        java.lang.SecurityException - If an error occurs
      • loadClass

        public java.lang.Class loadClass​(java.lang.String pluginId,
                                         java.lang.String className)
                                  throws java.lang.ClassNotFoundException
        Description copied from interface: PluginRegistry
        Loads a class (do not initialize)
        Specified by:
        loadClass in interface PluginRegistry
        Parameters:
        pluginId - the plugin id
        className - the class name
        Returns:
        the Class
        Throws:
        java.lang.ClassNotFoundException - if an error occurs in loading
      • resolveURLAsFileURL

        public java.net.URL resolveURLAsFileURL​(java.net.URL url)
                                         throws java.io.IOException
        Description copied from interface: PluginRegistry
        Converts a URL that uses a user-defined protocol into a URL that uses the file protocol.
        Specified by:
        resolveURLAsFileURL in interface PluginRegistry
        Parameters:
        url - the url to be converted
        Returns:
        the converted URL
        Throws:
        java.io.IOException - if an error occurs
      • resolveConstraints

        public void resolveConstraints()
        Description copied from interface: PluginRegistry
        Resolve constraints declared in bundle manifest.mf files. This must be invoked after registering all bundles. Should log errors if bundles are not resolvable, or raise runtime exceptions.
        Specified by:
        resolveConstraints in interface PluginRegistry
      • isVersionInInterval

        private boolean isVersionInInterval​(java.lang.String version,
                                            java.lang.String interval)
        Check if the version is in interval
        Parameters:
        version - The version
        interval - The interval definition
        Returns:
        Whether the version is in this interval
      • registerExtensionsForPlugin

        public void registerExtensionsForPlugin​(java.net.URL pluginURL,
                                                Bundle bundle)
        Register extension and extension points for the specified plugin. Note that this is only present for testing purposes, hence also why it is public.
        Parameters:
        pluginURL - the URL to the plugin
        bundle - the bundle