예제 #1
0
  /**
   * Helper method for handling concurrent throttling
   *
   * @param concurrentAccessController ConcurrentAccessController
   * @param messageContext MessageContext - message level states
   * @return true if access is allowed through concurrent throttling ,o.w false
   */
  private boolean doConcurrentThrottling(
      ConcurrentAccessController concurrentAccessController, MessageContext messageContext) {

    boolean canAccess = true;
    int available;

    if (concurrentAccessController != null) {
      if (messageContext.getFLOW() == MessageContext.IN_FLOW) {
        available = concurrentAccessController.getAndDecrement();
        canAccess = available > 0;
        if (debugOn) {
          log.debug(
              "Concurrency Throttle : Access "
                  + (canAccess ? "allowed" : "denied")
                  + " :: "
                  + available
                  + " of available of "
                  + concurrentAccessController.getLimit()
                  + " connections");
        }
        if (debugOn) {
          if (!canAccess) {
            log.debug(
                "Concurrency Throttle : Access has currently been denied since allowed"
                    + " maximum concurrent access have exceeded");
          }
        }
      } else if (messageContext.getFLOW() == MessageContext.OUT_FLOW) {
        available = concurrentAccessController.incrementAndGet();
        if (debugOn) {
          log.debug(
              "Concurrency Throttle : Connection returned"
                  + " :: "
                  + available
                  + " of available of "
                  + concurrentAccessController.getLimit()
                  + " connections");
        }
      }
    }
    return canAccess;
  }