code: public final synchronized void destroyNotRemove() {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled()) // d144064
              Tr.entry(tc, "destroyNotRemove : " + this);
  
          if (state == DESTROYED) {
              return;
          }
  
          // If running in an extended persistence context, the JEERuntime code
          // maintains a map of SFSBs that must be cleaned up.  This is
          // especially important if this method is called due to a timeout.
          // PM12927
          if (ivExPcContext != null) {
              container.getEJBRuntime().getEJBJPAContainer().onRemoveOrDiscard(ivExPcContext);
          }
  
          if (isZOS) {
              removeServantRoutingAffinity(); // d646413.2
          }
          setState(DESTROYED);
  
          // Release any JCDI creational contexts that may exist.     F743-29174
          releaseManagedObjectContext();
  
          if (pmiBean != null) {
              pmiBean.beanDestroyed();
          }
  
          disconnectWrapper(); // F61004.6
          destroyHandleList();
  
          if (isTraceOn && tc.isEntryEnabled()) // d144064
              Tr.exit(tc, "destroyNotRemove");
  
      }
docs: Destroy but do not remove this <code>BeanO</code> instance. This
  method must be used instead of the destroy method when a uncheck
  or system exception occurs to ensure no lifecycle callback
  (e.g. ejbRemove or pre-destroy interceptor method) method is
  invoked as required by the EJB spec. <p>
  
  This method must be called whenever this BeanO instance is no
  longer valid. It transitions the BeanO to the DESTROYED state,
  transitions the associated session bean (if any) to the
  does not exist state, and releases the reference to the
  associated session bean. <p>
  It however does not remove the Session Bean as done by destroy