code: @Override
      public TimerTrigger getTimer(long taskId) throws ClassNotFoundException, Exception, IOException {
          TaskRecord taskRecord = null;
          TransactionController tranController = new TransactionController();
          try {
              tranController.preInvoke();
              taskRecord = taskStore.getTrigger(taskId);
          } catch (Throwable x) {
              tranController.setFailure(x);
          } finally {
              Exception x = tranController.postInvoke(Exception.class);
              if (x != null)
                  throw x;
          }
          if (taskRecord == null || (taskRecord.getState() & TaskState.ENDED.bit) != 0)
              return null;
  
          // The task/trigger for EJB persistent timers does not require the application class loader to deserialize.
          byte[] triggerBytes = taskRecord.getTrigger();
          TimerTrigger trigger = triggerBytes == null ? null : (TimerTrigger) deserialize(triggerBytes, InvokerTask.priv.getSystemClassLoader());
          return trigger;
      }
docs: {@inheritDoc}