Example usage for org.springframework.batch.core JobExecution isRunning

List of usage examples for org.springframework.batch.core JobExecution isRunning

Introduction

In this page you can find the example usage for org.springframework.batch.core JobExecution isRunning.

Prototype

public boolean isRunning() 

Source Link

Document

Test if this JobExecution indicates that it is running.

Usage

From source file:org.springframework.batch.core.repository.support.SimpleJobRepository.java

@Override
public JobExecution createJobExecution(String jobName, JobParameters jobParameters)
        throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {

    Assert.notNull(jobName, "Job name must not be null.");
    Assert.notNull(jobParameters, "JobParameters must not be null.");

    /*//from  www.j a v a 2 s .com
     * Find all jobs matching the runtime information.
     *
     * If this method is transactional, and the isolation level is
     * REPEATABLE_READ or better, another launcher trying to start the same
     * job in another thread or process will block until this transaction
     * has finished.
     */

    JobInstance jobInstance = jobInstanceDao.getJobInstance(jobName, jobParameters);
    ExecutionContext executionContext;

    // existing job instance found
    if (jobInstance != null) {

        List<JobExecution> executions = jobExecutionDao.findJobExecutions(jobInstance);

        // check for running executions and find the last started
        for (JobExecution execution : executions) {
            if (execution.isRunning() || execution.isStopping()) {
                throw new JobExecutionAlreadyRunningException(
                        "A job execution for this job is already running: " + jobInstance);
            }
            BatchStatus status = execution.getStatus();
            if (status == BatchStatus.UNKNOWN) {
                throw new JobRestartException("Cannot restart job from UNKNOWN status. "
                        + "The last execution ended with a failure that could not be rolled back, "
                        + "so it may be dangerous to proceed. Manual intervention is probably necessary.");
            }
            if (execution.getJobParameters().getParameters().size() > 0
                    && (status == BatchStatus.COMPLETED || status == BatchStatus.ABANDONED)) {
                throw new JobInstanceAlreadyCompleteException(
                        "A job instance already exists and is complete for parameters=" + jobParameters
                                + ".  If you want to run this job again, change the parameters.");
            }
        }
        executionContext = ecDao.getExecutionContext(jobExecutionDao.getLastJobExecution(jobInstance));
    } else {
        // no job found, create one
        jobInstance = jobInstanceDao.createJobInstance(jobName, jobParameters);
        executionContext = new ExecutionContext();
    }

    JobExecution jobExecution = new JobExecution(jobInstance, jobParameters, null);
    jobExecution.setExecutionContext(executionContext);
    jobExecution.setLastUpdated(new Date(System.currentTimeMillis()));

    // Save the JobExecution so that it picks up an ID (useful for clients
    // monitoring asynchronous executions):
    jobExecutionDao.saveJobExecution(jobExecution);
    ecDao.saveExecutionContext(jobExecution);

    return jobExecution;

}

From source file:org.springframework.batch.sample.DatabaseShutdownFunctionalTests.java

@Test
public void testLaunchJob() throws Exception {

    JobExecution jobExecution = jobLauncherTestUtils.launchJob();

    Thread.sleep(1000);//www. j a  v  a2s  . c o m

    assertEquals(BatchStatus.STARTED, jobExecution.getStatus());
    assertTrue(jobExecution.isRunning());
    assertNotNull(jobExecution.getVersion());

    jobOperator.stop(jobExecution.getId());

    int count = 0;
    while (jobExecution.isRunning() && count <= 10) {
        logger.info("Checking for end time in JobExecution: count=" + count);
        Thread.sleep(100);
        count++;
    }

    assertFalse("Timed out waiting for job to end.", jobExecution.isRunning());
    assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());

}

From source file:org.springframework.batch.sample.GracefulShutdownFunctionalTests.java

@Test
public void testLaunchJob() throws Exception {

    final JobParameters jobParameters = new JobParametersBuilder()
            .addLong("timestamp", System.currentTimeMillis()).toJobParameters();

    JobExecution jobExecution = jobLauncherTestUtils.launchJob(jobParameters);

    Thread.sleep(1000);/* w  w  w  . j  ava 2  s.  c o m*/

    assertEquals(BatchStatus.STARTED, jobExecution.getStatus());
    assertTrue(jobExecution.isRunning());

    jobExecution.stop();

    int count = 0;
    while (jobExecution.isRunning() && count <= 10) {
        logger.info("Checking for end time in JobExecution: count=" + count);
        Thread.sleep(100);
        count++;
    }

    assertFalse("Timed out waiting for job to end.", jobExecution.isRunning());
    assertEquals(BatchStatus.STOPPED, jobExecution.getStatus());

}

