docs: @Override
      public void runUnderUOW(int uowType, boolean join, UOWAction uowAction) throws UOWActionException, UOWException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(tc, "runUnderUOW", new Object[] { new Integer(uowType), Boolean.valueOf(join), uowAction });
  
          final UOWScope initialUOWScope;
  
          try {
              initialUOWScope = getUOWScope();
          } catch (SystemException e) {
              FFDCFilter.processException(e, "com.ibm.ws.uow.UOWManagerImpl.runUnderUOW", "96", this);
              final UOWException uowe = new UOWException(e);
              if (tc.isEntryEnabled())
                  Tr.exit(tc, "runUnderUOW", e);
              throw uowe;
          }
  
          UOWToken uowt = null;
          if (initialUOWScope != null && (join == false || uowType == UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION || uowType != getUOWType())) {
              if (tc.isDebugEnabled())
                  Tr.debug(tc, "Need to suspend current UOW");
  
              try {
                  uowt = suspend();
              } catch (Throwable t) {
                  FFDCFilter.processException(t, "com.ibm.ws.spi.uow.UOWManagerImpl.runUnderUOW", "81", this);
                  final UOWException uowe = new UOWException(t);
                  if (tc.isEntryEnabled())
                      Tr.exit(tc, "runUnderUOW", uowe);
                  throw uowe;
              }
          }
  
          Throwable toThrow = null;
          try {
              try {
                  if (getUOWScope() == null) {
                      // Either we just suspended a UOW or there was no
                      // UOW on the thread in the first place
                      toThrow = runUnderNewUOW(uowType, uowAction);
                  } else {
                      toThrow = runUnderCurrentUOW(uowAction);
                  }
              } catch (SystemException e) {
                  FFDCFilter.processException(e, "com.ibm.ws.uow.PreviewUOWManagerImpl.run", "138", this);
                  toThrow = new UOWException(e);
              }
          } finally {
              try {
                  resume(uowt);
              } catch (Throwable t) {
                  FFDCFilter.processException(t, "com.ibm.ws.spi.uow.UOWManagerImpl.runUnderUOW", "107", this);
                  if (toThrow == null) {
                      toThrow = new UOWException(t);
                  }
              }
          }
  
          if (toThrow instanceof UOWException) {
              if (tc.isEntryEnabled())
                  Tr.exit(tc, "runUnderUOW", toThrow);
              throw (UOWException) toThrow;
          }
  
          if (toThrow instanceof UOWActionException) {
              if (tc.isEntryEnabled())
                  Tr.exit(tc, "runUnderUOW", toThrow);
              throw (UOWActionException) toThrow;
          }
  
          if (toThrow instanceof RuntimeException) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  Tr.exit(tc, "runUnderUOW");
              throw (RuntimeException) toThrow;
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.exit(tc, "runUnderUOW");
      }