docs: public void registerAsynchConsumerCallback(AsynchConsumerCallback callback,
                                                int maxActiveMessages,
                                                long messageLockExpiry,
                                                int maxBatchSize,
                                                OrderingContext orderingContext)
        throws SISessionUnavailableException, SISessionDroppedException,
               SIConnectionUnavailableException, SIConnectionDroppedException,
               SIErrorException,
               SIIncorrectCallException
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "registerAsynchConsumerCallback",
                                             new Object[]
                                             {
                                                callback,
                                                maxActiveMessages,
                                                messageLockExpiry,
                                                maxBatchSize,
                                                orderingContext
                                             });
  
        if (executingOnCallbackThread())
        {
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "called from within asynch consumer callback, callbackThreadState="+callbackThreadState);
  
           if (callbackThreadState == CallbackThreadState.CLOSED ||
               state == StateEnum.CLOSED || state == StateEnum.CLOSING)
           {
              throw new SISessionUnavailableException(nls.getFormattedMessage("SESSION_CLOSED_SICO1013", null, null));
           }
           else if (callbackThreadState == CallbackThreadState.STARTED_DEREGISTERED ||
                    callbackThreadState == CallbackThreadState.STARTED_REGISTERED)
           {
              throw new SIIncorrectCallException(nls.getFormattedMessage("CALLBACK_CHANGE_WHILE_STARTED_SICO1015", null, null));
           }
           else if (callback == null)
           {
              if (callbackThreadState == CallbackThreadState.STOPPED_REGISTERED)
              {
                 callbackThreadState = CallbackThreadState.STOPPED_DEREGISTERED;
              }
           }
           else
           {
              callbackThreadCallback = callback;
              callbackThreadMaxActiveMessages = maxActiveMessages;
              callbackThreadMessageLockExpiry = messageLockExpiry;
              callbackThreadMaxBatchSize = maxBatchSize;
              callbackThreadOrderingContext = orderingContext;
              callbackStoppable = false;
  
              if (callbackThreadState == CallbackThreadState.STOPPED_DEREGISTERED)
              {
                 callbackThreadState = CallbackThreadState.STOPPED_REGISTERED;
              }
           }
        }
        else
        {
           synchronized (callbackLock) {
              synchronized(synchLock)
              {
  
                 _registerAsynchConsumerCallback( callback,
                        maxActiveMessages,
                        messageLockExpiry,
                        maxBatchSize,
                        orderingContext,
                        0,                                                                                   //SIB0115d.comms
                        0,
                        false);                                                                                      //472879
  
                 if (proxyQueue != null) proxyQueue.setAsynchCallback(callback,
                                                                      maxActiveMessages,
                                                                      messageLockExpiry,
                                                                      maxBatchSize,
                                                                      orderingContext,
                                                                      0,                                     //SIB0115d.comms
                                                                      0,
                                                                      false);                                        //472879
              }
           }
        }
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "registerAsynchConsumerCallback");
     }