private Void executedeadLine(
      TaskContext ctx,
      TaskPersistenceContext persistenceContext,
      Task task,
      DeadlineSummaryImpl deadlineSummaryImpl,
      TaskData taskData) {
    Deadline deadline = persistenceContext.findDeadline(deadlineSummaryImpl.getDeadlineId());
    if (task == null || deadline == null) {
      return null;
    }

    if (taskData != null) {
      // check if task is still in valid status
      if (DeadlineType.START.isValidStatus(taskData.getStatus())
          || DeadlineType.END.isValidStatus(taskData.getStatus())) {
        Map<String, Object> variables = getVariables(ctx, persistenceContext, task, taskData);
        if (deadline == null || deadline.getEscalations() == null) {
          return null;
        }

        for (Escalation escalation : deadline.getEscalations()) {
          for (Notification notification : escalation.getNotifications()) {
            if (notification.getNotificationType() == NotificationType.Email) {
              logger.debug("Sending an Email");
              notificationListener.onNotification(
                  new NotificationEvent(notification, task, variables));
            }
          }
        }
      }
    }
    return null;
  }
  @PostConstruct
  public void init() {
    // make sure it has tx manager as it runs as background thread - no request scope available
    if (!((JbpmServicesPersistenceManagerImpl) pm).hasTransactionManager()) {
      ((JbpmServicesPersistenceManagerImpl) pm)
          .setTransactionManager(new JbpmJTATransactionManager());
    }

    long now = System.currentTimeMillis();
    List<DeadlineSummaryImpl> resultList =
        (List<DeadlineSummaryImpl>) pm.queryInTransaction("UnescalatedStartDeadlines");
    for (DeadlineSummaryImpl summary : resultList) {
      long delay = summary.getDate().getTime() - now;
      schedule(summary.getTaskId(), summary.getDeadlineId(), delay, DeadlineType.START);
    }

    resultList = (List<DeadlineSummaryImpl>) pm.queryInTransaction("UnescalatedEndDeadlines");
    for (DeadlineSummaryImpl summary : resultList) {
      long delay = summary.getDate().getTime() - now;
      schedule(summary.getTaskId(), summary.getDeadlineId(), delay, DeadlineType.END);
    }
  }