Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 3rd, 2012  |  syntax: None  |  size: 1.48 KB  |  hits: 7  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. import static com.sun.btrace.BTraceUtils.*;
  2.  
  3. import java.lang.reflect.Field;
  4.  
  5. import com.sun.btrace.BTraceUtils.Sys;
  6. import com.sun.btrace.annotations.BTrace;
  7. import com.sun.btrace.annotations.OnMethod;
  8. import com.sun.btrace.annotations.Self;
  9.  
  10. @BTrace
  11. public class DbcpMonitor {
  12.  
  13.         private static final String DS_CLASS = "org.apache.commons.dbcp.BasicDataSource";
  14.        
  15.         @OnMethod(clazz = DS_CLASS, method = "getConnection")
  16.         public static void onGetConnection(@Self Object basicDataSource) {
  17.  
  18.                 Class<?> dsClass = classOf(basicDataSource);
  19.                 printTitle(dsClass, basicDataSource);
  20.                 printFields(basicDataSource);
  21.                 printNumberOfActive(basicDataSource, dsClass);
  22.                 println("=======================================");
  23.                 Sys.exit(0);
  24.         }
  25.  
  26.         private static void printTitle(Class<?> dsClass, Object basicDataSource) {
  27.                 Field urlField = field(dsClass, "url");
  28.                 Object url = get(urlField, basicDataSource);
  29.                 print("=====DBCP BasicDataSource info (");
  30.                 print(url);
  31.                 println(" ) ========");
  32.         }
  33.  
  34.         private static void printNumberOfActive(Object basicDataSource, Class<?> dsClass) {
  35.                 Field poolField = field(dsClass, "connectionPool");
  36.                 Object numActive = getNumActive(basicDataSource, poolField);
  37.                 println(concat("===== number of Active : ", str(numActive)));
  38.         }
  39.  
  40.         private static Object getNumActive(Object basicDataSource, Field poolField) {
  41.                 Object pool = get(poolField, basicDataSource);
  42.                 Field numActiveField = field(classOf(pool), "_numActive");
  43.                 Object numActive = get(numActiveField, pool);
  44.                 return numActive;
  45.         }
  46.  
  47. }