org.springframework.batch.core.repository.dao

## Class JdbcJobExecutionDao

- java.lang.Object
- - org.springframework.batch.core.repository.dao.AbstractJdbcBatchMetadataDao
  - - org.springframework.batch.core.repository.dao.JdbcJobExecutionDao

- All Implemented Interfaces:
    JobExecutionDao, org.springframework.beans.factory.InitializingBean

      public class JdbcJobExecutionDao
      extends AbstractJdbcBatchMetadataDao
      implements JobExecutionDao, org.springframework.beans.factory.InitializingBean

  JDBC implementation of `JobExecutionDao`. Uses sequences (via Spring's `DataFieldMaxValueIncrementer` abstraction) to create all primary keys before inserting a new row. Objects are checked to ensure all mandatory fields to be stored are not null. If any are found to be null, an IllegalArgumentException will be thrown. This could be left to JdbcTemplate, however, the exception will be fairly vague, and fails to highlight which field caused the exception.
  Author:
    Lucas Ward, Dave Syer, Robert Kasanicky, Michael Minella, Mahmoud Ben Hassine, Dimitrios Liapis

- - ### Field Summary

    - ### Fields inherited from class org.springframework.batch.core.repository.dao.AbstractJdbcBatchMetadataDao

      `DEFAULT_EXIT_MESSAGE_LENGTH, DEFAULT_TABLE_PREFIX`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JdbcJobExecutionDao()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()`
    `java.util.List<JobExecution>` | `findJobExecutions(JobInstance job)` Return all `JobExecution`s for given `JobInstance`, sorted backwards by creation order (so the first element is the most recent).
    `java.util.Set<JobExecution>` | `findRunningJobExecutions(java.lang.String jobName)`
    `JobExecution` | `getJobExecution(java.lang.Long executionId)`
    `protected JobParameters` | `getJobParameters(java.lang.Long executionId)`
    `JobExecution` | `getLastJobExecution(JobInstance jobInstance)` Find the last `JobExecution` to have been created for a given `JobInstance`.
    `void` | `saveJobExecution(JobExecution jobExecution)` SQL implementation using Sequences via the Spring incrementer abstraction.
    `void` | `setExitMessageLength(int exitMessageLength)` Public setter for the exit message length in database.
    `void` | `setJobExecutionIncrementer(org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer jobExecutionIncrementer)` Setter for `DataFieldMaxValueIncrementer` to be used when generating primary keys for `JobExecution` instances.
    `void` | `synchronizeStatus(JobExecution jobExecution)` Because it may be possible that the status of a JobExecution is updated while running, the following method will synchronize only the status and version fields.
    `void` | `updateJobExecution(JobExecution jobExecution)` Update given JobExecution using a SQL UPDATE statement.

    - ### Methods inherited from class org.springframework.batch.core.repository.dao.AbstractJdbcBatchMetadataDao

      `getClobTypeToUse, getJdbcTemplate, getQuery, getTablePrefix, setClobTypeToUse, setJdbcTemplate, setTablePrefix`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### JdbcJobExecutionDao

          public JdbcJobExecutionDao()

  - ### Method Detail

    - #### setExitMessageLength

          public void setExitMessageLength(int exitMessageLength)

      Public setter for the exit message length in database. Do not set this if you haven't modified the schema.
      Parameters:
        `exitMessageLength` - the exitMessageLength to set

    - #### setJobExecutionIncrementer

          public void setJobExecutionIncrementer(org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer jobExecutionIncrementer)

      Setter for `DataFieldMaxValueIncrementer` to be used when generating primary keys for `JobExecution` instances.
      Parameters:
        `jobExecutionIncrementer` - the `DataFieldMaxValueIncrementer`

    - #### afterPropertiesSet

          public void afterPropertiesSet()
                                  throws java.lang.Exception

      Specified by:
        `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`
      Overrides:
        `afterPropertiesSet` in class `AbstractJdbcBatchMetadataDao`
      Throws:
        `java.lang.Exception`

    - #### findJobExecutions

          public java.util.List<JobExecution> findJobExecutions(JobInstance job)

      Description copied from interface: `JobExecutionDao`
      Return all `JobExecution`s for given `JobInstance`, sorted backwards by creation order (so the first element is the most recent).
      Specified by:
        `findJobExecutions` in interface `JobExecutionDao`
      Parameters:
        `job` - parent `JobInstance` of the `JobExecution`s to find.
      Returns:
        `List` containing JobExecutions for the jobInstance.

    - #### saveJobExecution

          public void saveJobExecution(JobExecution jobExecution)

      SQL implementation using Sequences via the Spring incrementer abstraction. Once a new id has been obtained, the JobExecution is saved via a SQL INSERT statement.
      Specified by:
        `saveJobExecution` in interface `JobExecutionDao`
      Parameters:
        `jobExecution` - `JobExecution` instance to be saved.
      Throws:
        `java.lang.IllegalArgumentException` - if jobExecution is null, as well as any of it's fields to be persisted.
      See Also:
        `JobExecutionDao.saveJobExecution(JobExecution)`

    - #### updateJobExecution

          public void updateJobExecution(JobExecution jobExecution)

      Update given JobExecution using a SQL UPDATE statement. The JobExecution is first checked to ensure all fields are not null, and that it has an ID. The database is then queried to ensure that the ID exists, which ensures that it is valid.
      Specified by:
        `updateJobExecution` in interface `JobExecutionDao`
      Parameters:
        `jobExecution` - `JobExecution` instance to be updated.
      See Also:
        `JobExecutionDao.updateJobExecution(JobExecution)`

    - #### getLastJobExecution

          @Nullable
          public JobExecution getLastJobExecution(JobInstance jobInstance)

      Description copied from interface: `JobExecutionDao`
      Find the last `JobExecution` to have been created for a given `JobInstance`.
      Specified by:
        `getLastJobExecution` in interface `JobExecutionDao`
      Parameters:
        `jobInstance` - the `JobInstance`
      Returns:
        the last `JobExecution` to execute for this instance or `null` if no job execution is found for the given job instance.

    - #### getJobExecution

          @Nullable
          public JobExecution getJobExecution(java.lang.Long executionId)

      Specified by:
        `getJobExecution` in interface `JobExecutionDao`
      Parameters:
        `executionId` - `Long` containing the id of the execution.
      Returns:
        the `JobExecution` for given identifier.

    - #### findRunningJobExecutions

          public java.util.Set<JobExecution> findRunningJobExecutions(java.lang.String jobName)

      Specified by:
        `findRunningJobExecutions` in interface `JobExecutionDao`
      Parameters:
        `jobName` - `String` containing the name of the job.
      Returns:
        all `JobExecution` that are still running (or indeterminate state), i.e. having null end date, for the specified job name.

    - #### synchronizeStatus

          public void synchronizeStatus(JobExecution jobExecution)

      Description copied from interface: `JobExecutionDao`
      Because it may be possible that the status of a JobExecution is updated while running, the following method will synchronize only the status and version fields.
      Specified by:
        `synchronizeStatus` in interface `JobExecutionDao`
      Parameters:
        `jobExecution` - to be updated.

    - #### getJobParameters

          protected JobParameters getJobParameters(java.lang.Long executionId)

      Parameters:
        `executionId` - `Long` containing the id for the execution.
      Returns:
        job parameters for the requested execution id