Package org.springframework.batch.core.repository

# Interface JobRepository

All Known Implementing Classes:
  `SimpleJobRepository`

public interface JobRepository

Repository responsible for persistence of batch meta-data entities.

Author:
  Lucas Ward, Dave Syer, Robert Kasanicky, David Turanski, Michael Minella, Mahmoud Ben Hassine
See Also:
  - `JobInstance`
  - `JobExecution`
  - `StepExecution`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `add(StepExecution stepExecution)`
  Save the `StepExecution` and its `ExecutionContext`.
  `void`
  `addAll(Collection<StepExecution> stepExecutions)`
  Save a collection of `StepExecution`s and each `ExecutionContext`.
  `JobExecution`
  `createJobExecution(String jobName, JobParameters jobParameters)`
  Create a `JobExecution` for a given `Job` and `JobParameters`.
  `JobInstance`
  `createJobInstance(String jobName, JobParameters jobParameters)`
  Create a new `JobInstance` with the name and job parameters provided.
  `JobExecution`
  `getLastJobExecution(String jobName, JobParameters jobParameters)`
  `StepExecution`
  `getLastStepExecution(JobInstance jobInstance, String stepName)`
  `int`
  `getStepExecutionCount(JobInstance jobInstance, String stepName)`
  `boolean`
  `isJobInstanceExists(String jobName, JobParameters jobParameters)`
  Check if an instance of this job already exists with the parameters provided.
  `void`
  `update(JobExecution jobExecution)`
  Update the `JobExecution` (but not its `ExecutionContext`).
  `void`
  `update(StepExecution stepExecution)`
  Update the `StepExecution` (but not its `ExecutionContext`).
  `void`
  `updateExecutionContext(JobExecution jobExecution)`
  Persist the updated `ExecutionContext` of the given `JobExecution`.
  `void`
  `updateExecutionContext(StepExecution stepExecution)`
  Persist the updated `ExecutionContext`s of the given `StepExecution`.

- ## Method Details

  - ### isJobInstanceExists

    boolean isJobInstanceExists(String jobName, JobParameters jobParameters)
    Check if an instance of this job already exists with the parameters provided.
    Parameters:
      `jobName` - the name of the job
      `jobParameters` - the parameters to match
    Returns:
      true if a `JobInstance` already exists for this job name and job parameters

  - ### createJobInstance

    JobInstance createJobInstance(String jobName, JobParameters jobParameters)
    Create a new `JobInstance` with the name and job parameters provided.
    Parameters:
      `jobName` - logical name of the job
      `jobParameters` - parameters used to execute the job
    Returns:
      the new `JobInstance`

  - ### createJobExecution

    JobExecution createJobExecution(String jobName, JobParameters jobParameters) throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException

    Create a `JobExecution` for a given `Job` and `JobParameters`. If matching `JobInstance` already exists, the job must be restartable and it's last JobExecution must *not* be completed. If matching `JobInstance` does not exist yet it will be created.

    If this method is run in a transaction (as it normally would be) with isolation level at `Isolation.REPEATABLE_READ` or better, then this method should block if another transaction is already executing it (for the same `JobParameters` and job name). The first transaction to complete in this scenario obtains a valid `JobExecution`, and others throw `JobExecutionAlreadyRunningException` (or timeout). There are no such guarantees if the `JobInstanceDao` and `JobExecutionDao` do not respect the transaction isolation levels (e.g. if using a non-relational data-store, or if the platform does not support the higher isolation levels).

    Parameters:
      `jobName` - the name of the job that is to be executed
      `jobParameters` - the runtime parameters for the job
    Returns:
      a valid `JobExecution` for the arguments provided
    Throws:
      `JobExecutionAlreadyRunningException` - if there is a `JobExecution` already running for the job instance with the provided job and parameters.
      `JobRestartException` - if one or more existing `JobInstance`s is found with the same parameters and `Job.isRestartable()` is false.
      `JobInstanceAlreadyCompleteException` - if a `JobInstance` is found and was already completed successfully.

  - ### update

    void update(JobExecution jobExecution)
    Update the `JobExecution` (but not its `ExecutionContext`). Preconditions: `JobExecution` must contain a valid `JobInstance` and be saved (have an id assigned).
    Parameters:
      `jobExecution` - `JobExecution` instance to be updated in the repo.

  - ### add

    void add(StepExecution stepExecution)
    Save the `StepExecution` and its `ExecutionContext`. ID will be assigned - it is not permitted that an ID be assigned before calling this method. Instead, it should be left blank, to be assigned by a `JobRepository`. Preconditions: `StepExecution` must have a valid `Step`.
    Parameters:
      `stepExecution` - `StepExecution` instance to be added to the repo.

  - ### addAll

    void addAll(Collection<StepExecution> stepExecutions)
    Save a collection of `StepExecution`s and each `ExecutionContext`. The StepExecution ID will be assigned - it is not permitted that an ID be assigned before calling this method. Instead, it should be left blank, to be assigned by `JobRepository`. Preconditions: `StepExecution` must have a valid `Step`.
    Parameters:
      `stepExecutions` - collection of `StepExecution` instances to be added to the repo.

  - ### update

    void update(StepExecution stepExecution)
    Update the `StepExecution` (but not its `ExecutionContext`). Preconditions: `StepExecution` must be saved (have an id assigned).
    Parameters:
      `stepExecution` - `StepExecution` instance to be updated in the repo.

  - ### updateExecutionContext

    void updateExecutionContext(StepExecution stepExecution)
    Persist the updated `ExecutionContext`s of the given `StepExecution`.
    Parameters:
      `stepExecution` - `StepExecution` instance to be used to update the context.

  - ### updateExecutionContext

    void updateExecutionContext(JobExecution jobExecution)
    Persist the updated `ExecutionContext` of the given `JobExecution`.
    Parameters:
      `jobExecution` - `JobExecution` instance to be used to update the context.

  - ### getLastStepExecution

    @Nullable StepExecution getLastStepExecution(JobInstance jobInstance, String stepName)
    Parameters:
      `jobInstance` - `JobInstance` instance containing the step executions.
      `stepName` - the name of the step execution that might have run.
    Returns:
      the last execution of step for the given job instance.

  - ### getStepExecutionCount

    int getStepExecutionCount(JobInstance jobInstance, String stepName)
    Parameters:
      `jobInstance` - `JobInstance` instance containing the step executions.
      `stepName` - the name of the step execution that might have run.
    Returns:
      the execution count of the step within the given job instance.

  - ### getLastJobExecution

    @Nullable JobExecution getLastJobExecution(String jobName, JobParameters jobParameters)
    Parameters:
      `jobName` - the name of the job that might have run
      `jobParameters` - parameters identifying the `JobInstance`
    Returns:
      the last execution of job if exists, null otherwise