[jboss-cvs] jboss-profiler/java/src/expansion/org/jboss/profiler/exp/agent/interceptor ...
Takuro Okada
t2-okada at nri.co.jp
Tue Nov 21 01:21:44 EST 2006
User: tokada
Date: 06/11/21 01:21:44
Modified: java/src/expansion/org/jboss/profiler/exp/agent/interceptor
Tag: JBossProfiler_Expansion
ServletInterceptor.java JdbcInterceptor.java
DriverWrapper.java
Log:
Corrected some bugs.
Revision Changes Path
No revision
No revision
1.1.2.3 +13 -15 jboss-profiler/java/src/expansion/org/jboss/profiler/exp/agent/interceptor/Attic/ServletInterceptor.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ServletInterceptor.java
===================================================================
RCS file: /cvsroot/jboss/jboss-profiler/java/src/expansion/org/jboss/profiler/exp/agent/interceptor/Attic/ServletInterceptor.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -b -r1.1.2.2 -r1.1.2.3
--- ServletInterceptor.java 10 Nov 2006 09:13:11 -0000 1.1.2.2
+++ ServletInterceptor.java 21 Nov 2006 06:21:44 -0000 1.1.2.3
@@ -141,25 +141,19 @@
filterChain.doFilter(servletRequest, servletResponse);
if(operationName!=null) {
factory.updateCollector(collector);
-// long threadId = Thread.currentThread().getId();
if(async) {
- asyncExecutor.execute(new InvocationSubmissionWrapper(collector, servletRequest, threadId));
+ asyncExecutor.execute(new InvocationSubmissionWrapper(collector, retrieveParameter(servletRequest), threadId));
} else {
- processCollection(collector, servletRequest, threadId);
+ processCollection(collector, retrieveParameter(servletRequest), threadId);
}
}
}
- private void processCollection(MetricCollector collector, ServletRequest servletRequest, long threadId) {
+ private String retrieveParameter(ServletRequest servletRequest) {
String parameterExpression = null;
if(servletRequest instanceof HttpServletRequest) {
HttpServletRequest request = (HttpServletRequest)servletRequest;
- Map parameterMap = null;
- try {
- parameterMap = request.getParameterMap();
- } catch (Throwable e) {
- // Copes with tomcat implementation...
- }
+ Map parameterMap = request.getParameterMap();
if(parameterMap!=null && parameterMap.size()>0) {
StringBuilder sb = new StringBuilder();
for(Object me : parameterMap.entrySet()) {
@@ -176,7 +170,11 @@
parameterExpression = sb.toString();
}
}
- collector.setArguments(new Object[]{threadId, null, parameterExpression});
+ return parameterExpression;
+ }
+
+ private void processCollection(MetricCollector collector, String parameters, long threadId) {
+ collector.setArguments(new Object[]{threadId, null, parameters});
try {
factory.submitCollector(collector);
} catch (Exception e) {
@@ -186,17 +184,17 @@
private class InvocationSubmissionWrapper extends Thread {
private MetricCollector collector = null;
- private ServletRequest servletRequest = null;
+ String parameters = null;
private long threadId = 0L;
- public InvocationSubmissionWrapper(MetricCollector collector, ServletRequest servletRequest, long threadId) {
+ public InvocationSubmissionWrapper(MetricCollector collector, String parameters, long threadId) {
this.collector = collector;
- this.servletRequest = servletRequest;
+ this.parameters = parameters;
this.threadId = threadId;
}
public void run() {
- processCollection(collector, servletRequest, threadId);
+ processCollection(collector, parameters, threadId);
}
}
1.1.2.3 +36 -65 jboss-profiler/java/src/expansion/org/jboss/profiler/exp/agent/interceptor/Attic/JdbcInterceptor.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: JdbcInterceptor.java
===================================================================
RCS file: /cvsroot/jboss/jboss-profiler/java/src/expansion/org/jboss/profiler/exp/agent/interceptor/Attic/JdbcInterceptor.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -b -r1.1.2.2 -r1.1.2.3
--- JdbcInterceptor.java 10 Nov 2006 09:13:11 -0000 1.1.2.2
+++ JdbcInterceptor.java 21 Nov 2006 06:21:44 -0000 1.1.2.3
@@ -25,23 +25,6 @@
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
-import java.sql.Array;
-import java.sql.Blob;
-import java.sql.CallableStatement;
-import java.sql.Clob;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.ParameterMetaData;
-import java.sql.PreparedStatement;
-import java.sql.Ref;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLData;
-import java.sql.SQLInput;
-import java.sql.SQLOutput;
-import java.sql.Savepoint;
-import java.sql.Statement;
-import java.sql.Struct;
import org.jboss.profiler.exp.agent.collector.MetricCollector;
@@ -70,69 +53,57 @@
* @param parent
* @return
*/
- public static Object getInstance(Object jdbcObject, DriverWrapper parent) {
+ public static Object getInstance(Class jdbcInterface, Object jdbcObject, DriverWrapper parent) {
return Proxy.newProxyInstance(jdbcObject.getClass().getClassLoader(),
- detectImmediateInterface(jdbcObject.getClass()),
+ new Class[]{jdbcInterface},
new JdbcInterceptor(jdbcObject, parent));
}
- private static Class[] detectImmediateInterface(Class clazz) {
- Class[] interfaces = clazz.getInterfaces();
- if(interfaces.length==0) {
- Class sc = clazz.getSuperclass();
- if(sc!=null) interfaces = detectImmediateInterface(sc);
- }
- return interfaces;
- }
-
/**
* Run profiling by the method invocation.
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- boolean profilable = false;
+ MetricCollector collector = parent.beforeInvoke();
- StringBuilder sb = new StringBuilder();
- sb.append(method.getDeclaringClass().getCanonicalName());
- sb.append(".");
- sb.append(method.getName());
- String methodExpression = sb.toString();
+ Object retVal = method.invoke(jdbcObject, args);
- for(String filter : parent.getFilters()) {
- if(methodExpression.contains(filter)) {
- profilable = true;
- break;
+ // Creates new proxy for the return value if the return value is JDBC classes.
+ if(retVal!=null) {
+ Class retValInterface = detectImmediateInterface(retVal.getClass());
+ if(retValInterface!=null && filter(retValInterface.getName())) {
+ retVal = getInstance(retValInterface, retVal, parent);
}
}
- MetricCollector collector = null;
- if(profilable) collector = parent.beforeInvoke();
+ parent.afterInvoke(collector, method, args);
- Object retVal = method.invoke(jdbcObject, args);
-
- if( retVal instanceof ResultSet ||
- retVal instanceof Statement ||
- retVal instanceof PreparedStatement ||
- retVal instanceof CallableStatement ||
- retVal instanceof Connection ||
- retVal instanceof Array ||
- retVal instanceof Blob ||
- retVal instanceof Clob ||
- retVal instanceof Ref ||
- retVal instanceof DatabaseMetaData ||
- retVal instanceof ParameterMetaData ||
- retVal instanceof ResultSetMetaData ||
- retVal instanceof Savepoint ||
- retVal instanceof SQLData ||
- retVal instanceof SQLInput ||
- retVal instanceof SQLOutput ||
- retVal instanceof Struct
- ) {
- retVal = getInstance(retVal, parent);
+ return retVal;
}
- if(collector!=null) parent.afterInvoke(collector, method, args);
+ private Class detectImmediateInterface(Class clazz) {
+ Class detectedInterface = null;
+ Class[] interfaces = clazz.getInterfaces();
+ if(interfaces.length>0) {
+ for(Class i : interfaces) {
+ if(i.getName().contains("java.sql")) detectedInterface = i;
+ }
+ }
+ if(detectedInterface==null) {
+ Class sc = clazz.getSuperclass();
+ if(sc!=null) detectedInterface = detectImmediateInterface(sc);
+ }
+ return detectedInterface;
+ }
- return retVal;
+ private boolean filter(String classExpression) {
+ boolean isTarget = false;
+ for(String filter : parent.getFilters()) {
+ if(classExpression.contains(filter)) {
+ isTarget = true;
+ break;
+ }
+ }
+ return isTarget;
}
}
1.1.2.4 +3 -3 jboss-profiler/java/src/expansion/org/jboss/profiler/exp/agent/interceptor/Attic/DriverWrapper.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: DriverWrapper.java
===================================================================
RCS file: /cvsroot/jboss/jboss-profiler/java/src/expansion/org/jboss/profiler/exp/agent/interceptor/Attic/DriverWrapper.java,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -b -r1.1.2.3 -r1.1.2.4
--- DriverWrapper.java 13 Nov 2006 07:11:03 -0000 1.1.2.3
+++ DriverWrapper.java 21 Nov 2006 06:21:44 -0000 1.1.2.4
@@ -128,7 +128,8 @@
}
Connection connection = driver.connect(url, info);
- retVal = (Connection)JdbcInterceptor.getInstance(connection, this);
+ retVal = (Connection)JdbcInterceptor.getInstance(Connection.class, connection, this);
+
return retVal;
}
@@ -175,7 +176,6 @@
*/
void afterInvoke(MetricCollector collector, Method method, Object[] args) {
factory.updateCollector(collector);
-// long threadId = Thread.currentThread().getId();
long threadId = RequestSequence.get();
if(async) {
asyncExecutor.execute(new InvocationSubmissionWrapper(collector, threadId, method, args));
More information about the jboss-cvs-commits
mailing list