code: public Object invoke(MethodInvocation invocation) throws Throwable {
  		ProxyMethodInvocation proxyMethodInvocation = (ProxyMethodInvocation) invocation;
  		TargetMetaDef targetMetaDef = targetMetaRequestsHolder.getTargetMetaRequest().getTargetMetaDef();
  		if (targetMetaDef.isEJB())
  			return invocation.proceed();
  
  		if (!isPoolabe(targetMetaDef)) {
  			// Debug.logVerbose("[JdonFramework] target service is not Poolable: "
  			// + targetMetaDef.getClassName() + " pool unactiive", module);
  			return invocation.proceed(); // 下一个interceptor
  		}
  		Debug.logVerbose("[JdonFramework] enter PoolInterceptor", module);
  		CommonsPoolFactory commonsPoolFactory = getCommonsPoolFactoryCache(targetMetaDef);
  
  		Pool pool = commonsPoolFactory.getPool();
  		Object poa = null;
  		Object result = null;
  		try {
  			poa = pool.acquirePoolable();
  			Debug.logVerbose("[JdonFramework] borrow a object:" + targetMetaDef.getClassName() + " id:" + poa.hashCode() + " from pool", module);
  			Debug.logVerbose("[JdonFramework]pool state: active=" + pool.getNumActive() + " free=" + pool.getNumIdle(), module);
  
  			// set the object that borrowed from pool to MethodInvocation
  			// so later other Interceptors or MethodInvocation can use it!
  			proxyMethodInvocation.setThis(poa);
  			result = invocation.proceed();
  		} catch (Exception ex) {
  			Debug.logError(ex, module);
  		} finally {
  			if (poa != null) {
  				pool.releasePoolable(poa);
  				Debug.logVerbose("[JdonFramework] realease a object:" + targetMetaDef.getClassName() + " to pool", module);
  			}
  		}
  		return result;
  	}
docs: /*
  (non-Javadoc)
  
  @see
  org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept
  .MethodInvocation)