docs: protected static Timer getDeserializedTimer(BeanId beanId, String taskId)
      {
          // Look first for existing timer (in all 3 places)
          // If not found, THEN new TimerNpImpl, but with new ctor to set
          // ivDestroyed=true, since this timer will never run
  
          // F743-22582
          // A stateful session bean may have a reference to a non-persistent Timer.
          //
          // By definition, a non-persistent Timer only exists in the JVM its defined
          // in, and so if the stateful bean is failed over to another server, the
          // Timer is no longer valid.
          //
          // In the failover scenario, we still want to hydrate that instance variable
          // in the stateful bean with a Timer instance (ie, we don't want that variable
          // to be null)...but that Timer instance must be invalid, such that if the
          // user invokes a method on it, they get a NoSuchObjectLocalException error.
          //
          // In the failover scenario, this code (which is attempting to rehydrate the Timer)
          // will be running on a different server than the one the TimerNpImpl instance
          // was created on.  Therefore, the TimerNpImpl instance we are looking for will
          // not be in the server-specific map we are dealing with, and so we'll bring back
          // a new TimerNpImpl instance which knows its not valid, and which produces the
          // desired NoSuchObjectLocalException when a method is invoked on it.
  
          Timer timer;
  
          synchronized (svActiveTimers)
          {
              timer = svActiveTimers.get(taskId);
  
              if (timer != null)
              {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(tc, "getDeserializedTimer: found in active timer map : " + timer);
                  return timer;
              }
          }
  
          EJSHome home = (EJSHome) beanId.home;
          ContainerTx containerTx = home.container.getCurrentContainerTx();
  
          if (containerTx != null)
          {
              if (containerTx.timersQueuedToStart != null)
              {
                  timer = containerTx.timersQueuedToStart.get(taskId);
  
                  if (timer != null)
                  {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                          Tr.debug(tc, "getDeserializedTimer: found in timersQueuedToStart : " + timer);
                      return timer;
                  }
              }
  
              if (containerTx.timersCanceled != null)
              {
                  timer = containerTx.timersCanceled.get(taskId);
  
                  if (timer != null)
                  {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                          Tr.debug(tc, "getDeserializedTimer: found in timersCanceled : " + timer);
                      return timer;
                  }
              }
          }
  
          // Since timer was not found to exist, instantiate a dummy in the
          // destroyed state that will fail as expected when accessed.
          timer = new TimerNpImpl(beanId, taskId);
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              Tr.debug(tc, "getDeserializedTimer: not found - returning destroyed Timer : " + timer);
  
          return timer;
      }