AutomatischProcesJob.java

/*
 * Copyright (C) 2015 B3Partners B.V.
 */
package nl.b3p.brmo.service.jobs;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
import nl.b3p.brmo.loader.util.BrmoException;
import nl.b3p.brmo.persistence.staging.AutomatischProces;
import nl.b3p.brmo.service.scanner.AbstractExecutableProces;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.stripesstuff.stripersist.Stripersist;

/**
 * Start door quartz beheerde automatische processen.
 *
 * @author mprins
 */
public class AutomatischProcesJob implements Job {

  private static final Log log = LogFactory.getLog(AutomatischProcesJob.class);

  @Override
  public void execute(JobExecutionContext context) throws JobExecutionException {
    Long id = null;
    AutomatischProces p = null;
    try {
      id = context.getJobDetail().getJobDataMap().getLongValue("id");
      log.debug("Poging gepland automatisch proces met id: " + id + " te starten.");
      Stripersist.requestInit();
      p = Stripersist.getEntityManager().find(AutomatischProces.class, id);
      if (p != null) {
        log.info(String.format("Geplande taak gestart op %tc.", new Date()));
        AbstractExecutableProces.getProces(p).execute();
        log.info(String.format("Geplande taak afgerond op %tc.", new Date()));
        p.setLastrun(new Date());
        Stripersist.getEntityManager().merge(p);
        Stripersist.getEntityManager().flush();
        log.debug("Gepland automatisch proces met " + id + " is afgerond.");
      } else {
        log.warn("Automatisch proces met id:" + id + " bestaat niet.");
      }
    } catch (ClassCastException cce) {
      log.warn("Geen geldige ID gevonden in de jobdata map.", cce);
    } catch (BrmoException ex) {
      if (p != null) {
        StringWriter sw = new StringWriter();
        ex.printStackTrace(new PrintWriter(sw));
        p.setStatus(AutomatischProces.ProcessingStatus.ERROR);
        p.updateSamenvattingEnLogfile(
            String.format(
                "Fout tijdens starten of uitvoeren van automatische proces met id %s: %s ",
                id, sw.toString()));
        Stripersist.getEntityManager().merge(p);
      }
      log.error("Fout tijdens starten of uitvoeren van automatische proces met id: " + id, ex);
    } finally {
      if (Stripersist.getEntityManager().getTransaction().isActive()) {
        Stripersist.getEntityManager().getTransaction().commit();
      }
    }
  }
}