code: public ContainerTx getCurrentContainerTx() {
          ContainerTx result = null;
          SynchronizationRegistryUOWScope currTxKey = null;
          try {
              currTxKey = uowCtrl.getCurrentTransactionalUOW(false);
          } catch (CSITransactionRolledbackException ex) {
              // (not expected, since passing false on getCurrentTransactionalUOW)
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  Tr.debug(tc, "getCurrentContainerTx: " + ex);
          }
  
          if (currTxKey != null) {
              result = (ContainerTx) currTxKey.getResource(containerTxResourceKey);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              Tr.debug(tc, "getCurrentContainerTx() : " + result);
  
          return result;
      }
docs: Returns container transaction associated with the current thread. <p>
  
  Similar to {@link #getActiveContainerTx()}, but this method will
  return the current transaction even if it has been rolled back or
  marked for rollback only. <p>
  
  Will return null if a container transaction is not associated with
  the current thread. For example, during after_completion callbacks. <p>
  
  @return container transaction associated with the current thread.