package org.hotswap.agent.plugin.tomcat;
import org.hotswap.agent.config.PluginManager;
import org.hotswap.agent.logging.AgentLogger;
import org.hotswap.agent.util.PluginManagerInvoker;
import org.hotswap.agent.util.classloader.WatchResourcesClassLoader;
import sun.reflect.Reflection;
import java.net.URL;
import java.util.Arrays;
/**
* Created by bubnik on 4.6.2014.
*/
public class WatcherTomcatWebappClassLoader extends WatchResourcesClassLoader {
private static AgentLogger LOGGER = AgentLogger.getLogger(WatcherTomcatWebappClassLoader.class);
public WatcherTomcatWebappClassLoader(ClassLoader originalClassLoader) {
super(originalClassLoader);
PluginManagerInvoker.callInitializePlugin(TomcatPlugin.class, originalClassLoader);
//PluginManagerInvoker.callPluginMethod(TomcatPlugin.class, originalClassLoader, "init"
URL[] extraClassPath = (URL[]) PluginManagerInvoker.callPluginMethod(TomcatPlugin.class, originalClassLoader,
"getExtraClassPath", new Class[] {}, new Object[] {});
LOGGER.debug("extraClassPath = {}", extraClassPath);
if (extraClassPath.length > 0) {
LOGGER.debug("Registering extraClasspath {} to classloader {}", extraClassPath, originalClassLoader);
initExtraPath(extraClassPath);
}
URL[] watchResources = (URL[]) PluginManagerInvoker.callPluginMethod(TomcatPlugin.class, originalClassLoader,
"getWatchResources", new Class[] {}, new Object[] {});
System.err.println("watchResources = " + Arrays.toString(watchResources));
LOGGER.debug("watchResources = {}", watchResources);
if (watchResources.length > 0) {
LOGGER.debug("Registering watchResources {} to classloader {}", extraClassPath, originalClassLoader);
initWatchResources(watchResources, PluginManager.getInstance().getWatcher());
}
}
}