[유치수] [NOBTS] add spring servlet modifier

git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@1066 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
Chisu Yu
2012-12-27 09:36:45 +00:00
parent 895aec01ef
commit 939610042e
5 changed files with 303 additions and 7 deletions
@@ -0,0 +1,56 @@
package com.profiler.modifier.servlet;
import java.security.ProtectionDomain;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.profiler.Agent;
import com.profiler.interceptor.Interceptor;
import com.profiler.interceptor.bci.ByteCodeInstrumentor;
import com.profiler.interceptor.bci.InstrumentClass;
import com.profiler.interceptor.bci.InstrumentException;
import com.profiler.modifier.AbstractModifier;
/**
*
* @author netspider
*
*/
public class SpringFrameworkServletModifier extends AbstractModifier {
private final Logger logger = Logger.getLogger(SpringFrameworkServletModifier.class.getName());
public SpringFrameworkServletModifier(ByteCodeInstrumentor byteCodeInstrumentor, Agent agent) {
super(byteCodeInstrumentor, agent);
}
public String getTargetClass() {
return "org/springframework/web/servlet/FrameworkServlet";
}
public byte[] modify(ClassLoader classLoader, String javassistClassName, ProtectionDomain protectedDomain, byte[] classFileBuffer) {
if (logger.isLoggable(Level.INFO)) {
logger.info("Modifing. " + javassistClassName);
}
byteCodeInstrumentor.checkLibrary(classLoader, javassistClassName);
try {
Interceptor doGetInterceptor = byteCodeInstrumentor.newInterceptor(classLoader, protectedDomain, "com.profiler.modifier.servlet.interceptors.DoXXXInterceptor");
Interceptor doPostInterceptor = byteCodeInstrumentor.newInterceptor(classLoader, protectedDomain, "com.profiler.modifier.servlet.interceptors.DoXXXInterceptor");
setTraceContext(doGetInterceptor);
setTraceContext(doPostInterceptor);
InstrumentClass servlet = byteCodeInstrumentor.getClass(javassistClassName);
servlet.addInterceptor("doGet", new String[] { "javax.servlet.http.HttpServletRequest", "javax.servlet.http.HttpServletResponse" }, doGetInterceptor);
servlet.addInterceptor("doPost", new String[] { "javax.servlet.http.HttpServletRequest", "javax.servlet.http.HttpServletResponse" }, doPostInterceptor);
return servlet.toBytecode();
} catch (InstrumentException e) {
logger.log(Level.WARNING, "modify fail. Cause:" + e.getMessage(), e);
return null;
}
}
}