지금 뭐 하나 만들고 있습니다. 좀 걸출한 녀석이 나왔으면 하는 바램입니다.
그 중 HttpServlet 인터셉터 골격 코드입니다.

Bytecode를 load time(runtime)에 조작하여 클래스 로더에 올라와 있는 동안 HttpServlet을 hooking하여 각 요청에 대한 처리시간 및 동시 사용자수, cpu사용률 등을 구합니다.


Source Code

@Aspect
public class HttpServletInterceptor implements Interceptor {
    Logger log = LogManager.getLogger(HttpServletInterceptor.class);
    private HttpServletRequest request;
    private HttpServletResponse response;
    
    public String getName() {
        return "HttpServlet Monitor Interceptor";
    }
    
    /**
     * The interception point.
     * @param inv The method invocation.
     * @return The return of the invoked method.
     * @throws Throwable
     */
    
    @Override
    public Object invoke(Invocation inv) throws Throwable {
        MethodInvocation mi = (MethodInvocation) inv;
        Object [] args = mi.getArguments();
        for( Object obj : args) {
            if( obj instanceof HttpServletRequest) {
                request = (HttpServletRequest) obj;
                // do something here
            } else if( obj instanceof HttpServletResponse) {
                response = (HttpServletResponse) obj;
                // do something here
            }
        }
        Method method = mi.getMethod();
        
        long start = 0L;
    
        // if you want use class or method level
        String className = method.getDeclaringClass().getName();
        String methodName = method.getName();
        try {
            start = System.currentTimeMillis();
            return inv.invokeNext();
        } finally {
            log.info(request.getRequestURL() + " elapsed time : " + (System.currentTimeMillis() - start)/1000.0 + "s");
        }            
    }
} 


Configuration File
<?xml version="1.0" encoding="UTF-8"?>

<aop xmlns="urn:jboss:aop-beans:1.0">     <interceptor class="org.jboss.apm.aop.HttpServletInterceptor" scope="PER_VM"/>     <bind pointcut="execution(public * com.yourcompany.biz.*->*(..))">         <interceptor-ref name="org.jboss.apm.aop.HttpServletInterceptor"/>     </bind>  </aop>




크리에이티브 커먼즈 라이센스
Creative Commons License
2009/11/24 17:52 2009/11/24 17:52
http://www.javapattern.info/trackback/307