code: public void end(Xid xid, int flags) throws XAException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(this, tc, "end", new Object[] 
                       {
                        ivManagedConnection,
                        AdapterUtil.toString(xid), 
                        AdapterUtil.getXAResourceEndFlagString(flags)
              });
  
          try {
              if (flags == XAResource.TMFAIL) {
                  ivStateManager.setState(WSStateManager.XA_END_FAIL);
              } else {
                  ivStateManager.setState(WSStateManager.XA_END);
              }
          } 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.WSRdbOnePhaseXaResourceImpl.end", "189", this);
              Tr.error(tc, "INVALID_TX_STATE", new Object[] { "OnePhaseXAResource.end()", ivManagedConnection.getTransactionStateAsString() });
              XAException xae = new XAException(XAException.XA_RBPROTO);
              traceXAException(xae, currClass);
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  Tr.exit(this, tc, "end", "Exception"); 
              throw xae;
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.exit(this, tc, "end"); 
      }
docs: XAException with return code XA_RBROLLBACK