package org.test4j.module.tracer.jdbc;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.sql.Statement;
import java.util.HashSet;
import java.util.Set;
import org.test4j.module.tracer.TracerManager;
public class StatementProxy implements InvocationHandler {
private final Statement statement;
public StatementProxy(final Statement statement) {
this.statement = statement;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = method.invoke(this.statement, args);
String methodname = method.getName();
boolean hasArgs = args != null && args.length > 0;
if (SQL_EXECUTE_METHODS.contains(methodname) && hasArgs) {
Object sql = args[0];
if (sql instanceof String) {
TracerManager.traceJdbcStatement((String) sql);
}
}
return result;
}
private final static Set<String> SQL_EXECUTE_METHODS = new HashSet<String>() {
private static final long serialVersionUID = 3331093299449024077L;
{
this.add("executeQuery");
this.add("execute");
this.add("executeUpdate");
}
};
}