docs: private static void sendSessMsg(CommsServerByteBuffer request,
                                      Conversation conversation,
                                      int requestNumber,
                                      boolean partOfExchange,
                                      boolean allocatedFromBufferPool,
                                      boolean sendReply,
                                      boolean txOptimized)
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "sendSessMsg",
                          new Object[]
                          {
                           request,
                           conversation,
                           "" + requestNumber,
                           "" + partOfExchange,
                           "" + allocatedFromBufferPool,
                           "" + sendReply,
                           "" + txOptimized,
                          });
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
          {
              if (sendReply)
                  SibTr.debug(tc, "The client will be informed of the outcome");
              else
                  SibTr.debug(tc, "The client will NOT be informed of the outcome");
          }
  
          ConversationState convState = (ConversationState) conversation.getAttachment();
          ServerLinkLevelState linkState = (ServerLinkLevelState) conversation.getLinkLevelAttachment();
  
          short connectionObjectId = request.getShort(); // BIT16 ConnectionObjectId
          short producerObjectId = request.getShort(); // BIT16 SyncProducerSessionId
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
          {
              SibTr.debug(tc, "connectionObjectId", connectionObjectId);
              SibTr.debug(tc, "producerObjectId", producerObjectId);
          }
  
          // Get the transaction
          int transactionId = request.getSITransactionId(connectionObjectId, linkState, txOptimized);
          SITransaction siTran = linkState.getTransactionTable().get(transactionId);
  
          try
          {
              try
              {
                  // Now get the message
                  int messageLength = (int) request.peekLong();
                  SIBusMessage sibMessage = request.getMessage(null);
  
                  ProducerSession producer =
                                  ((ProducerSession) convState.getObject(producerObjectId));
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  {
                      SibTr.debug(tc, "Sending client message - " + sibMessage);
                      SibTr.debug(tc, "Destination: " + producer.getDestinationAddress());
                      SibTr.debug(tc, "Discriminator: " + sibMessage.getDiscriminator());
                      SibTr.debug(tc, "Reliability: " + sibMessage.getReliability());
                  }
  
                  if (siTran != IdToTransactionTable.INVALID_TRANSACTION)
                  {
                      producer.send(sibMessage, siTran);
                  }
  
                  if (sendReply)
                  {
                      try
                      {
                          conversation.send(poolManager.allocate(),
                                            JFapChannelConstants.SEG_SEND_SESS_MSG_R,
                                            requestNumber,
                                            JFapChannelConstants.PRIORITY_MEDIUM,
                                            true,
                                            ThrottlingPolicy.BLOCK_THREAD,
                                            null);
                      } catch (SIException e)
                      {
                          FFDCFilter.processException(e,
                                                      CLASS_NAME + ".sendSessMsg",
                                                      CommsConstants.STATICCATPRODUCER_SEND_01);
  
                          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                              SibTr.debug(tc, e.getMessage(), e);
  
                          SibTr.error(tc, "COMMUNICATION_ERROR_SICO2024", e);
                      }
                  }
              } catch (Exception e)
              {
                  // No FFDC code needed
                  // (actually we FFDC later on - but we need that line to fool the FFDC tool :-)
  
                  // If we are sending replies, rethrow the exception so
                  // that the specific exeption handlers will deal with it
                  // and send the response to the client
                  if (sendReply)
                      throw e;
  
                  // Otherwise, mark this transaction as error if we are not sending a reply
                  if (transactionId != CommsConstants.NO_TRANSACTION)
                      linkState.getTransactionTable().markAsRollbackOnly(transactionId, e);
  
                  //Only FFDC if we haven't received a meTerminated event OR if this Exception isn't a SIException.
                  if (!(e instanceof SIException) || !convState.hasMETerminated())
                  {
                      FFDCFilter.processException(e,
                                                  CLASS_NAME + ".sendSessMsg",
                                                  CommsConstants.STATICCATPRODUCER_SEND_02);
                  }
  
                  SibTr.error(tc, SibTr.Suppressor.ALL_FOR_A_WHILE_SIMILAR_INSERTS,
                              "UNABLE_TO_SEND_MESSAGE_SICO2009", e);
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(tc, "Failed to send a message", e);
              }
          } catch (SIException e)
          {
              //No FFDC code needed - processor will have already FFDC'ed any interesting ones....
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(tc, e.getMessage(), e);
  
              StaticCATHelper.sendExceptionToClient(e,
                                                    CommsConstants.STATICCATPRODUCER_SEND_03,
                                                    conversation, requestNumber);
  
          } catch (Exception e)
          {
              FFDCFilter.processException(e,
                                          CLASS_NAME + ".sendSessMsg",
                                          CommsConstants.STATICCATPRODUCER_SEND_04);
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(tc, e.getMessage(), e);
  
              StaticCATHelper.sendExceptionToClient(e,
                                                    CommsConstants.STATICCATPRODUCER_SEND_04,
                                                    conversation, requestNumber);
          }
  
          request.release(allocatedFromBufferPool);
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "sendSessMsg");
      }