docs: public void start(Xid xid, int flags) throws XAException {
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(this, tc, "start", new Object[]
              {
               ivManagedConnection,
               AdapterUtil.toString(xid), 
               AdapterUtil.getXAResourceStartFlagString(flags)
              });
  
          // if the MC marked Stale, it means the user requested a purge pool with an immediate option
          // so don't allow any work to continue.  In this case, we throw XAER_RMFAIL xa error
          // which indicates that the resource manager is not available
          if (ivManagedConnection._mcStale) {
              Tr.error(tc, "INVALID_CONNECTION");
              XAException x = new XAException(XAException.XAER_RMFAIL);
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) 
                  Tr.exit(this, tc, "start", new Object[] { "MC is stale throwing XAER_RMFAIL", ivManagedConnection });
              throw x;
          }
  
          if (dsConfig.get().enableMultithreadedAccessDetection) 
              ivManagedConnection.detectMultithreadedAccess(); 
  
          this.ivXid = xid;
  
          try {
              // TODO if we add dsConfig.transactionBranchesLooselyCoupled, then for Oracle, do
              // flags |= 0x10000; // value of oracle.jdbc.xa.OracleXAResource.ORATRANSLOOSE
  
              ivXaRes.start(xid, flags);
              ivStateManager.setState(WSStateManager.XA_START);
          } catch (TransactionException te) {
              //Exception means setState failed because it was invalid to set the state in this case
              FFDCFilter.processException(te, "com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.start", "615", this);
              Tr.error(tc, "INVALID_TX_STATE", new Object[] { "XAResource.start()", ivManagedConnection.getTransactionStateAsString() });
              try {
                  ivXaRes.end(xid, XAResource.TMNOFLAGS);
                  ivXaRes.rollback(xid);
              } catch (XAException eatXA) {
                  FFDCFilter.processException(eatXA, "com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.start", "624", this);
                  traceXAException(eatXA, currClass);
                  //eat this exception because in the next line we will throw one
              }
  
              XAException xae = AdapterUtil.createXAException(
                                                              "INVALID_TX_STATE",
                                                              new Object[] { "XAResource.start", ivManagedConnection.getTransactionStateAsString() },
                                                              XAException.XA_RBPROTO); 
  
              traceXAException(xae, currClass);
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  Tr.exit(this, tc, "start", "Exception");
              throw xae;
          } catch (XAException xae) {
              FFDCFilter.processException(xae, "com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.start", "639", this);
              traceXAException(xae, currClass);
              checkXAException(xae); 
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  Tr.exit(this, tc, "start", "Exception");
              throw xae;
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) 
          {
              String cId = null;
              try {
                  cId = ivManagedConnection.mcf.getCorrelator(ivManagedConnection); 
              } catch (SQLException x) {
                  // will just log the exception here and ignore it since its in trace
                  Tr.debug(this, tc, "got an exception trying to get the correlator in rollback, exception is: ", x);
              }
              if (cId != null) {
                  StringBuffer stbuf = new StringBuffer(200);
                  stbuf.append("Correlator: DB2, ID: ");
                  stbuf.append(cId);
                  if (xid != null) {
                      stbuf.append("Transaction ID : ");
                      stbuf.append(xid);
                  }
                  stbuf.append(" BEGIN");
  
                  Tr.debug(this, tc, stbuf.toString());
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.exit(this, tc, "start");
      }