package org.hotswap.agent.plugin.owb; 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.CtMethod; import org.hotswap.agent.javassist.NotFoundException; import org.hotswap.agent.logging.AgentLogger; import org.hotswap.agent.util.PluginManagerInvoker; /** * Hook into org.apache.webbeans.config.BeansDeployer deploy to initialize OwbPlugin * * @author Vladimir Dvorak */ public class BeansDeployerTransformer { private static AgentLogger LOGGER = AgentLogger.getLogger(BeansDeployerTransformer.class); /** * Basic CdiArchive transformation. * * @param clazz * @param classPool * @throws NotFoundException * @throws CannotCompileException */ @OnClassLoadEvent(classNameRegexp = "org.apache.webbeans.config.BeansDeployer") public static void transform(CtClass clazz, ClassPool classPool) throws NotFoundException, CannotCompileException { StringBuilder src = new StringBuilder(" if (deployed) {"); src.append("ClassLoader curCl = Thread.currentThread().getContextClassLoader();"); src.append(PluginManagerInvoker.buildInitializePlugin(OwbPlugin.class, "curCl")); src.append(PluginManagerInvoker.buildCallPluginMethod("curCl", OwbPlugin.class, "init")); src.append(PluginManagerInvoker.buildCallPluginMethod("curCl", OwbPlugin.class, "registerBeansXmls", "$1.getBeanXmls()", "java.util.Set")); src.append("}"); CtMethod startApplication = clazz.getDeclaredMethod("deploy"); startApplication.insertAfter(src.toString()); LOGGER.debug("Class '{}' patched with OwbPlugin registration.", clazz.getName()); } }