docs: void sendCalledFromAsynsSendRunThread(Message message, int SendMethodType, Object[] params, CompletionListener cListener) {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "sendCalledFromAsynsSendRunThread", new Object[] { message, SendMethodType, params, cListener });
  
          try {
              if (SendMethodType == PRODUCER_SEND_WITH_ONLY_MESSAGE) {
                  sendUsingProducerSession(message);
              } else if (SendMethodType == PRODUCER_SEND_MESSAGE_WITH_PARAMETERS) {
                  sendUsingProducerSession(message,
                                           (Integer) params[0], //deliveryMode
                                           (Integer) params[1], //priority
                                           (Long) params[2]);//timeToLive
              } else if (SendMethodType == CONNECTION_SEND_MESSAGE_WITH_PARAMETERS) {
                  sendUsingConnection((Destination) params[3], //destination
                                      message,
                                      (Integer) params[0], //deliveryMode
                                      (Integer) params[1], //priority
                                      (Long) params[2]); //timeToLive
              }
  
              //send method successful.. call onCompletion.
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(tc, "calling onCompletion ",
                              new Object[] { message, cListener, message });
  
              try {
                  //AsyncSend is successfully completed. So remove the restriction on message object ... so that
                  //application can access message object.This we have to do only for SIB messages.
                  if (message instanceof JmsMessageImpl) {
                      ((JmsMessageImpl) message).setAsyncSendInProgress(false);
                  }
  
                  cListener.onCompletion(message);
              } catch (Throwable e) {
                  //Exception in onCompletion method. Should be handled by user. add to trace. 
                  SibTr.debug(tc, "Caught exception in onCompletion method", new Object[] { message, cListener, message, e });
  
              }
  
          } catch (Exception e) {
  
              //exception in send method... call onException and return.
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(tc, "Caught exception in executing send method .. calling onException",
                              new Object[] { message, cListener, message, e });
  
              try {
                  //AsyncSend is successfully completed. So remove the restriction on message object ... so that
                  //application can access message object.This we have to do only for SIB messages.
                  if (message instanceof JmsMessageImpl) {
                      ((JmsMessageImpl) message).setAsyncSendInProgress(false);
                  }
  
                  cListener.onException(message, e);
              } catch (Throwable ex) {
                  //Exception in onCompletion method. Should be handled by user. add to trace. 
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(tc, "Caught exception in onException method", new Object[] { message, cListener, message, ex });
  
              }
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(tc, "sendCalledFromAsynsSendRunThread");
              return;
          } finally {
              //decrement the async send count..and then notify if the count is zero.
              // any blocking Sync send thread would get woken up.
              synchronized (_inProgressAysncSends) {
  
                  if (_inProgressAysncSends.get() > 0)
                      _inProgressAysncSends.decrementAndGet();
  
                  if (_inProgressAysncSends.get() <= 0) {
                      _inProgressAysncSends.notifyAll();
                  }
  
              }
  
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "sendCalledFromAsynsSendRunThread");
  
      }