[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