From 4e59bf9b84e0c2d8c30182e8e80b7fe2cee8a066 Mon Sep 17 00:00:00 2001 From: lucasward Date: Thu, 1 May 2008 05:07:12 +0000 Subject: [PATCH] BATCH-605:Added an new appendix that describes the meta-data table schema in detail. --- .../reference/images/meta-data-erd.png | Bin 0 -> 37584 bytes docs/src/site/docbook/reference/index.xml | 2 + .../docbook/reference/schema-appendix.xml | 448 ++++++++++++++++++ 3 files changed, 450 insertions(+) create mode 100755 docs/src/site/docbook/reference/images/meta-data-erd.png create mode 100644 docs/src/site/docbook/reference/schema-appendix.xml diff --git a/docs/src/site/docbook/reference/images/meta-data-erd.png b/docs/src/site/docbook/reference/images/meta-data-erd.png new file mode 100755 index 0000000000000000000000000000000000000000..2a7179068bac5ad0ca85fe82be3b0c9b440c765b GIT binary patch literal 37584 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 literal 0 HcmV?d00001 diff --git a/docs/src/site/docbook/reference/index.xml b/docs/src/site/docbook/reference/index.xml index e133beb63..ed1d2fb57 100644 --- a/docs/src/site/docbook/reference/index.xml +++ b/docs/src/site/docbook/reference/index.xml @@ -48,6 +48,8 @@ + + \ No newline at end of file diff --git a/docs/src/site/docbook/reference/schema-appendix.xml b/docs/src/site/docbook/reference/schema-appendix.xml new file mode 100644 index 000000000..871a731d0 --- /dev/null +++ b/docs/src/site/docbook/reference/schema-appendix.xml @@ -0,0 +1,448 @@ + + + + Meta-Data Schema + +
+ Overview + + The Spring Batch Meta-Data tables very closely match the Domain + objects that represent them in Java. For example, JobInstance, + JobExecution, JobParameters, StepExecution, and ExecutionContext map to + BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_JOB_PARAMS, + BATCH_STEP_EXECUTION, BATCH_STEP_EXECUTION_CONTEXT, respectively. The + JobRepository is responsible for saving and storing + each of java object into it's correct table. The following appendix + describes the meta-data tables in detail, along with many of the design + decisions that were made when creating them. When viewing the various + table creation statements below, it is important to realize that the + datatypes used are as generic as possible. Spring Batch provides many + schemas as examples, which all have varying datatypes due to quirks in + individual database vendors' handling of data types. Below is an ERD model + of all 5 tables and their relationships to one another: + + + + + + + +
+ Version + + Many of the databse tables discussed in this appendix contain a + version column. This column is important because Spring Batch employs an + optimistic locking strategy when dealing with updates to the database. + This means that each time a record is 'touched' (updated) the value in + the version column is incremented by one. When the repository goes back + to try and save the value, if the version number has change it will + throw OptimisticLockingFailureException, + indicating there has been an error with concurrent access. This check is + very necessary, since even though different batch jobs may be running in + different machines, they are all using the same database tables. +
+ +
+ Identity + + BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, and BATCH_STEP_EXECUTION + each contain columns ending in _ID, which act as primary keys for their + respective tables. However, they are not database generated keys, but + rather are generated by separate sequences. This is necessary because + after inserting one of the domain objects into the database, the key it + is given need to be set on the actual object, so that they can be + uniquely identified in Java. Newer database drivers (Jdbc 3.0 and up) + support this feature with database generated keys, but rather than + requiring it, sequences were used. Each variation of the schema will + contain some form of the following: + + CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ; +CREATE SEQUENCE BATCH_JOB_EXECUTION_SEQ; +CREATE SEQUENCE BATCH_JOB_SEQ; + + Many database vendors don't official support sequences. In these + cases, work arounds are used, such as the following for mySQL: + + CREATE TABLE BATCH_STEP_EXECUTION_SEQ (ID BIGINT NOT NULL) type=MYISAM; +INSERT INTO BATCH_STEP_EXECUTION_SEQ values(0); +CREATE TABLE BATCH_JOB_EXECUTION_SEQ (ID BIGINT NOT NULL) type=MYISAM; +INSERT INTO BATCH_JOB_EXECUTION_SEQ values(0); +CREATE TABLE BATCH_JOB_SEQ (ID BIGINT NOT NULL) type=MYISAM; +INSERT INTO BATCH_JOB_SEQ values(0); + + In the above case, a table is used in place of each sequence. The + Spring core class MySQLMaxValueIncrementer will + then increment hte one column in this sequence in order to give similar + functionality. +
+
+ +
+ BATCH_JOB_INSTANCE + + The BATCH_JOB_INSTANCE table holds all information relevant to a + JobInstance, and serves as the top of the overall + heirarchy. The following generic DDL statement is used to create + it: + + CREATE TABLE BATCH_JOB_INSTANCE ( + JOB_INSTANCE_ID BIGINT PRIMARY KEY , + VERSION BIGINT, + JOB_NAME VARCHAR(100) NOT NULL , + JOB_KEY VARCHAR(2500) +); + + Below are descriptions of each column in the table: + + + + JOB_INSTANCE_ID: The unique id that will identify the instance, + which is also the primary key. The value of this column should be + obtainable by calling the getId method on + JobInstance. + + + + VERSION: See above section. + + + + JOB_NAME: Name of the job obtained from the + Job object. Because it is required to identify + the instance, it must not be null. + + + + JOB_KEY: A serialization of the + JobParameters that uniquely identifies separate + instances of the same job from one another. + (JobInstances with the same job name + + +
+ +
+ BATCH_JOB_PARAMS + + The BATCH_JOB_PARAMS table holds all information relevant to the + JobParameters object. It contains 0 or more key/value pairs that together + uniquely identify a JobInstance and serve as a + record of the parameters a job was run with. It should be noted that the + table has been denormalized. Rather than creating a separate table for + each type, there is one table with a column indicating the type: + + CREATE TABLE BATCH_JOB_PARAMS ( + JOB_INSTANCE_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(100) NOT NULL , + STRING_VAL VARCHAR(250) , + DATE_VAL TIMESTAMP DEFAULT NULL, + LONG_VAL BIGINT , + DOUBLE_VAL DOUBLE PRECISION, + constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +); + + Below are descriptions for each column: + + + + JOB_INSTANCE_ID: Foreign Key from the BATCH_JOB_INSTANCE table + that indicates the job instance the parameter entry belongs to. It + should be noted that multiple rows (i.e key/value pairs) may exist for + each instance. + + + + TYPE_CD: String representation of the type of value stored, + which can be either a character string, date, long, or double. Because + the type must be known, it cannot be null. + + + + KEY_NAME: The Parameter key. + + + + STRING_VAL: Parameter value, if the type is string. + + + + DATE_VAL: Parameter value, if the type is date. + + + + LONG_VAL: Parameter value, if the type is a long. + + + + DOUBLE_VAL: Paramter value, if the type is double. + + + + It is worth noting that there is no primary key for this table. This + is simply because the framework has no use for one, and thus doesn't + require it. If a user so chooses, one may be added with a database + generated key, without causing any issues to the framework itself. +
+ +
+ BATCH_JOB_EXECUTION + + The BATCH_JOB_EXECUTION table holds all information relevant to the + JobExecution object. Every time a + Job is run there will always be a new + JobExecution, and a new row in this table: + + CREATE TABLE BATCH_JOB_EXECUTION ( + JOB_EXECUTION_ID BIGINT PRIMARY KEY , + VERSION BIGINT, + JOB_INSTANCE_ID BIGINT NOT NULL, + START_TIME TIMESTAMP DEFAULT NULL, + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR(10), + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + + Below are descriptions for each column: + + + + JOB_EXECUTION_ID: Primary key that uniquely identifies this + execution. The value of this column should be obtainable by calling + the getId method of the + JobExecution object. + + + + VERSION: See above section. + + + + JOB_INSTANCE_ID: Foreign key from the BATCH_JOB_INSTANCE table + indicating the instance to which this execution belongs. There may be + more than one execution per instance. + + + + START_TIME: Timestamp representing the time the execution was + started. + + + + END_TIME: Timestamp representing the time the execution was + finished, regardless of success or failure. An empty value in this + column even though the job is not currently running indicates that + there has been some type of error and the framework was unable to + perform a last save before failing. + + + + STATUS: Character string representing the status of the + execution. This may be COMPLETED, STARTED, etc. The object + representation of this column is the + BatchStatus enumeration. + + + + CONTINUABLE: Character indicating whether or not the execution + is currently able to continue. 'Y' for yes and 'N' for no. + + + + EXIT_CODE: Character string representing the exit code of the + execution. In the case of a command line job, this may be converted + into a number. + + + + EXIT_MESSAGE: Character string representing a more detailed + description of how the job exited. In the case of failure, this might + include as much of the stack trace as is possible. + + +
+ +
+ BATCH_STEP_EXECUTION + + The BATCH_STEP_EXECUTION table holds all information relevant to the + StepExecution object. This table is very similar in + many ways to the BATCH_JOB_EXECUTION table and there will always be at + least one entry per Step for each + JobExecution created: + + CREATE TABLE BATCH_STEP_EXECUTION ( + STEP_EXECUTION_ID BIGINT PRIMARY KEY , + VERSION BIGINT NOT NULL, + STEP_NAME VARCHAR(100) NOT NULL, + JOB_EXECUTION_ID BIGINT NOT NULL, + START_TIME TIMESTAMP NOT NULL , + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR(10), + COMMIT_COUNT BIGINT , + ITEM_COUNT BIGINT , + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +) ; + + Below are descriptions for each column: + + + + STEP_EXECUTION_ID: Primary key that uniquely identifies this + execution. The value of this column should be obtainable by calling + the getId method of the + StepExecution object. + + + + VERSION: See above section. + + + + STEP_NAME: The name of the step to which this execution + belongs. + + + + JOB_EXECUTION_ID: Foreign key from the BATCH_JOB_EXECUTION table + indicating the JobExecution to which this StepExecution belongs. There + may be only one StepExecution for a given + JobExecution for a given + Step name. + + + + START_TIME: Timestamp representing the time the execution was + started. + + + + END_TIME: Timestamp representing the time the execution was + finished, regardless of success or failure. An empty value in this + column even though the job is not currently running indicates that + there has been some type of error and the framework was unable to + perform a last save before failing. + + + + STATUS: Character string representing the status of the + execution. This may be COMPLETED, STARTED, etc. The object + representation of this column is the + BatchStatus enumeration. + + + + COMMIT_COUNT: The number of times in which the step has + committed a transaction during this execution. + + + + ITEM_COUNT: The number of items that have been writtne out + during this execution. + + + + CONTINUABLE: Character indicating whether or not the execution + is currently able to continue. 'Y' for yes and 'N' for no. + + + + EXIT_CODE: Character string representing the exit code of the + execution. In the case of a command line job, this may be converted + into a number. + + + + EXIT_MESSAGE: Character string representing a more detailed + description of how the job exited. In the case of failure, this might + include as much of the stack trace as is possible. + + +
+ +
+ BATCH_STEP_EXECUTION_CONTEXT + + The BATCH_STEP_EXECUTION_CONTEXT table holds all information + relevant to an ExecutionContext. There is exactly + one ExecutionContext per + StepExecution, and it contains all user defined + key/value pairs that need to persisted for a particular job run. This data + is usually state information that must be retrieved back after a failure + so that a JobInstance can 'start from where it left off'. As with the + BATCH_JOB_PARAMS table, this table has been denormalized and uses a column + to determine the type: + + CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( + STEP_EXECUTION_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , + DATE_VAL TIMESTAMP DEFAULT NULL , + LONG_VAL VARCHAR(10) , + DOUBLE_VAL DOUBLE PRECISION , + OBJECT_VAL BLOB, + constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) + references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) +) ; + + Below are descriptions for each column: + + + + STEP_EXECUTION_ID: Foreign key representing the + StepExecution to which the context belongs. + There may be more than one row associated to a given + StepExecution. + + + + TYPE_CD: String representation of the type of value stored, + which can be either a character string, date, long, or double. Because + the type must be known, it cannot be null. + + + + KEY_NAME: The Parameter key. + + + + STRING_VAL: Parameter value, if the type is string. + + + + DATE_VAL: Parameter value, if the type is date. + + + + LONG_VAL: Parameter value, if the type is a long. + + + + DOUBLE_VAL: Paramter value, if the type is double. + + + + OBJECT_VAL: Parameter value, if the type is a blob. + + + + When an ExecutionContext is stored, values that are one of the well + known types above will be stored as their respective type. Any unknown + type will be serialized to a blob and stored in the OBJECT_VAL column. As + with BATCH_JOB_PARAMS, there is no primary key for this table. This is + simply because the framework has no use for one, and thus doesn't require + it. If a user so chooses, one may be added with a database generated key, + without causing any issues to the framework itself. +
+
\ No newline at end of file