Search in sources :

Example 1 with Plugin

use of org.apache.inlong.manager.workflow.plugin.Plugin in project incubator-inlong by apache.

the class PluginService method pluginReload.

/**
 * Reload the plugin from the plugin path
 */
public void pluginReload() {
    Path path = Paths.get(pluginLoc).toAbsolutePath();
    log.info("search for plugin in {}", path);
    if (!path.toFile().exists()) {
        log.warn("plugin directory not found");
        return;
    }
    PluginClassLoader pluginLoader = PluginClassLoader.getFromPluginUrl(path.toString(), Thread.currentThread().getContextClassLoader());
    Map<String, PluginDefinition> pluginDefinitions = pluginLoader.getPluginDefinitions();
    if (MapUtils.isEmpty(pluginDefinitions)) {
        log.warn("pluginDefinition not found in {}", pluginLoc);
        return;
    }
    List<Plugin> plugins = new ArrayList<>();
    for (PluginDefinition pluginDefinition : pluginDefinitions.values()) {
        String pluginClassName = pluginDefinition.getPluginClass();
        try {
            Class<?> pluginClass = pluginLoader.loadClass(pluginClassName);
            Object plugin = pluginClass.getDeclaredConstructor().newInstance();
            plugins.add((Plugin) plugin);
        } catch (Throwable e) {
            throw new RuntimeException(e.getMessage());
        }
    }
    this.plugins.addAll(plugins);
    for (PluginBinder pluginBinder : pluginBinders) {
        for (Plugin plugin : plugins) {
            log.info(String.format("PluginBinder:%s load Plugin:%s", pluginBinder.getClass().getSimpleName(), plugin.getClass().getSimpleName()));
            pluginBinder.acceptPlugin(plugin);
        }
    }
}
Also used : Path(java.nio.file.Path) PluginBinder(org.apache.inlong.manager.workflow.plugin.PluginBinder) ArrayList(java.util.ArrayList) PluginDefinition(org.apache.inlong.manager.workflow.plugin.PluginDefinition) Plugin(org.apache.inlong.manager.workflow.plugin.Plugin)

Example 2 with Plugin

use of org.apache.inlong.manager.workflow.plugin.Plugin in project incubator-inlong by apache.

the class PluginClassLoaderTest method testLoadPlugin.

@Test
public void testLoadPlugin() {
    String path = this.getClass().getClassLoader().getResource("").getPath();
    PluginClassLoader pluginClassLoader = PluginClassLoader.getFromPluginUrl(path + "plugins", Thread.currentThread().getContextClassLoader());
    Map<String, PluginDefinition> pluginDefinitionMap = pluginClassLoader.getPluginDefinitions();
    Assert.assertEquals(1, pluginDefinitionMap.size());
    PluginDefinition pluginDefinition = Lists.newArrayList(pluginDefinitionMap.values()).get(0);
    Assert.assertNotNull(pluginDefinition);
    String pluginClass = pluginDefinition.getPluginClass();
    Assert.assertTrue(StringUtils.isNotEmpty(pluginClass));
    try {
        Class cls = pluginClassLoader.loadClass(pluginClass);
        Plugin plugin = (Plugin) cls.getDeclaredConstructor().newInstance();
        Assert.assertTrue(plugin instanceof ProcessPlugin);
    } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
        Assert.assertTrue(e instanceof ClassNotFoundException);
        Assert.fail();
    }
}
Also used : InvocationTargetException(java.lang.reflect.InvocationTargetException) PluginDefinition(org.apache.inlong.manager.workflow.plugin.PluginDefinition) ProcessPlugin(org.apache.inlong.manager.workflow.plugin.ProcessPlugin) Plugin(org.apache.inlong.manager.workflow.plugin.Plugin) ProcessPlugin(org.apache.inlong.manager.workflow.plugin.ProcessPlugin) Test(org.junit.Test)

Aggregations

Plugin (org.apache.inlong.manager.workflow.plugin.Plugin)2 PluginDefinition (org.apache.inlong.manager.workflow.plugin.PluginDefinition)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Path (java.nio.file.Path)1 ArrayList (java.util.ArrayList)1 PluginBinder (org.apache.inlong.manager.workflow.plugin.PluginBinder)1 ProcessPlugin (org.apache.inlong.manager.workflow.plugin.ProcessPlugin)1 Test (org.junit.Test)1