code: @Override
      public void destroy() {
          if (tc.isEntryEnabled())
              Tr.entry(tc, "destroy", this);
  
          // check the TSR is active - otherwise we can trigger exceptions when we
          // try to get data out of it.
          if (tsr.getTransactionKey() != null) {
              final Map<String, InstanceAndContext<?>> storage = getStorage(false);
  
              if (storage != null) {
                  try {
                      for (InstanceAndContext<?> entry : storage.values()) {
                          final String id = getContextualId(entry.context);
                          destroyItem(id, entry);
                      }
                  } finally {
                      tsr.putResource(TXC_STORAGE_ID, null);
                  }
              }
          } else {
              if (tc.isDebugEnabled())
                  Tr.debug(tc, "Tran synchronization registry not available, skipping destroy");
          }
  
          //Fire any observers
          beanManager.fireEvent("Destroying transaction context", destroyedQualifier);
  
          if (tc.isEntryEnabled())
              Tr.exit(tc, "destroy");
      }
docs: Destroy the entire context. This causes @PreDestroy annotated methods to be
  called on all the bean instances that this scope has created.