Subscribe

RSS Feed (xml)

Powered By

Skin Design:
Free Blogger Skins

Powered by Blogger

Thursday, November 22, 2007

java code for Profiling

/*
Pro Spring
By Rob Harrop
Jan Machacek
ISBN: 1-59059-461-4
Publisher: Apress
*/



///////////////////////////////////////////////////////////////////////////////////////
public class WorkerBean {

public void doSomeWork(int noOfTimes) {
for(int x = 0; x < noOfTimes; x++) {
work();
}
}

private void work() {
System.out.print("");
}
}


///////////////////////////////////////////////////////////////////////////////////////

import java.lang.reflect.Method;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.util.StopWatch;

public class ProfilingInterceptor implements MethodInterceptor {

public Object invoke(MethodInvocation invocation) throws Throwable {
// start the stop watch
StopWatch sw = new StopWatch();
sw.start(invocation.getMethod().getName());

Object returnValue = invocation.proceed();

sw.stop();
dumpInfo(invocation, sw.getTotalTimeMillis());
return returnValue;
}

private void dumpInfo(MethodInvocation invocation, long ms) {
Method m = invocation.getMethod();
Object target = invocation.getThis();
Object[] args = invocation.getArguments();

System.out.println("Executed method: " + m.getName());
System.out.println("On object of type: " + target.getClass().getName());

System.out.println("With arguments:");
for (int x = 0; x < args.length; x++) {
System.out.print(" > " + args[x]);
}
System.out.print("\n");

System.out.println("Took: " + ms + " ms");
}

}
///////////////////////////////////////////////////////////////////////////////////////

import org.springframework.aop.framework.ProxyFactory;

public class ProfilingExample {

public static void main(String[] args) {
WorkerBean bean = getWorkerBean();
bean.doSomeWork(10000000);
}

private static WorkerBean getWorkerBean() {
WorkerBean target = new WorkerBean();

ProxyFactory factory = new ProxyFactory();
factory.setTarget(target);
factory.addAdvice(new ProfilingInterceptor());

return (WorkerBean)factory.getProxy();
}
}

No comments: