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 javax.naming.directory.DirContext; import java.io.File; import java.lang.reflect.Method; import java.net.URISyntaxException; import java.net.URL; import java.util.Arrays; /** * Created by bubnik on 5.6.2014. */ public class TomcatSetup { private static AgentLogger LOGGER = AgentLogger.getLogger(TomcatSetup.class); public TomcatSetup(ClassLoader originalClassLoader) { System.err.println("PluginManagerInstance = " + PluginManager.getInstance()); PluginManagerInvoker.callInitializePlugin(TomcatPlugin.class, originalClassLoader); //PluginManagerInvoker.callPluginMethod(TomcatPlugin.class, originalClassLoader, "init" URL[] extraClassPath = (URL[]) PluginManagerInvoker.callPluginMethod(TomcatPlugin.class, originalClassLoader, "getExtraClassPath", new Class[] {}, new Object[] {}); System.err.println("extraClassPath = " + Arrays.toString(extraClassPath)); LOGGER.debug("extraClassPath = {}", extraClassPath); if (extraClassPath.length > 0) { LOGGER.debug("Registering extraClasspath {} to classloader {}", extraClassPath, originalClassLoader); for (URL url : extraClassPath) { // classLoader.addRepository(classesPath + "/", classRepository); try { File classRepository = new File(url.toURI()); Method m = originalClassLoader.getClass().getDeclaredMethod("addRepository", String.class, File.class); m.setAccessible(true); m.invoke(originalClassLoader, classRepository.getAbsolutePath() + "/", classRepository); } catch (Exception e) { throw new Error(e); } } } } }