PluginBootstrap.java 2.0 KB
Newer Older
1
package org.skywalking.apm.agent.core.plugin;
2

P
pengys5 已提交
3 4
import org.skywalking.apm.logging.ILog;
import org.skywalking.apm.logging.LogManager;
5

6
import java.net.URL;
7
import java.util.ArrayList;
8
import java.util.List;
9

10 11 12 13 14 15 16
/**
 * Plugins finder.
 * Use {@link PluginResourcesResolver} to find all plugins,
 * and ask {@link PluginCfg} to load all plugin definitions.
 *
 * @author wusheng
 */
17
public class PluginBootstrap {
18
    private static final ILog logger = LogManager.getLogger(PluginBootstrap.class);
19

20 21
    /**
     * load all plugins.
22
     *
23 24
     * @return plugin definition list.
     */
25
    public List<AbstractClassEnhancePluginDefine> loadPlugins() {
26 27 28 29
        PluginResourcesResolver resolver = new PluginResourcesResolver();
        List<URL> resources = resolver.getResources();

        if (resources == null || resources.size() == 0) {
30
            logger.info("no plugin files (skywalking-plugin.properties) found, continue to start application.");
31
            return new ArrayList<AbstractClassEnhancePluginDefine>();
32 33 34 35
        }

        for (URL pluginUrl : resources) {
            try {
wu-sheng's avatar
wu-sheng 已提交
36
                PluginCfg.INSTANCE.load(pluginUrl.openStream());
37
            } catch (Throwable t) {
38
                logger.error(t, "plugin [{}] init failure.", pluginUrl);
39 40 41
            }
        }

42
        List<PluginDefine> pluginClassList = PluginCfg.INSTANCE.getPluginClassList();
43

44
        List<AbstractClassEnhancePluginDefine> plugins = new ArrayList<AbstractClassEnhancePluginDefine>();
45
        for (PluginDefine pluginDefine : pluginClassList) {
46
            try {
47
                logger.debug("loading plugin class {}.", pluginDefine.getDefineClass());
48
                AbstractClassEnhancePluginDefine plugin =
49
                    (AbstractClassEnhancePluginDefine) Class.forName(pluginDefine.getDefineClass()).newInstance();
50
                plugins.add(plugin);
51
            } catch (Throwable t) {
52
                logger.error(t, "load plugin [{}] failure.", pluginDefine.getDefineClass());
53 54
            }
        }
55

56 57
        return plugins;

58
    }
59

60
}