From source file:org.springframework.cloud.dataflow.server.batch.SimpleJobService.java

@Override
public JobExecution restart(Long jobExecutionId, JobParameters params)
        throws NoSuchJobExecutionException, JobExecutionAlreadyRunningException, JobRestartException,
        JobInstanceAlreadyCompleteException, NoSuchJobException, JobParametersInvalidException {

    JobExecution jobExecution = null;

    JobExecution target = getJobExecution(jobExecutionId);
    JobInstance lastInstance = target.getJobInstance();

    if (jobLocator.getJobNames().contains(lastInstance.getJobName())) {
        Job job = jobLocator.getJob(lastInstance.getJobName());

        jobExecution = jobLauncher.run(job, target.getJobParameters());

        if (jobExecution.isRunning()) {
            activeExecutions.add(jobExecution);
        }//from  ww w  .java  2s  .com
    } else {
        if (jsrJobOperator != null) {
            if (params != null) {
                jobExecution = new JobExecution(jsrJobOperator.restart(jobExecutionId, params.toProperties()));
            } else {
                jobExecution = new JobExecution(jsrJobOperator.restart(jobExecutionId, new Properties()));
            }
        } else {
            throw new NoSuchJobException(
                    String.format("Can't find job associated with job execution id %s to restart",
                            String.valueOf(jobExecutionId)));
        }
    }

    return jobExecution;
}

From source file:org.springframework.cloud.dataflow.server.batch.SimpleJobService.java

@Override
public JobExecution launch(String jobName, JobParameters jobParameters)
        throws NoSuchJobException, JobExecutionAlreadyRunningException, JobRestartException,
        JobInstanceAlreadyCompleteException, JobParametersInvalidException {

    JobExecution jobExecution = null;

    if (jobLocator.getJobNames().contains(jobName)) {
        Job job = jobLocator.getJob(jobName);

        JobExecution lastJobExecution = jobRepository.getLastJobExecution(jobName, jobParameters);
        boolean restart = false;
        if (lastJobExecution != null) {
            BatchStatus status = lastJobExecution.getStatus();
            if (status.isUnsuccessful() && status != BatchStatus.ABANDONED) {
                restart = true;//  w w w.  ja v  a  2s  . co m
            }
        }

        if (job.getJobParametersIncrementer() != null && !restart) {
            jobParameters = job.getJobParametersIncrementer().getNext(jobParameters);
        }

        jobExecution = jobLauncher.run(job, jobParameters);

        if (jobExecution.isRunning()) {
            activeExecutions.add(jobExecution);
        }
    } else {
        if (jsrJobOperator != null) {
            jobExecution = new JobExecution(jsrJobOperator.start(jobName, jobParameters.toProperties()));
        } else {
            throw new NoSuchJobException(
                    String.format("Unable to find job %s to launch", String.valueOf(jobName)));
        }
    }

    return jobExecution;
}

From source file:org.springframework.cloud.dataflow.server.batch.SimpleJobService.java

@Override
public JobExecution stop(Long jobExecutionId)
        throws NoSuchJobExecutionException, JobExecutionNotRunningException {

    JobExecution jobExecution = getJobExecution(jobExecutionId);
    if (!jobExecution.isRunning()) {
        throw new JobExecutionNotRunningException(
                "JobExecution is not running and therefore cannot be stopped");
    }/*  ww  w.ja  v  a 2 s .com*/

    logger.info("Stopping job execution: " + jobExecution);

    Collection<String> jsrJobNames = getJsrJobNames();

    if (jsrJobOperator != null && jsrJobNames.contains(jobExecution.getJobInstance().getJobName())) {
        jsrJobOperator.stop(jobExecutionId);
        jobExecution = getJobExecution(jobExecutionId);
    } else {
        jobExecution.stop();
        jobRepository.update(jobExecution);
    }
    return jobExecution;

}