docs: @Override
      public void destroy() {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "destroy : " + this);
  
          if (state == DESTROYED) {
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(tc, "destroy : already destroyed");
              return;
          }
  
          setState(DESTROYED);
  
          InterceptorMetaData imd = home.beanMetaData.ivInterceptorMetaData;
          InterceptorProxy[] proxies = (imd == null) ? null : imd.ivPreDestroyInterceptors;
  
          if (proxies == null) {
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(tc, "destroy : no PreDestroy");
              return;
          }
  
          BeanMetaData bmd = home.beanMetaData;
          CallbackContextHelper contextHelper = new CallbackContextHelper(this);
          try {
              contextHelper.begin(CallbackContextHelper.Tx.LTC,
                                  CallbackContextHelper.Contexts.CallbackBean);
  
              // Invoke the PreDestroy interceptor methods.
              if (bmd.managedObjectManagesInjectionAndInterceptors) {
  
                  ivManagedObject.release();
              } else {
                  InvocationContextImpl<?> inv = getInvocationContext();
                  inv.doLifeCycle(proxies, bmd._moduleMetaData);
              }
          } catch (Exception ex) {
              FFDCFilter.processException(ex, CLASS_NAME + ".destroy", "262", this);
  
              // Just trace this event and continue so that BeanO is transitioned
              // to the DESTROYED state.  No other lifecycle callbacks on this bean
              // instance will occur once in the DESTROYED state, which is the same
              // affect as if bean was discarded as result of this exception.
              if (isTraceOn && tc.isEventEnabled()) // d144064
                  Tr.event(tc, "destroy caught exception:", new Object[] { this, ex });
          } finally {
              try {
                  contextHelper.complete(true);
              } catch (Throwable t) {
                  FFDCFilter.processException(t, CLASS_NAME + ".destroy", "279", this);
  
                  // Just trace this event and continue so that BeanO is transitioned
                  // to the DESTROYED state.  No other lifecycle callbacks on this bean
                  // instance will occur once in the DESTROYED state, which is the same
                  // affect as if bean was discarded as result of this exception.
                  if (isTraceOn && tc.isEventEnabled())
                      Tr.event(tc, "destroy caught exception: ", new Object[] { this, t });
              }
  
              releaseManagedObjectContext();
  
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(tc, "destroy : completed PreDestroy");
          }
      }