/**
  * Connections freed event
  *
  * @param poolName
  * @param count number of connections freed to the pool
  */
 @ProbeListener(JDBC_PROBE_LISTENER + "connectionsFreedEvent")
 public void connectionsFreedEvent(
     @ProbeParam("poolName") String poolName,
     @ProbeParam("appName") String appName,
     @ProbeParam("moduleName") String moduleName,
     @ProbeParam("count") int count) {
   // handle the connections freed event
   PoolInfo poolInfo = new PoolInfo(poolName, appName, moduleName);
   if (this.poolInfo.equals(poolInfo)) {
     if (logger.isLoggable(Level.FINEST)) {
       logger.finest("Connections Freed event received - poolName = " + poolName);
       logger.finest(
           "numConnUsed ="
               + numConnUsed.getCurrent()
               + " numConnFree="
               + numConnFree.getCurrent()
               + " Number of connections freed ="
               + count);
     }
     // set numConnFree to the count value
     synchronized (numConnFree) {
       numConnFree.setCurrent(count);
     }
   }
 }
 /**
  * Connection used event
  *
  * @param poolName
  */
 @ProbeListener(JDBC_PROBE_LISTENER + "connectionUsedEvent")
 public void connectionUsedEvent(
     @ProbeParam("poolName") String poolName,
     @ProbeParam("appName") String appName,
     @ProbeParam("moduleName") String moduleName) {
   // handle the connection used event
   PoolInfo poolInfo = new PoolInfo(poolName, appName, moduleName);
   if (this.poolInfo.equals(poolInfo)) {
     if (logger.isLoggable(Level.FINEST)) {
       logger.finest("Connection Used event received - poolName = " + poolName);
     }
     // increment numConnUsed
     synchronized (numConnUsed) {
       numConnUsed.setCurrent(numConnUsed.getCurrent() + 1);
     }
   }
 }
 /**
  * Decrement numconnfree event
  *
  * @param poolName
  * @param steadyPoolSize
  */
 @ProbeListener(JDBC_PROBE_LISTENER + "decrementNumConnFreeEvent")
 public void decrementNumConnFreeEvent(
     @ProbeParam("poolName") String poolName,
     @ProbeParam("appName") String appName,
     @ProbeParam("moduleName") String moduleName) {
   // handle the num conn free decrement event
   PoolInfo poolInfo = new PoolInfo(poolName, appName, moduleName);
   if (this.poolInfo.equals(poolInfo)) {
     if (logger.isLoggable(Level.FINEST)) {
       logger.finest("Decrement Num Connections Free event received - poolName = " + poolName);
     }
     // Decrement counter
     synchronized (numConnFree) {
       numConnFree.setCurrent(numConnFree.getCurrent() - 1);
     }
   }
 }
  /**
   * Increment numconnfree event
   *
   * @param poolName
   * @param steadyPoolSize
   */
  @ProbeListener(JDBC_PROBE_LISTENER + "incrementNumConnFreeEvent")
  public void incrementNumConnFreeEvent(
      @ProbeParam("poolName") String poolName,
      @ProbeParam("appName") String appName,
      @ProbeParam("moduleName") String moduleName,
      @ProbeParam("beingDestroyed") boolean beingDestroyed,
      @ProbeParam("steadyPoolSize") int steadyPoolSize) {
    // handle the num conn free increment event

    PoolInfo poolInfo = new PoolInfo(poolName, appName, moduleName);
    if (this.poolInfo.equals(poolInfo)) {
      if (logger.isLoggable(Level.FINEST)) {
        logger.finest("Increment Num Connections Free event received - poolName = " + poolName);
      }
      if (beingDestroyed) {
        // if pruned by resizer thread
        synchronized (numConnFree) {
          synchronized (numConnUsed) {
            if (numConnFree.getCurrent() + numConnUsed.getCurrent() < steadyPoolSize) {
              numConnFree.setCurrent(numConnFree.getCurrent() + 1);
            }
          }
        }
      } else {
        synchronized (numConnFree) {
          numConnFree.setCurrent(numConnFree.getCurrent() + 1);
        }
      }
    }
  }
 /**
  * Reset pool statistics. When annotated with @Reset, this method is invoked whenever monitoring
  * is turned to HIGH from OFF, thereby setting the statistics to appropriate values.
  */
 @Reset
 public void reset() {
   if (logger.isLoggable(Level.FINEST)) {
     logger.finest("Reset event received - poolInfo = " + poolInfo);
   }
   PoolStatus status = ConnectorRuntime.getRuntime().getPoolManager().getPoolStatus(poolInfo);
   numConnUsed.setCurrent(status.getNumConnUsed());
   numConnFree.setCurrent(status.getNumConnFree());
   numConnCreated.reset();
   numConnDestroyed.reset();
   numConnFailedValidation.reset();
   numConnTimedOut.reset();
   numConnAcquired.reset();
   numConnReleased.reset();
   connRequestWaitTime.reset();
   numConnSuccessfullyMatched.reset();
   numConnNotSuccessfullyMatched.reset();
   numPotentialConnLeak.reset();
   averageConnWaitTime.reset();
   totalConnRequestWaitTime.reset();
   waitQueueLength.reset();
 }
  /**
   * Event that a connection request is served in timeTakenInMillis.
   *
   * @param poolName
   * @param timeTakenInMillis
   */
  @ProbeListener(JDBC_PROBE_LISTENER + "connectionRequestServedEvent")
  public void connectionRequestServedEvent(
      @ProbeParam("poolName") String poolName,
      @ProbeParam("appName") String appName,
      @ProbeParam("moduleName") String moduleName,
      @ProbeParam("timeTakenInMillis") long timeTakenInMillis) {

    PoolInfo poolInfo = new PoolInfo(poolName, appName, moduleName);
    if (this.poolInfo.equals(poolInfo)) {
      if (logger.isLoggable(Level.FINEST)) {
        logger.finest("Connection request served event received - " + "poolName = " + poolName);
      }
      connRequestWaitTime.setCurrent(timeTakenInMillis);
      totalConnRequestWaitTime.increment(timeTakenInMillis);
    }
  }