Class PluginManagerInvoker


  • public class PluginManagerInvoker
    extends Object
    Invoke methods on plugin manager, avoid classloader conflicts. Each method has two variants - direct call or method source code builder.

    Note that because methods are invoked accross classloader, only parameters known to both classloaders can be used. This is generally true for basic and java.* types.

    Author:
    Jiri Bubnik
    • Constructor Detail

      • PluginManagerInvoker

        public PluginManagerInvoker()
    • Method Detail

      • callInitializePlugin

        public static <T> T callInitializePlugin​(Class<T> pluginClass,
                                                 ClassLoader appClassLoader)
        Initialize plugin for a classloader.
        Parameters:
        pluginClass - identify plugin instance
        appClassLoader - classloader in which the plugin should reside
      • buildInitializePlugin

        public static String buildInitializePlugin​(Class pluginClass)
      • buildInitializePlugin

        public static String buildInitializePlugin​(Class pluginClass,
                                                   String classLoaderVar)
      • callCloseClassLoader

        public static void callCloseClassLoader​(ClassLoader appClassLoader)
        Free all classloader references and close any associated plugin instance. Typical use is after webapp undeploy.
        Parameters:
        appClassLoader - clasloade to free
      • buildCallCloseClassLoader

        public static String buildCallCloseClassLoader​(String classLoaderVar)
      • callPluginMethod

        public static Object callPluginMethod​(Class pluginClass,
                                              ClassLoader appClassLoader,
                                              String method,
                                              Class[] paramTypes,
                                              Object[] params)
        Methods on plugin should be called via reflection, because the real plugin object is in parent classloader, but plugin class may be defined in app classloader as well introducing ClassCastException on same class name.
        Parameters:
        pluginClass - class name of the plugin - it is used to resolve plugin instance from plugin manager
        appClassLoader - application classloader (to resolve plugin instance)
        method - method name
        paramTypes - param types (as required by reflection)
        params - actual param values
        Returns:
        method return value
      • buildCallPluginMethod

        public static String buildCallPluginMethod​(Class pluginClass,
                                                   String method,
                                                   String... paramValueAndType)
        Equivalent to callPluginMethod for insertion into source code.

        PluginManagerInvoker.buildCallPluginMethod(this, "hibernateInitialized", "getClass().getClassLoader()", "java.lang.ClassLoader")

        Parameters:
        pluginClass - plugin to use
        method - method name
        paramValueAndType - for each param its value AND type must be provided
        Returns:
        method source code