Package org.hotswap.agent.config
Class PluginRegistry
- java.lang.Object
-
- org.hotswap.agent.config.PluginRegistry
-
public class PluginRegistry extends Object
Registry to support plugin manager.- Author:
- Jiri Bubnik
-
-
Field Summary
Fields Modifier and Type Field Description protected AnnotationProcessorannotationProcessorprotected Map<Class,Map<ClassLoader,Object>>registeredPlugins
-
Constructor Summary
Constructors Constructor Description PluginRegistry(PluginManager pluginManager, ClassLoaderDefineClassPatcher classLoaderPatcher)Create an instanec of plugin registry and initialize scanner and processor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcloseClassLoader(ClassLoader classLoader)Remove all registered plugins for a classloader.booleandoHasPlugin(Class<?> pluginClass, ClassLoader classLoader, boolean checkParent, boolean createIfMissing)ClassLoadergetAppClassLoader(Object plugin)Search for the plugin in the registry and return associated classloader.<T> TgetPlugin(Class<T> pluginClass, ClassLoader classLoader)Returns plugin instance by it's type and classLoader.protected Class<Object>getPluginClass(String pluginClass)Map<Class,Map<ClassLoader,Object>>getRegisteredPlugins()Returns map of all registered plugins.booleanhasPlugin(Class<?> pluginClass, ClassLoader classLoader, boolean checkParent)Check if plugin is initialized in classLoader.ObjectinitializePlugin(String pluginClass, ClassLoader appClassLoader)Init a plugin (create new plugin instance) in a application classloader.voidinitializePluginInstance(Object pluginInstance)protected Objectinstantiate(Class<Object> plugin)Create a new instance of the plugin.voidscanPlugins(ClassLoader classLoader, String pluginPackage)Scan for plugins by @Plugin annotation on PLUGIN_PATH and process plugin annotations.voidsetAnnotationProcessor(AnnotationProcessor annotationProcessor)voidsetAnnotationScanner(ClassPathAnnotationScanner annotationScanner)voidsetClassLoaderPatcher(ClassLoaderDefineClassPatcher classLoaderPatcher)
-
-
-
Field Detail
-
registeredPlugins
protected Map<Class,Map<ClassLoader,Object>> registeredPlugins
-
annotationProcessor
protected AnnotationProcessor annotationProcessor
-
-
Constructor Detail
-
PluginRegistry
public PluginRegistry(PluginManager pluginManager, ClassLoaderDefineClassPatcher classLoaderPatcher)
Create an instanec of plugin registry and initialize scanner and processor.
-
-
Method Detail
-
getRegisteredPlugins
public Map<Class,Map<ClassLoader,Object>> getRegisteredPlugins()
Returns map of all registered plugins.- Returns:
- map plugin class -> Map (ClassLoader -> Plugin instance)
-
setAnnotationScanner
public void setAnnotationScanner(ClassPathAnnotationScanner annotationScanner)
-
setAnnotationProcessor
public void setAnnotationProcessor(AnnotationProcessor annotationProcessor)
-
setClassLoaderPatcher
public void setClassLoaderPatcher(ClassLoaderDefineClassPatcher classLoaderPatcher)
-
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 instantiateappClassLoader- 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 pluginclassLoader- 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 pluginclassLoader- classloader of the plugincheckParent- 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
-
-