docs: protected synchronized void invoke()
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "invoke");
  
        //Have a quick look at the conversation, if it is not closed invoke the receive listener.
        if(!conversation.isClosed())
        {
           try
           {
              ConversationReceiveListener newReceiveListener = null;
              
              do
              {
                 // Remember details about the byte buffer we pass in, in case
                 // it is changed.
                 int position = data.position();
                 int limit = data.limit();
  
                 // Pass details to implementor's conversation receive listener.
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) JFapUtils.debugTraceWsByteBuffer(this, tc, data, 16, "data passed to dataReceived method");
                 newReceiveListener =
                   listener.dataReceived(data,
                                          segmentType,
                                          requestNumber,
                                          priority,
                                          allocatedFromPool,
                                          partOfExchange,
                                          conversation);
  
                 if (newReceiveListener != null)
                 {
                    // If implementor supplies a different listener, make this
                    // take effect.
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "new receive listener supplied: "+newReceiveListener);
                    ((ConversationImpl)conversation).setDefaultReceiveListener(newReceiveListener);
                    listener = newReceiveListener;
                    data.limit(limit);
                    data.position(position);
                 }
              }
              while(newReceiveListener != null);
           }
           catch(Throwable t)
           {
              FFDCFilter.processException
                 (t, "com.ibm.ws.sib.jfapchannel.impl.rldispatcher.ConversationReceiveListenerDataReceivedInvocation.invoke", JFapChannelConstants.CRLDATARECEIVEDINVOKE_INVOKE_01);
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "exception thrown by dataReceived");
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) SibTr.exception(this, tc, t);
  
              // User has thrown an exception from data received method.  Probably
              // the best way to deal with this is to invalidate their connection.
              // That'll learn 'em.
              connection.invalidate(true, t, "execption thrown by dataReceived method - "+t.getMessage());    // D224570
  
           }
        }
        else
        {
           if(TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Conversation was already closed bypassing invoke.");
        }
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "invoke");
     }