code: @Override
      public boolean registerRemoteParticipant(String xaResFactoryFilter, Serializable xaResInfo, String globalId) throws SystemException {
  
          boolean retval = true; // set to false if InvalidState
  
          final DistributableTransaction tx = getTransactionForID(globalId);
  
          if (tx != null) {
              // Stop anyone else shifting the ground beneath us
              tx.addAssociation();
  
              try {
                  // Check the transaction state and action as appropriate
                  switch (tx.getStatus()) {
                      case Status.STATUS_ACTIVE:
                      case Status.STATUS_MARKED_ROLLBACK:
                          tx.enlistAsyncResource(xaResFactoryFilter, xaResInfo, tx.getXid());
                          break;
  
                      case Status.STATUS_PREPARING:
                          tx.setRollbackOnly();
                          // NOTE no break
  
                      default:
                          retval = false; // caller sends InvalidState
                          break;
  
                  } // end switch
              } finally {
                  tx.removeAssociation();
              }
          } else {
              retval = false;
          }
  
          return retval;
      }
docs: /*
  (non-Javadoc)
  
  @see com.ibm.tx.remote.RemoteTransactionController#registerRemoteParticipant(java.lang.String, java.io.Serializable, java.lang.String)