code: @Override
      public TimerHandle getHandle() throws IllegalStateException, NoSuchObjectLocalException, EJBException {
  
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "getHandle: " + this);
  
          // Determine if the calling bean is in a state that allows timer service
          // method access - throws IllegalStateException if not allowed.
          checkTimerAccess();
  
          // Determine if the timer still exists; configuration may allow stale data
          checkTimerExists(ALLOW_CACHED_TIMER_GET_HANDLE);
  
          TimerHandle timerHandle = new PersistentTimerHandle(taskId, false);
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "getHandle: " + timerHandle);
  
          return timerHandle;
      }
docs: Get a serializable handle to the timer. This handle can be used at
  a later time to re-obtain the timer reference. <p>
  
  @return A serializable handle to the timer.
  
  @throws IllegalStateException If this method is invoked while the
  instance is in a state that does not allow access to this method.
  @throws NoSuchObjectLocalException If invoked on a timer that has
  expired or has been cancelled.
  @throws EJBException If this method could not complete due to a
  system-level failure.