Logging in DBCP

前端 未结 4 765
刺人心
刺人心 2021-02-07 13:59

I\'m using Apache Commons DBCP. There is a task to track the inner behavior of the DBCP - number of active and idle connections.

I found out that DBCP lacks any such lo

4条回答
  •  無奈伤痛
    2021-02-07 14:24

    I think aspects may be the solution to your quandry. Check out:

    • http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html#aop-introduction-spring-defn
    • http://www.ibm.com/developerworks/java/library/j-ajdt/
    • http://www.eclipse.org/aspectj/doc/released/progguide/index.html

    Basically, you can write an aspect or two that will "latch onto" the execution of some methods inside DBCP.

    Something like:

    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.ProceedingJoinPoint;
    
    @Aspect
    public class AroundExample {
    
      @Around("org.apache.commons.dbcp.PoolingDataSource.getConnection()")
      public Object doBasicPStuff(ProceedingJoinPoint pjp) throws Throwable {
        // write code to do what you want
        final PoolingDataSource ds = (PoolingDataSource) pjp.getThis();
        // log whatever you want
    
        // let it finish
        Object retVal = pjp.proceed();
        // stop stopwatch
        return retVal;
      }
    
    }
    

    That's just a tiny example. Aspects are really powerful and there's a bunch of different ways to do what you want. The code depends on whether you're using Spring or not, and what exactly you wanna log.

    P.S. I haven't tested the above code.

提交回复
热议问题