code: @Override
      public ScheduleExpression getSchedule() {
  
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "getSchedule: " + this);
  
          // Determine if the calling bean is in a state that allows timer service
          // method access - throws IllegalStateException if not allowed.
          checkTimerAccess();
  
          PersistentTimerTaskHandler taskHandler = getTimerTaskHandler(ALLOW_CACHED_TIMER_GET_SCHEDULE);
          ParsedScheduleExpression parsedSchedule = taskHandler.getParsedSchedule();
          if (parsedSchedule == null) {
              IllegalStateException ise = new IllegalStateException("Timer is not a calendar-based timer: " + toString());
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(tc, "getSchedule: " + ise);
              throw ise;
          }
  
          ScheduleExpression schedule = EJSContainer.getDefaultContainer().ivObjectCopier.copy(parsedSchedule.getSchedule());
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "getSchedule: " + schedule);
          return schedule;
      }
docs: Get the schedule expression corresponding to this 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.