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

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `add(StepExecution stepExecution)` Save the `StepExecution` and its `ExecutionContext`.
    `void` | `addAll(java.util.Collection<StepExecution> stepExecutions)` Save a collection of `StepExecution`s and each `ExecutionContext`.
    `JobExecution` | `createJobExecution(JobInstance jobInstance, JobParameters jobParameters, java.lang.String jobConfigurationLocation)` Create a new `JobExecution` based upon the `JobInstance` it's associated with, the `JobParameters` used to execute it with and the location of the configuration file that defines the job.
    `JobExecution` | `createJobExecution(java.lang.String jobName, JobParameters jobParameters)` Create a `JobExecution` for a given `Job` and `JobParameters`.
    `JobInstance` | `createJobInstance(java.lang.String jobName, JobParameters jobParameters)` Create a new `JobInstance` with the name and job parameters provided.
    `JobExecution` | `getLastJobExecution(java.lang.String jobName, JobParameters jobParameters)`
    `StepExecution` | `getLastStepExecution(JobInstance jobInstance, java.lang.String stepName)`
    `int` | `getStepExecutionCount(JobInstance jobInstance, java.lang.String stepName)`
    `boolean` | `isJobInstanceExists(java.lang.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 Detail

    - #### isJobInstanceExists

          boolean isJobInstanceExists(java.lang.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(java.lang.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(JobInstance jobInstance,
                                          JobParameters jobParameters,
                                          java.lang.String jobConfigurationLocation)

      Create a new `JobExecution` based upon the `JobInstance` it's associated with, the `JobParameters` used to execute it with and the location of the configuration file that defines the job.
      Parameters:
        `jobInstance` - `JobInstance` instance to initialize the new JobExecution.
        `jobParameters` - `JobParameters` instance to initialize the new JobExecution.
        `jobConfigurationLocation` - `String` instance to initialize the new JobExecution.
      Returns:
        the new `JobExecution`.

    - #### createJobExecution

          JobExecution createJobExecution(java.lang.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(java.util.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,
                                                       java.lang.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,
                                    java.lang.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(java.lang.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