package org.hotswap.agent.plugin.glassfish;
import org.hotswap.agent.annotation.OnClassLoadEvent;
import org.hotswap.agent.javassist.CannotCompileException;
import org.hotswap.agent.javassist.ClassPool;
import org.hotswap.agent.javassist.CtClass;
import org.hotswap.agent.javassist.NotFoundException;
import org.hotswap.agent.logging.AgentLogger;
public class WebappClassLoaderTransformer {
protected static AgentLogger LOGGER = AgentLogger.getLogger(WebappClassLoaderTransformer.class);
private static boolean webappClassLoaderPatched = false;
@OnClassLoadEvent(classNameRegexp = "org.glassfish.web.loader.WebappClassLoader")
public static void patchWebappClassLoader(ClassPool classPool,CtClass ctClass) throws CannotCompileException, NotFoundException {
if (!webappClassLoaderPatched) {
try {
// clear classloader cache
ctClass.getDeclaredMethod("getResource", new CtClass[]{classPool.get("java.lang.String")}).insertBefore(
"resourceEntries.clear();"
);
ctClass.getDeclaredMethod("getResourceAsStream", new CtClass[]{classPool.get("java.lang.String")}).insertBefore(
"resourceEntries.clear();"
);
webappClassLoaderPatched = true;
} catch (NotFoundException e) {
LOGGER.trace("WebappClassLoader does not contain getResource(), getResourceAsStream method.");
}
}
}
}