docs: private long sendEntireMessage(SIBusMessage msg, List<DataSlice> messageSlices)
                      throws OperationFailedException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "sendEntireMessage", new Object[] { msg, messageSlices });
  
          ConversationState convState = (ConversationState) getConversation().getAttachment();
          long retValue = 0;
  
          // Now build the header for this message.
          CommsServerByteBuffer buffer = poolManager.allocate();
          try {
              buffer.putShort(convState.getConnectionObjectId());
              buffer.putShort(mainConsumer.getClientSessionId());
              buffer.putShort(msgBatch);
              int msgLen = 0;
              if (messageSlices == null) {
                  msgLen = buffer.putMessage((JsMessage) msg,
                                             convState.getCommsConnection(),
                                             getConversation());
              } else {
                  msgLen = buffer.putMessgeWithoutEncode(messageSlices);
              }
  
              // Perform the send (and take care of any exceptions)
              try {
                  retValue = getConversation().send(buffer,
                                                    JFapChannelConstants.SEG_BROWSE_MESSAGE,
                                                    0,
                                                    JFapChannelConstants.PRIORITY_LOWEST,
                                                    false,
                                                    ThrottlingPolicy.BLOCK_THREAD,
                                                    null);
  
  
              } catch (SIException e) {
                  FFDCFilter.processException(e, CLASS_NAME + ".sendEntireMessage",
                                              CommsConstants.CATBROWSECONSUMER_SENDMESSAGE_02,
                                              this);
  
                  SibTr.error(tc, "COMMUNICATION_ERROR_SICO2012", e);
  
                  // No point trying to transmit this to the client, as it has already gone away.
                  throw new OperationFailedException();
              }
          } catch (Exception e) {
              //No FFDC code needed
              //Only FFDC if we haven't received a meTerminated event OR if this Exception is a SIException.
              if (!(e instanceof SIException) || !convState.hasMETerminated()) {
                  FFDCFilter.processException(e, CLASS_NAME + ".sendEntireMessage",
                                              CommsConstants.CATBROWSECONSUMER_SENDMESSAGE_01,
                                              this);
              }
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled())
                  SibTr.exception(this, tc, e);
  
              // If the connection drops during the encode, don't try and send an exception to the client
              if (e instanceof SIConnectionDroppedException) {
                  SibTr.error(tc, "COMMUNICATION_ERROR_SICO2012", e);
  
                  // No point trying to transmit this to the client, as it has already gone away.
                  throw new OperationFailedException();
              }
  
              SIResourceException coreException = new SIResourceException();
              coreException.initCause(e);
              StaticCATHelper.sendAsyncExceptionToClient(coreException,
                                                         CommsConstants.CATBROWSECONSUMER_SENDMESSAGE_01,
                                                         getClientSessionId(), getConversation(), 0);
              throw new OperationFailedException();
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "sendEntireMessage", retValue);
          return retValue;
      }