package org.skywalking.apm.agent.core.plugin; import org.skywalking.apm.logging.ILog; import org.skywalking.apm.logging.LogManager; import java.net.URL; import java.util.ArrayList; import java.util.List; /** * Plugins finder. * Use {@link PluginResourcesResolver} to find all plugins, * and ask {@link PluginCfg} to load all plugin definitions. * * @author wusheng */ public class PluginBootstrap { private static final ILog logger = LogManager.getLogger(PluginBootstrap.class); /** * load all plugins. * * @return plugin definition list. */ public List loadPlugins() { PluginResourcesResolver resolver = new PluginResourcesResolver(); List resources = resolver.getResources(); if (resources == null || resources.size() == 0) { logger.info("no plugin files (skywalking-plugin.properties) found, continue to start application."); return new ArrayList(); } for (URL pluginUrl : resources) { try { PluginCfg.INSTANCE.load(pluginUrl.openStream()); } catch (Throwable t) { logger.error(t, "plugin [{}] init failure.", pluginUrl); } } List pluginClassList = PluginCfg.INSTANCE.getPluginClassList(); List plugins = new ArrayList(); for (PluginDefine pluginDefine : pluginClassList) { try { logger.debug("loading plugin class {}.", pluginDefine.getDefineClass()); AbstractClassEnhancePluginDefine plugin = (AbstractClassEnhancePluginDefine) Class.forName(pluginDefine.getDefineClass()).newInstance(); plugins.add(plugin); } catch (Throwable t) { logger.error(t, "load plugin [{}] failure.", pluginDefine.getDefineClass()); } } return plugins; } }