code: @Override
      public ScheduleExpression getSchedule()
      {
          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();
  
          // Determine if this timer is considered cancelled for the current
          // thread/transaction - throws NoSuchObjectLocalException if cancelled.
          checkIfCancelled();
  
          if (!isCalendarTimer()) {
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(tc, "getSchedule: IllegalStateException : Timer is not a calendar-based timer");
              throw new IllegalStateException("Timer is not a calendar-based timer");
          }
  
          ScheduleExpression result = ivContainer.ivObjectCopier.copy(ivParsedScheduleExpression.getSchedule()); // d587232, RTC102299
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "getSchedule: " + ScheduleExpressionParser.toString(result));
  
          return result;
      }
docs: Get the schedule expression corresponding to this timer.
  
  @exception IllegalStateException If this method is invoked while the
  instance is in a state that does not allow access to this
  method. Also thrown if invoked on a timer that is not a
  calendar-based timer.
  @exception NoSuchObjectLocalException If invoked on a timer that has
  expired or has been cancelled.
  @exception EJBException If this method could not complete due to a
  system-level failure.