view flys-artifacts/src/main/java/de/intevation/flys/wsplgen/JobExecutor.java @ 1128:727c53fd0dc7

Some bugfixes when starting/finishing WSPLGEN jobs. flys-artifacts/trunk@2643 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 05 Sep 2011 07:17:52 +0000
parents 6b9877a9f6c1
children e6dd52342eb7
line wrap: on
line source
package de.intevation.flys.wsplgen;

import java.io.InputStream;
import java.io.IOException;
import java.io.File;

import org.apache.log4j.Logger;

import de.intevation.artifacts.CallContext;

import de.intevation.flys.artifacts.model.WSPLGENJob;


public class JobExecutor {

    public static final String WSPLGEN_PARAMETER_FILE =
        "wsplgen.par";

    public static final String WSPLGEN_BIN_PATH =
        System.getProperty("wsplgen.bin.path");


    private Logger logger = Logger.getLogger(JobExecutor.class);

    private Process process;

    protected WSPLGENJob job;

    protected JobObserver observer;


    public JobExecutor(WSPLGENJob job) {
        this.job      = job;
        this.observer = new JobObserver(job);
    }


    public void execute() {
        File dir       = job.getWorkingDir();
        File parameter = new File(dir, WSPLGEN_PARAMETER_FILE);

        String[] args = new String[] {
            WSPLGEN_BIN_PATH,
            "-PAR=\"" + parameter.getAbsolutePath() + "\""
        };

        execute(args, dir, observer);
    }


    public void execute(String[] args, File dir, JobObserver observer) {
        logger.info("Start JobExecutor for artifact: " + dir.getName());

        String errorMsg = null;

        try {
            synchronized (this) {
                process = Runtime.getRuntime().exec(args, null, dir);

                InputStream out = process.getInputStream();
                observer.setInputStream(out);

                observer.start();

                try {
                    process.waitFor();
                }
                catch (InterruptedException ie) {
                    logger.error("WSPLGEN job interrupted: " + ie.getMessage());
                }

                try {
                    observer.join();
                }
                catch (InterruptedException iee) { /* do nothing */ }

                job.getCallContext().afterBackground(CallContext.STORE);

                logger.info("WSPLGEN exit value: " + process.exitValue());

                return;
            }
        }
        catch (SecurityException se) {
            logger.error(se);
        }
        catch (IOException ioe) {
            logger.error(ioe);
        }
        catch (NullPointerException npe) {
            logger.error(npe, npe);
        }
        catch (IndexOutOfBoundsException ioobe) {
            logger.error(ioobe, ioobe);
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org