Class PluginRegistry


  • public class PluginRegistry
    extends Object
    Registry to support plugin manager.
    Author:
    Jiri Bubnik
    • Method Detail

      • getRegisteredPlugins

        public Map<Class,​Map<ClassLoader,​Object>> getRegisteredPlugins()
        Returns map of all registered plugins.
        Returns:
        map plugin class -> Map (ClassLoader -> Plugin instance)
      • setAnnotationProcessor

        public void setAnnotationProcessor​(AnnotationProcessor annotationProcessor)
      • scanPlugins

        public void scanPlugins​(ClassLoader classLoader,
                                String pluginPackage)
        Scan for plugins by @Plugin annotation on PLUGIN_PATH and process plugin annotations.
        Parameters:
        classLoader - classloader to resolve plugin package. This will be used by annotation scanner.
        pluginPackage - the package to be searched (e.g. org.agent.hotswap.plugin)
      • initializePlugin

        public Object initializePlugin​(String pluginClass,
                                       ClassLoader appClassLoader)
        Init a plugin (create new plugin instance) in a application classloader. Each classloader may contain only one instance of a plugin.
        Parameters:
        pluginClass - class of plugin to instantiate
        appClassLoader - target application classloader
        Returns:
        the new plugin instance or null if plugin is disabled.
      • initializePluginInstance

        public void initializePluginInstance​(Object pluginInstance)
      • getPlugin

        public <T> T getPlugin​(Class<T> pluginClass,
                               ClassLoader classLoader)
        Returns plugin instance by it's type and classLoader.
        Type Parameters:
        T - type of the plugin to return correct instance.
        Parameters:
        pluginClass - type of the plugin
        classLoader - classloader of the plugin
        Returns:
        the plugin
        Throws:
        IllegalArgumentException - if classLoader not initialized or plugin not found
      • hasPlugin

        public boolean hasPlugin​(Class<?> pluginClass,
                                 ClassLoader classLoader,
                                 boolean checkParent)
        Check if plugin is initialized in classLoader.
        Parameters:
        pluginClass - type of the plugin
        classLoader - classloader of the plugin
        checkParent - for parent classloaders as well?
        Returns:
        true/false
      • doHasPlugin

        public boolean doHasPlugin​(Class<?> pluginClass,
                                   ClassLoader classLoader,
                                   boolean checkParent,
                                   boolean createIfMissing)
      • getAppClassLoader

        public ClassLoader getAppClassLoader​(Object plugin)
        Search for the plugin in the registry and return associated classloader.
        Parameters:
        plugin - existing plugin
        Returns:
        the classloader this plugin is associated with
      • instantiate

        protected Object instantiate​(Class<Object> plugin)
        Create a new instance of the plugin.
        Parameters:
        plugin - plugin class
        Returns:
        new instance or null if instantiation fail.
      • closeClassLoader

        public void closeClassLoader​(ClassLoader classLoader)
        Remove all registered plugins for a classloader.
        Parameters:
        classLoader - classloader to cleanup