view software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/schedule/MpdlChainSchedulerListener.java @ 0:408254cf2f1d

Erstellung
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Wed, 24 Nov 2010 17:24:23 +0100
parents
children
line wrap: on
line source

package de.mpg.mpiwg.berlin.mpdl.schedule;

import org.apache.log4j.Logger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;

import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;

public class MpdlChainSchedulerListener implements JobListener {
  private static Logger LOGGER = Logger.getLogger(MpdlChainSchedulerListener.class); // Logs to EXIST_HOME/webapp/WEB-INF/logs/exist.log
  
  public String getName() {
    return "MpdlJobChainingListener";
  }

  public void jobToBeExecuted(JobExecutionContext inContext) {
  }

  public void jobExecutionVetoed(JobExecutionContext inContext) {
    String message = "MPDL: JobChainingListener: Job execution was vetoed.";
    LOGGER.debug(message);
  }

  public void jobWasExecuted(JobExecutionContext inContext, JobExecutionException inException) {
    // after finishing his job it tries to schedule the next operation (if there is one in the queue)
    MpdlDocOperation docOperation = null;
    try {
      MpdlChainScheduler mpdlChainScheduler = MpdlChainScheduler.getInstance();
      docOperation = getDocOperation(inContext);
      mpdlChainScheduler.finishOperation(docOperation);
    } catch (ApplicationException e) {
      if (docOperation != null) {
        docOperation.setErrorMessage(e.getMessage());
      }
      LOGGER.error(e.getMessage());
    }
  }

  private MpdlDocOperation getDocOperation(JobExecutionContext context) {
    MpdlDocOperation docOperation = null;
    if (context != null) {
      JobDetail job = context.getJobDetail();
      JobDataMap parameters = job.getJobDataMap();
      docOperation = (MpdlDocOperation) parameters.get("operation");
    }
    return docOperation;
  }
  

}