Class JBatchJDBCPersistenceManager

    • Constructor Detail

      • JBatchJDBCPersistenceManager

        public JBatchJDBCPersistenceManager()
    • Method Detail

      • init

        public void init​(com.ibm.jbatch.spi.services.IBatchConfig batchConfig)
                  throws com.ibm.jbatch.container.exception.BatchContainerServiceException
        Specified by:
        init in interface com.ibm.jbatch.spi.services.IBatchServiceBase
        Throws:
        com.ibm.jbatch.container.exception.BatchContainerServiceException
      • getCheckpointData

        public com.ibm.jbatch.container.persistence.CheckpointData getCheckpointData​(com.ibm.jbatch.container.persistence.CheckpointDataKey key)
        Specified by:
        getCheckpointData in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • updateCheckpointData

        public void updateCheckpointData​(com.ibm.jbatch.container.persistence.CheckpointDataKey key,
                                         com.ibm.jbatch.container.persistence.CheckpointData value)
        Specified by:
        updateCheckpointData in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • createCheckpointData

        public void createCheckpointData​(com.ibm.jbatch.container.persistence.CheckpointDataKey key,
                                         com.ibm.jbatch.container.persistence.CheckpointData value)
        Specified by:
        createCheckpointData in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • setDefaultSchema

        public String setDefaultSchema()
                                throws SQLException
        Set the default schema to the username obtained from the connection based on the datasource
        Returns:
        the name of the default database schema
        Throws:
        SQLException
      • isSchemaValid

        protected boolean isSchemaValid()
                                 throws SQLException
        Checks if the schema exists in the database. If not connect to the default schema
        Returns:
        true if the schema exists, false otherwise.
        Throws:
        SQLException
      • checkTables

        protected void checkTables()
                            throws SQLException
        Check if the h2 jbatch tables exist, if not create them
        Throws:
        SQLException
      • createTableIfNotExists

        protected void createTableIfNotExists​(String tableName,
                                              String createTableStatement)
                                       throws SQLException
        Create the jbatch tables if they do not exist
        Parameters:
        tableName -
        createTableStatement -
        Throws:
        SQLException
      • checkIfTableExists

        public boolean checkIfTableExists​(DataSource dSource,
                                          String tableName,
                                          String schemaName)
        Note: H2 has a configuration setting DATABASE_TO_UPPER which is set to true per default. So any table name is converted to upper case which is why you need to query for the table in upper case (or set DATABASE_TO_UPPER to false).
        Parameters:
        dSource -
        tableName -
        schemaName -
      • getTableRowCount

        public int getTableRowCount​(ResultSet resultSet)
                             throws SQLException
        Retrieve the number of rows in the resultset. This method is used to check if a table exists in a given schema
        Throws:
        SQLException
      • executeStatement

        protected void executeStatement​(String statement)
                                 throws SQLException
        Executes the provided SQL statement
        Parameters:
        statement -
        Throws:
        SQLException
      • getConnection

        protected Connection getConnection()
                                    throws SQLException
        Get a connection from the datasource
        Returns:
        the database connection and sets the schema
        Throws:
        SQLException
      • getConnectionToDefaultSchema

        protected Connection getConnectionToDefaultSchema()
                                                   throws SQLException
        Returns:
        the database connection. The schema is set to whatever default is used by the datasource.
        Throws:
        SQLException
      • setSchemaOnConnection

        protected void setSchemaOnConnection​(Connection connection)
                                      throws SQLException
        Set the schema to the default schema or the schema defined at batch configuration time
        Parameters:
        connection -
        Throws:
        SQLException
      • queryCheckpointData

        protected com.ibm.jbatch.container.persistence.CheckpointData queryCheckpointData​(Object key)
        select data from DB table
        Parameters:
        key - - the IPersistenceDataKey object
        Returns:
        List of serializable objects store in the DB table Ex. select id, obj from tablename where id = ?
      • insertCheckpointData

        protected <T> void insertCheckpointData​(Object key,
                                                T value)
        Insert data to DB table
        Parameters:
        key - - the IPersistenceDataKey object
        value - - serializable object to store Ex. insert into tablename values(?, ?)
      • updateCheckpointData

        protected void updateCheckpointData​(Object key,
                                            com.ibm.jbatch.container.persistence.CheckpointData value)
        update data in DB table
        Parameters:
        value - - serializable object to store
        key - - the IPersistenceDataKey object
        query - - SQL statement to execute. Ex. update tablename set obj = ? where id = ?
      • cleanupConnection

        protected void cleanupConnection​(Connection conn,
                                         ResultSet rs,
                                         PreparedStatement statement)
        closes connection, result set and statement
        Parameters:
        conn - - connection object to close
        rs - - result set object to close
        statement - - statement object to close
      • cleanupConnection

        protected void cleanupConnection​(Connection conn,
                                         PreparedStatement statement)
        closes connection and statement
        Parameters:
        conn - - connection object to close
        statement - - statement object to close
      • jobOperatorGetJobInstanceCount

        public int jobOperatorGetJobInstanceCount​(String jobName,
                                                  String appTag)
        Specified by:
        jobOperatorGetJobInstanceCount in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorGetJobInstanceCount

        public int jobOperatorGetJobInstanceCount​(String jobName)
        Specified by:
        jobOperatorGetJobInstanceCount in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorGetJobInstanceIds

        public List<Long> jobOperatorGetJobInstanceIds​(String jobName,
                                                       String appTag,
                                                       int start,
                                                       int count)
        Specified by:
        jobOperatorGetJobInstanceIds in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorGetJobInstanceIds

        public List<Long> jobOperatorGetJobInstanceIds​(String jobName,
                                                       int start,
                                                       int count)
        Specified by:
        jobOperatorGetJobInstanceIds in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorGetExternalJobInstanceData

        public Map<Long,​String> jobOperatorGetExternalJobInstanceData()
        Specified by:
        jobOperatorGetExternalJobInstanceData in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorQueryJobExecutionTimestamp

        public Timestamp jobOperatorQueryJobExecutionTimestamp​(long key,
                                                               com.ibm.jbatch.container.services.IPersistenceManagerService.TimestampType timestampType)
        Specified by:
        jobOperatorQueryJobExecutionTimestamp in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorQueryJobExecutionBatchStatus

        public String jobOperatorQueryJobExecutionBatchStatus​(long key)
        Specified by:
        jobOperatorQueryJobExecutionBatchStatus in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorQueryJobExecutionExitStatus

        public String jobOperatorQueryJobExecutionExitStatus​(long key)
        Specified by:
        jobOperatorQueryJobExecutionExitStatus in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorQueryJobExecutionJobInstanceId

        public long jobOperatorQueryJobExecutionJobInstanceId​(long executionID)
                                                       throws jakarta.batch.operations.NoSuchJobExecutionException
        Specified by:
        jobOperatorQueryJobExecutionJobInstanceId in interface com.ibm.jbatch.container.services.IPersistenceManagerService
        Throws:
        jakarta.batch.operations.NoSuchJobExecutionException
      • getParameters

        public Properties getParameters​(long executionId)
                                 throws jakarta.batch.operations.NoSuchJobExecutionException
        Specified by:
        getParameters in interface com.ibm.jbatch.container.services.IPersistenceManagerService
        Throws:
        jakarta.batch.operations.NoSuchJobExecutionException
      • getMostRecentStepExecutionsForJobInstance

        public Map<String,​jakarta.batch.runtime.StepExecution> getMostRecentStepExecutionsForJobInstance​(long instanceId)
        Specified by:
        getMostRecentStepExecutionsForJobInstance in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • getStepExecutionsForJobExecution

        public List<jakarta.batch.runtime.StepExecution> getStepExecutionsForJobExecution​(long execid)
        Specified by:
        getStepExecutionsForJobExecution in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • getStepExecutionByStepExecutionId

        public jakarta.batch.runtime.StepExecution getStepExecutionByStepExecutionId​(long stepExecId)
        Specified by:
        getStepExecutionByStepExecutionId in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • updateBatchStatusOnly

        public void updateBatchStatusOnly​(long key,
                                          jakarta.batch.runtime.BatchStatus batchStatus,
                                          Timestamp updates)
        Specified by:
        updateBatchStatusOnly in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • updateWithFinalExecutionStatusesAndTimestamps

        public void updateWithFinalExecutionStatusesAndTimestamps​(long key,
                                                                  jakarta.batch.runtime.BatchStatus batchStatus,
                                                                  String exitStatus,
                                                                  Timestamp updates)
        Specified by:
        updateWithFinalExecutionStatusesAndTimestamps in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • markJobStarted

        public void markJobStarted​(long key,
                                   Timestamp startTS)
        Specified by:
        markJobStarted in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorGetJobExecution

        public com.ibm.jbatch.container.services.IJobExecution jobOperatorGetJobExecution​(long jobExecutionId)
        Specified by:
        jobOperatorGetJobExecution in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorGetJobExecutions

        public List<com.ibm.jbatch.container.services.IJobExecution> jobOperatorGetJobExecutions​(long jobInstanceId)
        Specified by:
        jobOperatorGetJobExecutions in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • jobOperatorGetRunningExecutions

        public Set<Long> jobOperatorGetRunningExecutions​(String jobName)
        Specified by:
        jobOperatorGetRunningExecutions in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • getJobCurrentTag

        public String getJobCurrentTag​(long jobInstanceId)
        Specified by:
        getJobCurrentTag in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • purge

        public void purge​(String apptag)
        Specified by:
        purge in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • getJobStatusFromExecution

        public com.ibm.jbatch.container.status.JobStatus getJobStatusFromExecution​(long executionId)
        Specified by:
        getJobStatusFromExecution in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • getJobInstanceIdByExecutionId

        public long getJobInstanceIdByExecutionId​(long executionId)
                                           throws jakarta.batch.operations.NoSuchJobExecutionException
        Specified by:
        getJobInstanceIdByExecutionId in interface com.ibm.jbatch.container.services.IPersistenceManagerService
        Throws:
        jakarta.batch.operations.NoSuchJobExecutionException
      • serializeObject

        protected byte[] serializeObject​(Serializable theObject)
                                  throws IOException
        This method is used to serialized an object saved into a table BLOB field.
        Parameters:
        theObject - the object to be serialized
        Returns:
        a object byte array
        Throws:
        IOException
      • createSubJobInstance

        public jakarta.batch.runtime.JobInstance createSubJobInstance​(String name,
                                                                      String apptag)
        Specified by:
        createSubJobInstance in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • createJobInstance

        public jakarta.batch.runtime.JobInstance createJobInstance​(String name,
                                                                   String apptag,
                                                                   String jobXml)
        Specified by:
        createJobInstance in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • createJobExecution

        public com.ibm.jbatch.container.jobinstance.RuntimeJobExecution createJobExecution​(jakarta.batch.runtime.JobInstance jobInstance,
                                                                                           Properties jobParameters,
                                                                                           jakarta.batch.runtime.BatchStatus batchStatus)
        Specified by:
        createJobExecution in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • createRuntimeJobExecutionEntry

        protected long createRuntimeJobExecutionEntry​(jakarta.batch.runtime.JobInstance jobInstance,
                                                      Properties jobParameters,
                                                      jakarta.batch.runtime.BatchStatus batchStatus,
                                                      Timestamp timestamp)
      • createFlowInSplitExecution

        public com.ibm.jbatch.container.jobinstance.RuntimeFlowInSplitExecution createFlowInSplitExecution​(jakarta.batch.runtime.JobInstance jobInstance,
                                                                                                           jakarta.batch.runtime.BatchStatus batchStatus)
        Specified by:
        createFlowInSplitExecution in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • createStepExecution

        public com.ibm.jbatch.container.jobinstance.StepExecutionImpl createStepExecution​(long rootJobExecId,
                                                                                          com.ibm.jbatch.container.context.impl.StepContextImpl stepContext)
        Specified by:
        createStepExecution in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • createStepExecution

        protected com.ibm.jbatch.container.jobinstance.StepExecutionImpl createStepExecution​(long rootJobExecId,
                                                                                             String batchStatus,
                                                                                             String exitStatus,
                                                                                             String stepName,
                                                                                             long readCount,
                                                                                             long writeCount,
                                                                                             long commitCount,
                                                                                             long rollbackCount,
                                                                                             long readSkipCount,
                                                                                             long processSkipCount,
                                                                                             long filterCount,
                                                                                             long writeSkipCount,
                                                                                             Timestamp startTime,
                                                                                             Timestamp endTime,
                                                                                             Serializable persistentData)
      • updateStepExecution

        public void updateStepExecution​(com.ibm.jbatch.container.context.impl.StepContextImpl stepContext)
        Specified by:
        updateStepExecution in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • getPartitionLevelJobInstanceWildCard

        protected String getPartitionLevelJobInstanceWildCard​(long rootJobExecutionId,
                                                              String stepName)
        Obviously would be nice if the code writing this special format were in the same place as this code reading it. Assumes format like: JOBINSTANCEDATA (jobinstanceid name, ...) 1197,"partitionMetrics","NOTSET" 1198,":1197:step1:0","NOTSET" 1199,":1197:step1:1","NOTSET" 1200,":1197:step2:0","NOTSET"
        Parameters:
        rootJobExecutionId - JobExecution id of the top-level job
        stepName - Step name of the top-level stepName
      • updateWithFinalPartitionAggregateStepExecution

        public void updateWithFinalPartitionAggregateStepExecution​(long rootJobExecutionId,
                                                                   com.ibm.jbatch.container.context.impl.StepContextImpl stepContext)
        Specified by:
        updateWithFinalPartitionAggregateStepExecution in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • updateStepExecutionWithMetrics

        protected void updateStepExecutionWithMetrics​(com.ibm.jbatch.container.context.impl.StepContextImpl stepContext,
                                                      long readCount,
                                                      long writeCount,
                                                      long commitCount,
                                                      long rollbackCount,
                                                      long readSkipCount,
                                                      long processSkipCount,
                                                      long filterCount,
                                                      long writeSkipCount)
      • createJobStatus

        public com.ibm.jbatch.container.status.JobStatus createJobStatus​(long jobInstanceId)
        Specified by:
        createJobStatus in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • getJobStatus

        public com.ibm.jbatch.container.status.JobStatus getJobStatus​(long instanceId)
        Specified by:
        getJobStatus in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • updateJobStatus

        public void updateJobStatus​(long instanceId,
                                    com.ibm.jbatch.container.status.JobStatus jobStatus)
        Specified by:
        updateJobStatus in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • createStepStatus

        public com.ibm.jbatch.container.status.StepStatus createStepStatus​(long stepExecId)
        Specified by:
        createStepStatus in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • getStepStatus

        public com.ibm.jbatch.container.status.StepStatus getStepStatus​(long instanceId,
                                                                        String stepName)
        Specified by:
        getStepStatus in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • updateStepStatus

        public void updateStepStatus​(long stepExecutionId,
                                     com.ibm.jbatch.container.status.StepStatus stepStatus)
        Specified by:
        updateStepStatus in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • getTagName

        public String getTagName​(long jobExecutionId)
        Specified by:
        getTagName in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • getMostRecentExecutionId

        public long getMostRecentExecutionId​(long jobInstanceId)
        Specified by:
        getMostRecentExecutionId in interface com.ibm.jbatch.container.services.IPersistenceManagerService
      • shutdown

        public void shutdown()
                      throws com.ibm.jbatch.container.exception.BatchContainerServiceException
        Specified by:
        shutdown in interface com.ibm.jbatch.spi.services.IBatchServiceBase
        Throws:
        com.ibm.jbatch.container.exception.BatchContainerServiceException
      • getSharedTableMap

        protected Map<String,​String> getSharedTableMap()
        Method invoked to insert the table key strings into a hashmap and to add the prefix and suffix to the table names
      • getSharedQueryMap

        protected Map<String,​String> getSharedQueryMap​(com.ibm.jbatch.spi.services.IBatchConfig batchConfig)
                                                      throws SQLException
        Method invoked to insert the query strings used by all database types into a hashmap
        Parameters:
        batchConfig -
        Returns:
        Throws:
        SQLException