docs: public static void rcvXAStart(CommsByteBuffer request, Conversation conversation,
                                   int requestNumber, boolean allocatedFromBufferPool,
                                   boolean partOfExchange)
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(tc, "rcvXAStart",
                                             new Object[]
                                             {
                                                request,
                                                conversation,
                                                ""+requestNumber,
                                                ""+allocatedFromBufferPool,
                                                ""+partOfExchange
                                              });
  
        ConversationState convState = (ConversationState) conversation.getAttachment();
  
        try
        {
           int clientTransactionId = request.getInt();
  
           CATConnection catConn = (CATConnection) convState.getObject(convState.getConnectionObjectId());
           SICoreConnection connection = catConn.getSICoreConnection();
  
           ServerLinkLevelState linkState = (ServerLinkLevelState) conversation.getLinkLevelAttachment();
           SIXAResource xaResource = (SIXAResource)linkState.getTransactionTable().get(clientTransactionId, true);
           if (xaResource == null)
           {
              try {
                    xaResource = connection.getSIXAResource();
              }
              catch (SIConnectionUnavailableException e)
              {
                 //No FFDC code needed
                 //Only FFDC if we haven't received a meTerminated event.
                 if(!convState.hasMETerminated())
                 {
                    FFDCFilter.processException(e, CLASS_NAME + ".rcvXAStart",
                                                CommsConstants.STATICCATXATRANSACTION_XASTART_04);
                 }
  
                 // This should never happen.  We are running inside the
                 // application server - so we should always be able to
                 // contact a messaging engine.  Get very upset about this
  
                 if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) SibTr.exception(tc, e);
                 throw new SIErrorException(e);
              }
              catch (SIResourceException e)
              {
                 FFDCFilter.processException(e,
                       CLASS_NAME + ".rcvXAStart",
                       CommsConstants.STATICCATXATRANSACTION_XASTART_05);
                 if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) SibTr.exception(tc, e);
                 throw new XAException(XAException.XAER_RMERR);
              }
           }
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
           {
              SibTr.debug(tc, "XAResource Object ID", clientTransactionId);
           }
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "Getting Xid");
           Xid xid = request.getXid();
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "Completed:", xid);
  
           int flags = request.getInt();
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "Flags: ", flags);
  
           // Now call the method on the XA resource
           xaResource.start(xid, flags);
  
           linkState.getTransactionTable().addGlobalTransactionBranch(clientTransactionId,
                                                                      conversation.getId(),
                                                                      xaResource,
                                                                      (XidProxy) xid,
                                                                      false);
  
           try
           {
              conversation.send(poolManager.allocate(),
                                JFapChannelConstants.SEG_XASTART_R,
                                requestNumber,
                                JFapChannelConstants.PRIORITY_MEDIUM,
                                true,
                                ThrottlingPolicy.BLOCK_THREAD,
                                null);
           }
           catch (SIException e)
           {
              FFDCFilter.processException(e,
                                          CLASS_NAME + ".rcvXAStart",
                                          CommsConstants.STATICCATXATRANSACTION_XASTART_01);
  
              SibTr.error(tc, "COMMUNICATION_ERROR_SICO2027", e);
           }
        }
        catch (XAException e)
        {
           FFDCFilter.processException(e,
                                       CLASS_NAME + ".rcvXAStart",
                                       CommsConstants.STATICCATXATRANSACTION_XASTART_02);
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "XAException - RC: " + e.errorCode, e);
  
           StaticCATHelper.sendExceptionToClient(e,
                                                 CommsConstants.STATICCATXATRANSACTION_XASTART_02,
                                                 conversation, requestNumber);
        }
  
        request.release(allocatedFromBufferPool);
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "rcvXAStart");
     }