RESOLVED - issue BATCH-195: JobIdentifier with simple string key
http://opensource.atlassian.com/projects/spring/browse/BATCH-195
This commit is contained in:
@@ -15,20 +15,22 @@
|
||||
*/
|
||||
package org.springframework.batch.execution.bootstrap.support;
|
||||
|
||||
|
||||
/**
|
||||
* Implementation of the {@link SystemExiter} interface
|
||||
* that calls the standards System.exit method. It should
|
||||
* be noted that there will be no unit tests for this class,
|
||||
* since there is only one line of actual code, that would only
|
||||
* be testable by mocking System or Runtime.
|
||||
* Implementation of the {@link SystemExiter} interface that calls the standards
|
||||
* System.exit method. It should be noted that there will be no unit tests for
|
||||
* this class, since there is only one line of actual code, that would only be
|
||||
* testable by mocking System or Runtime.
|
||||
*
|
||||
* @author Lucas Ward
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JvmSystemExiter implements SystemExiter {
|
||||
|
||||
/* (non-Javadoc)
|
||||
/**
|
||||
* Delegate call to System.exit() with the argument provided. Do not use
|
||||
* this at home children!
|
||||
*
|
||||
* @see org.springframework.batch.execution.bootstrap.SystemExiter#exit(int)
|
||||
*/
|
||||
public void exit(int status) {
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import org.hibernate.EmptyInterceptor;
|
||||
import org.springframework.batch.core.domain.JobIdentifier;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.execution.runtime.DefaultJobIdentifier;
|
||||
import org.springframework.batch.execution.runtime.ScheduledJobIdentifier;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
@@ -25,11 +29,15 @@ import org.springframework.util.ClassUtils;
|
||||
public class EntityNameInterceptor extends EmptyInterceptor {
|
||||
|
||||
private static final String SIMPLE_JOB_INSTANCE = "SimpleJobInstance";
|
||||
private Map identifierTypes = new HashMap();
|
||||
private Map identifierTypes;
|
||||
private Set entrySet;
|
||||
|
||||
{
|
||||
identifierTypes.put(ScheduledJobIdentifier.class,
|
||||
public EntityNameInterceptor() {
|
||||
Map types = new HashMap();
|
||||
types.put(ScheduledJobIdentifier.class,
|
||||
"ScheduledJobInstance");
|
||||
types.put(DefaultJobIdentifier.class, "DefaultJobInstance");
|
||||
setIdentifierTypes(types);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -45,6 +53,7 @@ public class EntityNameInterceptor extends EmptyInterceptor {
|
||||
* the identifierTypes to set
|
||||
*/
|
||||
public void setIdentifierTypes(Map types) {
|
||||
|
||||
this.identifierTypes = new HashMap();
|
||||
for (Iterator iterator = types.entrySet().iterator(); iterator
|
||||
.hasNext();) {
|
||||
@@ -63,6 +72,10 @@ public class EntityNameInterceptor extends EmptyInterceptor {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.entrySet = new TreeSet(new ClassComparator());
|
||||
entrySet.addAll(identifierTypes.keySet());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -75,16 +88,38 @@ public class EntityNameInterceptor extends EmptyInterceptor {
|
||||
public String getEntityName(Object object) {
|
||||
if (object instanceof JobInstance) {
|
||||
JobInstance instance = (JobInstance) object;
|
||||
for (Iterator iterator = identifierTypes.entrySet().iterator(); iterator
|
||||
.hasNext();) {
|
||||
Map.Entry entry = (Map.Entry) iterator.next();
|
||||
Class key = (Class) entry.getKey();
|
||||
|
||||
for (Iterator iterator = entrySet.iterator(); iterator.hasNext();) {
|
||||
Class key = (Class) iterator.next();
|
||||
if (key.isAssignableFrom(instance.getIdentifier().getClass())) {
|
||||
return (String) entry.getValue();
|
||||
return (String) identifierTypes.get(key);
|
||||
}
|
||||
}
|
||||
return SIMPLE_JOB_INSTANCE;
|
||||
}
|
||||
return super.getEntityName(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* Comparator for classes to order by inheritance.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
private class ClassComparator implements Comparator {
|
||||
/**
|
||||
* @return 1 if arg0 is assignable from arg1
|
||||
* @return -1 otherwise
|
||||
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
|
||||
*/
|
||||
public int compare(Object arg0, Object arg1) {
|
||||
Class cls0 = (Class) arg0;
|
||||
Class cls1 = (Class) arg1;
|
||||
if (cls0.isAssignableFrom(cls1)) {
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -37,13 +37,12 @@ import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* SQL implementation of {@link JobDao}. Uses sequences (via Spring's
|
||||
*
|
||||
* @link 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.
|
||||
* {@link 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
|
||||
* @author Dave Syer
|
||||
@@ -58,11 +57,11 @@ public class SqlJobDao implements JobDao, InitializingBean {
|
||||
private String tablePrefix = DEFAULT_TABLE_PREFIX;
|
||||
|
||||
// Job SQL statements
|
||||
private static final String CREATE_JOB = "INSERT into %PREFIX%JOB(ID, JOB_NAME, JOB_STREAM, SCHEDULE_DATE, JOB_RUN)"
|
||||
+ " values (?, ?, ?, ?, ?)";
|
||||
private static final String CREATE_JOB = "INSERT into %PREFIX%JOB(ID, JOB_NAME, JOB_KEY, SCHEDULE_DATE)"
|
||||
+ " values (?, ?, ?, ?)";
|
||||
|
||||
private static final String FIND_JOBS = "SELECT ID, STATUS from %PREFIX%JOB where JOB_NAME = ? and "
|
||||
+ "JOB_STREAM = ? and SCHEDULE_DATE = ? and JOB_RUN = ?";
|
||||
+ "JOB_KEY = ? and SCHEDULE_DATE = ?";
|
||||
|
||||
private static final String UPDATE_JOB = "UPDATE %PREFIX%JOB set STATUS = ? where ID = ?";
|
||||
|
||||
@@ -99,12 +98,12 @@ public class SqlJobDao implements JobDao, InitializingBean {
|
||||
/**
|
||||
* In this sql implementation a job id is obtained by asking the
|
||||
* jobIncrementer (which is likely a sequence) for the nextLong, and then
|
||||
* passing the Id and identifier values (job name, stream, run, schedule
|
||||
* date) into an INSERT statement.
|
||||
* passing the Id and identifier values (job name, jobKey, schedule date)
|
||||
* into an INSERT statement.
|
||||
*
|
||||
* @see JobDao#createJob(JobIdentifier)
|
||||
* @throws IllegalArgumentException
|
||||
* if any JobRuntimeInformation fields are null.
|
||||
* if any {@link JobIdentifier} fields are null.
|
||||
*/
|
||||
public JobInstance createJob(JobIdentifier jobIdentifier) {
|
||||
|
||||
@@ -114,8 +113,7 @@ public class SqlJobDao implements JobDao, InitializingBean {
|
||||
|
||||
Long jobId = new Long(jobIncrementer.nextLongValue());
|
||||
Object[] parameters = new Object[] { jobId, defaultJobId.getName(),
|
||||
defaultJobId.getJobStream(), defaultJobId.getScheduleDate(),
|
||||
new Long(defaultJobId.getJobRun()) };
|
||||
defaultJobId.getJobKey(), defaultJobId.getScheduleDate() };
|
||||
jdbcTemplate.update(getCreateJobQuery(), parameters);
|
||||
|
||||
JobInstance job = new JobInstance(jobIdentifier, jobId);
|
||||
@@ -128,7 +126,7 @@ public class SqlJobDao implements JobDao, InitializingBean {
|
||||
*
|
||||
* @see JobDao#findJobs(JobIdentifier)
|
||||
* @throws IllegalArgumentException
|
||||
* if any JobRuntimeInformation fields are null.
|
||||
* if any {@link JobIdentifier} fields are null.
|
||||
*/
|
||||
public List findJobs(final JobIdentifier jobIdentifier) {
|
||||
|
||||
@@ -137,8 +135,7 @@ public class SqlJobDao implements JobDao, InitializingBean {
|
||||
ScheduledJobIdentifier defaultJobId = getScheduledJobIdentifier(jobIdentifier);
|
||||
|
||||
Object[] parameters = new Object[] { defaultJobId.getName(),
|
||||
defaultJobId.getJobStream(), defaultJobId.getScheduleDate(),
|
||||
new Integer(defaultJobId.getJobRun()) };
|
||||
defaultJobId.getJobKey(), defaultJobId.getScheduleDate() };
|
||||
|
||||
RowMapper rowMapper = new RowMapper() {
|
||||
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
@@ -232,10 +229,11 @@ public class SqlJobDao implements JobDao, InitializingBean {
|
||||
+ " not found.");
|
||||
}
|
||||
|
||||
jdbcTemplate.update(getUpdateJobExecutionQuery(), parameters,
|
||||
new int[] { Types.TIMESTAMP,
|
||||
Types.TIMESTAMP, Types.VARCHAR, Types.CHAR,
|
||||
Types.VARCHAR, Types.VARCHAR, Types.INTEGER });
|
||||
jdbcTemplate
|
||||
.update(getUpdateJobExecutionQuery(), parameters,
|
||||
new int[] { Types.TIMESTAMP, Types.TIMESTAMP,
|
||||
Types.VARCHAR, Types.CHAR, Types.VARCHAR,
|
||||
Types.VARCHAR, Types.INTEGER });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -340,24 +338,24 @@ public class SqlJobDao implements JobDao, InitializingBean {
|
||||
"JobExecution status cannot be null.");
|
||||
}
|
||||
|
||||
/*
|
||||
* Validate JobRuntimeInformation. Due to differing requirements, it is
|
||||
/**
|
||||
* Validate {@link JobIdentifier}. Due to differing requirements, it is
|
||||
* acceptable for any field to be blank, however null fields may cause odd
|
||||
* and vague exception reports from the database driver.
|
||||
*/
|
||||
private void validateJobIdentifier(JobIdentifier jobIdentifier) {
|
||||
|
||||
Assert.notNull(jobIdentifier, "JobRuntimeInformation cannot be null.");
|
||||
Assert.notNull(jobIdentifier, "JobIdentifier cannot be null.");
|
||||
Assert.notNull(jobIdentifier.getName(),
|
||||
"JobRuntimeInformation name cannot be null.");
|
||||
"JobIdentifier name cannot be null.");
|
||||
|
||||
if (jobIdentifier instanceof ScheduledJobIdentifier) {
|
||||
ScheduledJobIdentifier jobRuntimeInformation = (ScheduledJobIdentifier) jobIdentifier;
|
||||
ScheduledJobIdentifier identifier = (ScheduledJobIdentifier) jobIdentifier;
|
||||
|
||||
Assert.notNull(jobRuntimeInformation.getJobStream(),
|
||||
"JobRuntimeInformation JobStream cannot be null.");
|
||||
Assert.notNull(jobRuntimeInformation.getScheduleDate(),
|
||||
"JobRuntimeInformation ScheduleDate cannot be null.");
|
||||
Assert.notNull(identifier.getJobKey(),
|
||||
"JobIdentifier JobKey cannot be null.");
|
||||
Assert.notNull(identifier.getScheduleDate(),
|
||||
"JobIdentifier ScheduleDate cannot be null.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -51,8 +51,7 @@ public class DefaultJobIdentifierLabelGenerator implements
|
||||
}
|
||||
if (jobIdentifier instanceof ScheduledJobIdentifier) {
|
||||
ScheduledJobIdentifier id = (ScheduledJobIdentifier) jobIdentifier;
|
||||
return jobIdentifier.getName() + "-" + id.getJobStream() + "-"
|
||||
+ id.getJobRun() + "-"
|
||||
return jobIdentifier.getName() + "-" + id.getJobKey() + "-"
|
||||
+ dateFormat.format(id.getScheduleDate());
|
||||
}
|
||||
return jobIdentifier.getName();
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.runtime;
|
||||
|
||||
import org.apache.commons.lang.builder.EqualsBuilder;
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
import org.springframework.batch.core.domain.JobIdentifier;
|
||||
import org.springframework.batch.core.runtime.SimpleJobIdentifier;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class DefaultJobIdentifier extends SimpleJobIdentifier implements
|
||||
JobIdentifier {
|
||||
|
||||
private String key = "";
|
||||
|
||||
/**
|
||||
* Default constructor package access only.
|
||||
*/
|
||||
DefaultJobIdentifier() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name the name for the job
|
||||
*/
|
||||
public DefaultJobIdentifier(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
public String getJobKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public void setJobKey(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds the key data to the base class.
|
||||
*
|
||||
* @see org.springframework.batch.core.runtime.SimpleJobIdentifier#toString()
|
||||
*/
|
||||
public String toString() {
|
||||
return super.toString() + ",key=" + key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the provided JobIdentifier equals this JobIdentifier. Two
|
||||
* Identifiers are considered to be equal if they have the same name,
|
||||
* stream, run, and schedule date.
|
||||
*/
|
||||
public boolean equals(Object other) {
|
||||
return EqualsBuilder.reflectionEquals(this, other) || EqualsBuilder.reflectionEquals(other, this);
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return HashCodeBuilder.reflectionHashCode(this);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.batch.execution.runtime;
|
||||
|
||||
import org.springframework.batch.core.domain.JobIdentifier;
|
||||
import org.springframework.batch.core.runtime.JobIdentifierFactory;
|
||||
|
||||
/**
|
||||
* {@link JobIdentifierFactory} for creating {@link DefaultJobIdentifierFactory}
|
||||
* instances.
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class DefaultJobIdentifierFactory implements JobIdentifierFactory {
|
||||
|
||||
protected String key = "key";
|
||||
|
||||
public JobIdentifier getJobIdentifier(String name) {
|
||||
|
||||
DefaultJobIdentifier runtimeInformation = new DefaultJobIdentifier(name);
|
||||
runtimeInformation.setJobKey(key);
|
||||
return runtimeInformation;
|
||||
}
|
||||
|
||||
public void setJobKey(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -24,18 +24,13 @@ import java.util.Date;
|
||||
import org.apache.commons.lang.builder.EqualsBuilder;
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
import org.springframework.batch.core.domain.JobIdentifier;
|
||||
import org.springframework.batch.core.runtime.SimpleJobIdentifier;
|
||||
|
||||
public class ScheduledJobIdentifier extends SimpleJobIdentifier implements JobIdentifier {
|
||||
public class ScheduledJobIdentifier extends DefaultJobIdentifier implements JobIdentifier {
|
||||
|
||||
private static final DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
|
||||
|
||||
private Date scheduleDate;
|
||||
|
||||
private int jobRun = 0;
|
||||
|
||||
private String jobStream = "";
|
||||
|
||||
ScheduledJobIdentifier() {
|
||||
this(null);
|
||||
}
|
||||
@@ -49,22 +44,6 @@ public class ScheduledJobIdentifier extends SimpleJobIdentifier implements JobId
|
||||
}
|
||||
}
|
||||
|
||||
public int getJobRun() {
|
||||
return jobRun;
|
||||
}
|
||||
|
||||
public void setJobRun(int jobRun) {
|
||||
this.jobRun = jobRun;
|
||||
}
|
||||
|
||||
public String getJobStream() {
|
||||
return jobStream;
|
||||
}
|
||||
|
||||
public void setJobStream(String jobStream) {
|
||||
this.jobStream = jobStream;
|
||||
}
|
||||
|
||||
public Date getScheduleDate() {
|
||||
return scheduleDate;
|
||||
}
|
||||
@@ -74,7 +53,7 @@ public class ScheduledJobIdentifier extends SimpleJobIdentifier implements JobId
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return super.toString() + ",stream=" + jobStream + ",run=" + jobRun + ",scheduleDate="
|
||||
return super.toString() + ",scheduleDate="
|
||||
+ scheduleDate;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,29 +28,16 @@ import org.springframework.batch.core.runtime.JobIdentifierFactory;
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class ScheduledJobIdentifierFactory implements JobIdentifierFactory {
|
||||
|
||||
private String jobStream = "stream";
|
||||
|
||||
private int jobRun = 0;
|
||||
public class ScheduledJobIdentifierFactory extends DefaultJobIdentifierFactory implements JobIdentifierFactory {
|
||||
|
||||
private Date scheduleDate = new Date();
|
||||
|
||||
public JobIdentifier getJobIdentifier(String name) {
|
||||
|
||||
ScheduledJobIdentifier runtimeInformation = new ScheduledJobIdentifier(name);
|
||||
runtimeInformation.setJobStream(jobStream);
|
||||
runtimeInformation.setJobRun(jobRun);
|
||||
runtimeInformation.setScheduleDate(scheduleDate);
|
||||
return runtimeInformation;
|
||||
}
|
||||
|
||||
public void setJobRun(int jobRun) {
|
||||
this.jobRun = jobRun;
|
||||
}
|
||||
|
||||
public void setJobStream(String jobStream) {
|
||||
this.jobStream = jobStream;
|
||||
ScheduledJobIdentifier identifier = new ScheduledJobIdentifier(name);
|
||||
identifier.setJobKey(key);
|
||||
identifier.setScheduleDate(scheduleDate);
|
||||
return identifier;
|
||||
}
|
||||
|
||||
public void setScheduleDate(Date scheduleDate) {
|
||||
|
||||
@@ -28,11 +28,20 @@
|
||||
<component name="identifier" access="field"
|
||||
class="org.springframework.batch.execution.runtime.ScheduledJobIdentifier">
|
||||
<property name="name" update="false" column="JOB_NAME" />
|
||||
<property name="jobStream" update="false"
|
||||
column="JOB_STREAM" />
|
||||
<property name="jobKey" update="false"
|
||||
column="JOB_KEY" />
|
||||
<property name="scheduleDate" update="false"
|
||||
column="SCHEDULE_DATE" />
|
||||
<property name="jobRun" update="false" column="JOB_RUN" />
|
||||
</component>
|
||||
</subclass>
|
||||
|
||||
<subclass entity-name="DefaultJobInstance" name="JobInstance"
|
||||
discriminator-value="Default">
|
||||
<component name="identifier" access="field"
|
||||
class="org.springframework.batch.execution.runtime.ScheduledJobIdentifier">
|
||||
<property name="name" update="false" column="JOB_NAME" />
|
||||
<property name="jobKey" update="false"
|
||||
column="JOB_KEY" />
|
||||
</component>
|
||||
</subclass>
|
||||
|
||||
|
||||
@@ -14,9 +14,8 @@ CREATE TABLE BATCH_JOB (
|
||||
ID BIGINT PRIMARY KEY ,
|
||||
VERSION BIGINT,
|
||||
JOB_NAME VARCHAR(100) NOT NULL ,
|
||||
JOB_STREAM VARCHAR(20) ,
|
||||
JOB_KEY VARCHAR(20) ,
|
||||
SCHEDULE_DATE DATE ,
|
||||
JOB_RUN CHAR(2),
|
||||
STATUS VARCHAR(10) );
|
||||
|
||||
CREATE TABLE BATCH_JOB_EXECUTION (
|
||||
|
||||
@@ -14,9 +14,8 @@ CREATE TABLE BATCH_JOB (
|
||||
ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
|
||||
VERSION BIGINT,
|
||||
JOB_NAME VARCHAR(100) NOT NULL ,
|
||||
JOB_STREAM VARCHAR(20) ,
|
||||
JOB_KEY VARCHAR(20) ,
|
||||
SCHEDULE_DATE DATE ,
|
||||
JOB_RUN CHAR(2),
|
||||
STATUS VARCHAR(10) );
|
||||
|
||||
CREATE TABLE BATCH_JOB_EXECUTION (
|
||||
|
||||
@@ -14,9 +14,8 @@ CREATE TABLE BATCH_JOB (
|
||||
ID BIGINT IDENTITY PRIMARY KEY ,
|
||||
VERSION BIGINT,
|
||||
JOB_NAME VARCHAR(100) NOT NULL ,
|
||||
JOB_STREAM VARCHAR(20) ,
|
||||
JOB_KEY VARCHAR(20) ,
|
||||
SCHEDULE_DATE DATE ,
|
||||
JOB_RUN CHAR(2),
|
||||
STATUS VARCHAR(10) );
|
||||
|
||||
CREATE TABLE BATCH_JOB_EXECUTION (
|
||||
|
||||
@@ -14,9 +14,8 @@ CREATE TABLE BATCH_JOB (
|
||||
ID NUMBER(38) PRIMARY KEY ,
|
||||
VERSION NUMBER(38),
|
||||
JOB_NAME VARCHAR(100) NOT NULL ,
|
||||
JOB_STREAM VARCHAR(20) ,
|
||||
JOB_KEY VARCHAR(20) ,
|
||||
SCHEDULE_DATE DATE ,
|
||||
JOB_RUN CHAR(2),
|
||||
STATUS VARCHAR(10) );
|
||||
|
||||
CREATE TABLE BATCH_JOB_EXECUTION (
|
||||
|
||||
@@ -14,9 +14,8 @@ CREATE TABLE BATCH_JOB (
|
||||
ID BIGINT PRIMARY KEY ,
|
||||
VERSION BIGINT,
|
||||
JOB_NAME VARCHAR(100) NOT NULL ,
|
||||
JOB_STREAM VARCHAR(20) ,
|
||||
JOB_KEY VARCHAR(20) ,
|
||||
SCHEDULE_DATE DATE ,
|
||||
JOB_RUN CHAR(2),
|
||||
STATUS VARCHAR(10) );
|
||||
|
||||
CREATE TABLE BATCH_JOB_EXECUTION (
|
||||
|
||||
@@ -3,9 +3,8 @@ CREATE TABLE BATCH_JOB (
|
||||
ID ${BIGINT} $!{IDENTITY} PRIMARY KEY $!{GENERATED},
|
||||
VERSION ${BIGINT},
|
||||
JOB_NAME VARCHAR(100) NOT NULL ,
|
||||
JOB_STREAM VARCHAR(20) ,
|
||||
JOB_KEY VARCHAR(20) ,
|
||||
SCHEDULE_DATE DATE ,
|
||||
JOB_RUN CHAR(2),
|
||||
STATUS VARCHAR(10) );
|
||||
|
||||
CREATE TABLE BATCH_JOB_EXECUTION (
|
||||
|
||||
@@ -65,8 +65,7 @@ public abstract class AbstractJobDaoTests extends
|
||||
protected void onSetUpInTransaction() throws Exception {
|
||||
jobRuntimeInformation = new ScheduledJobIdentifier("Job1");
|
||||
jobRuntimeInformation.setName("Job1");
|
||||
jobRuntimeInformation.setJobStream("TestStream");
|
||||
jobRuntimeInformation.setJobRun(1);
|
||||
jobRuntimeInformation.setJobKey("TestStream");
|
||||
jobRuntimeInformation.setScheduleDate(new SimpleDateFormat("yyyyMMdd")
|
||||
.parse("20070505"));
|
||||
|
||||
|
||||
@@ -2,12 +2,13 @@ package org.springframework.batch.execution.repository.dao;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.runtime.SimpleJobIdentifier;
|
||||
import org.springframework.batch.execution.runtime.DefaultJobIdentifier;
|
||||
import org.springframework.batch.execution.runtime.ScheduledJobIdentifier;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class EntityNameInterceptorTests extends TestCase {
|
||||
|
||||
private EntityNameInterceptor interceptor = new EntityNameInterceptor();
|
||||
@@ -17,6 +18,11 @@ public class EntityNameInterceptorTests extends TestCase {
|
||||
assertEquals("ScheduledJobInstance", interceptor.getEntityName(job));
|
||||
}
|
||||
|
||||
public void testGetEntityNameForDefaultJobIdentifier() {
|
||||
JobInstance job = new JobInstance(new DefaultJobIdentifier("foo"));
|
||||
assertEquals("DefaultJobInstance", interceptor.getEntityName(job));
|
||||
}
|
||||
|
||||
public void testGetEntityNameForSimpleJobIdentifier() {
|
||||
JobInstance job = new JobInstance(new SimpleJobIdentifier("foo"));
|
||||
assertEquals("SimpleJobInstance", interceptor.getEntityName(job));
|
||||
|
||||
@@ -94,8 +94,7 @@ public class HibernateJobDaoTests extends AbstractJobDaoTests {
|
||||
public void testNullScheduleDate(){
|
||||
|
||||
ScheduledJobIdentifier scheduledIdentifier = new ScheduledJobIdentifier("ScheduledJob");
|
||||
scheduledIdentifier.setJobRun(0);
|
||||
scheduledIdentifier.setJobStream(null);
|
||||
scheduledIdentifier.setJobKey(null);
|
||||
|
||||
try{
|
||||
jobDao.createJob(scheduledIdentifier);
|
||||
|
||||
@@ -69,8 +69,7 @@ public class BatchResourceFactoryBeanTests extends TestCase {
|
||||
// define mock behaviour
|
||||
identifier.setScheduleDate(new SimpleDateFormat("yyyyMMdd")
|
||||
.parse("20070730"));
|
||||
identifier.setJobStream("testStream");
|
||||
identifier.setJobRun(11);
|
||||
identifier.setJobKey("testStream");
|
||||
|
||||
SimpleStepContext context = new SimpleStepContext();
|
||||
JobInstance job = new JobInstance(identifier);
|
||||
@@ -97,7 +96,7 @@ public class BatchResourceFactoryBeanTests extends TestCase {
|
||||
* regular use with valid context and pattern provided
|
||||
*/
|
||||
public void testCreateFileName() throws Exception {
|
||||
doTestPathName("testJob-testStream-11-20070730-bar.txt", path);
|
||||
doTestPathName("testJob-testStream-20070730-bar.txt", path);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -130,7 +129,7 @@ public class BatchResourceFactoryBeanTests extends TestCase {
|
||||
public void testNonStandardFilePattern() throws Exception {
|
||||
resourceFactory.setFilePattern("/%BATCH_ROOT%/data/%JOB_NAME%/"
|
||||
+ "%STEP_NAME%+%JOB_IDENTIFIER%");
|
||||
doTestPathName("bar+testJob-testStream-11-20070730", path);
|
||||
doTestPathName("bar+testJob-testStream-20070730", path);
|
||||
}
|
||||
|
||||
public void testResoureLoaderAware() throws Exception {
|
||||
@@ -150,14 +149,14 @@ public class BatchResourceFactoryBeanTests extends TestCase {
|
||||
String rootDir = getRootDir();
|
||||
rootDir = StringUtils.replace(rootDir, File.separator, "/") + "/";
|
||||
resourceFactory.setRootDirectory(rootDir);
|
||||
doTestPathName("testJob-testStream-11-20070730-bar.txt", path);
|
||||
doTestPathName("testJob-testStream-20070730-bar.txt", path);
|
||||
}
|
||||
|
||||
public void testRootDirectoryEndsWithBackSlash() throws Exception {
|
||||
String rootDir = getRootDir();
|
||||
rootDir = "/"+StringUtils.replace(rootDir, File.separator, "\\") + "\\";
|
||||
resourceFactory.setRootDirectory(rootDir);
|
||||
doTestPathName("testJob-testStream-11-20070730-bar.txt", path);
|
||||
doTestPathName("testJob-testStream-20070730-bar.txt", path);
|
||||
}
|
||||
|
||||
private void doTestPathName(String filename, String path) throws Exception, IOException {
|
||||
|
||||
@@ -30,7 +30,7 @@ public class DefaultJobIdentifierLabelGeneratorTests extends TestCase {
|
||||
* Test method for {@link org.springframework.batch.execution.resource.DefaultJobIdentifierLabelGenerator#getLabel()}.
|
||||
*/
|
||||
public void testDefaultGetLabel() throws Exception {
|
||||
assertEquals("null--0-19700101", instance.getLabel(new ScheduledJobIdentifier(null)));
|
||||
assertEquals("null--19700101", instance.getLabel(new ScheduledJobIdentifier(null)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -39,10 +39,9 @@ public class DefaultJobIdentifierLabelGeneratorTests extends TestCase {
|
||||
public void testGetLabelWithAllProperties() throws Exception {
|
||||
ScheduledJobIdentifier identifier = new ScheduledJobIdentifier(null);
|
||||
identifier.setName("foo");
|
||||
identifier.setJobStream("bar");
|
||||
identifier.setJobRun(11);
|
||||
identifier.setJobKey("bar");
|
||||
identifier.setScheduleDate(new SimpleDateFormat("yyyyMMdd").parse("20070730"));
|
||||
assertEquals("foo-bar-11-20070730", instance.getLabel(identifier));
|
||||
assertEquals("foo-bar-20070730", instance.getLabel(identifier));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.springframework.batch.execution.runtime;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.domain.JobIdentifier;
|
||||
|
||||
public class DefaultJobIdentifierFactoryTests extends TestCase {
|
||||
|
||||
public void testGetJobIdentifier() {
|
||||
JobIdentifier jobIdentifier = new ScheduledJobIdentifierFactory().getJobIdentifier("foo");
|
||||
assertEquals("foo", jobIdentifier.getName());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.batch.execution.runtime;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class DefaultJobIdentifierTests extends TestCase {
|
||||
|
||||
private DefaultJobIdentifier instance = new DefaultJobIdentifier(null);
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.JobInstance#getName()}.
|
||||
*/
|
||||
public void testDefaultConstructor() {
|
||||
instance = new DefaultJobIdentifier();
|
||||
assertEquals(null, instance.getName());
|
||||
instance.setName("foo");
|
||||
assertEquals("foo", instance.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.JobInstance#getName()}.
|
||||
*/
|
||||
public void testGetName() {
|
||||
assertEquals(null, instance.getName());
|
||||
instance.setName("foo");
|
||||
assertEquals("foo", instance.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.JobInstance#getJobKey()}.
|
||||
*/
|
||||
public void testGetJobStream() {
|
||||
assertEquals("", instance.getJobKey());
|
||||
instance.setJobKey("foo");
|
||||
assertEquals("foo", instance.getJobKey());
|
||||
}
|
||||
|
||||
|
||||
public void testEqualsSelf() throws Exception {
|
||||
assertEquals(instance, instance);
|
||||
}
|
||||
|
||||
public void testEqualsInstanceWithSameProperties() throws Exception {
|
||||
DefaultJobIdentifier other = new DefaultJobIdentifier(instance.getName());
|
||||
other.setJobKey(instance.getJobKey());
|
||||
assertEquals(instance, other);
|
||||
assertEquals(instance.hashCode(), other.hashCode());
|
||||
}
|
||||
|
||||
public void testEqualsInstanceWithTimestamp() throws Exception {
|
||||
DefaultJobIdentifier other = new DefaultJobIdentifier(instance.getName());
|
||||
other.setJobKey(instance.getJobKey());
|
||||
assertEquals(instance, other);
|
||||
assertEquals(other, instance);
|
||||
assertEquals(instance.hashCode(), other.hashCode());
|
||||
}
|
||||
|
||||
public void testEqualsNull() throws Exception {
|
||||
assertNotSame(null, instance);
|
||||
}
|
||||
|
||||
public void testToString() throws Exception {
|
||||
assertTrue("String does not contain key: "+instance, instance.toString().indexOf("key=")>=0);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.springframework.batch.execution.runtime;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.core.domain.JobIdentifier;
|
||||
|
||||
public class ScheduledJobIdentifierFactoryTests extends TestCase {
|
||||
|
||||
public void testGetJobIdentifier() {
|
||||
JobIdentifier jobIdentifier = new DefaultJobIdentifierFactory().getJobIdentifier("foo");
|
||||
assertEquals("foo", jobIdentifier.getName());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -28,6 +28,16 @@ public class ScheduledJobIdentifierTests extends TestCase {
|
||||
|
||||
private ScheduledJobIdentifier instance = new ScheduledJobIdentifier(null);
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.JobInstance#getName()}.
|
||||
*/
|
||||
public void testDefaultConstructor() {
|
||||
instance = new ScheduledJobIdentifier();
|
||||
assertEquals(null, instance.getName());
|
||||
instance.setName("foo");
|
||||
assertEquals("foo", instance.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.JobInstance#getName()}.
|
||||
*/
|
||||
@@ -38,12 +48,12 @@ public class ScheduledJobIdentifierTests extends TestCase {
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.JobInstance#getJobStream()}.
|
||||
* Test method for {@link org.springframework.batch.core.domain.JobInstance#getJobKey()}.
|
||||
*/
|
||||
public void testGetJobStream() {
|
||||
assertEquals("", instance.getJobStream());
|
||||
instance.setJobStream("foo");
|
||||
assertEquals("foo", instance.getJobStream());
|
||||
assertEquals("", instance.getJobKey());
|
||||
instance.setJobKey("foo");
|
||||
assertEquals("foo", instance.getJobKey());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -54,15 +64,6 @@ public class ScheduledJobIdentifierTests extends TestCase {
|
||||
instance.setScheduleDate(new Date(100L));
|
||||
assertEquals(100L, instance.getScheduleDate().getTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link org.springframework.batch.core.domain.JobInstance#getJobRun()}.
|
||||
*/
|
||||
public void testGetJobRun() {
|
||||
assertEquals(0, instance.getJobRun());
|
||||
instance.setJobRun(1);
|
||||
assertEquals(1, instance.getJobRun());
|
||||
}
|
||||
|
||||
public void testEqualsSelf() throws Exception {
|
||||
assertEquals(instance, instance);
|
||||
@@ -70,8 +71,7 @@ public class ScheduledJobIdentifierTests extends TestCase {
|
||||
|
||||
public void testEqualsInstanceWithSameProperties() throws Exception {
|
||||
ScheduledJobIdentifier other = new ScheduledJobIdentifier(instance.getName());
|
||||
other.setJobRun(instance.getJobRun());
|
||||
other.setJobStream(instance.getJobStream());
|
||||
other.setJobKey(instance.getJobKey());
|
||||
other.setScheduleDate(instance.getScheduleDate());
|
||||
assertEquals(instance, other);
|
||||
assertEquals(instance.hashCode(), other.hashCode());
|
||||
@@ -79,8 +79,7 @@ public class ScheduledJobIdentifierTests extends TestCase {
|
||||
|
||||
public void testEqualsInstanceWithTimestamp() throws Exception {
|
||||
ScheduledJobIdentifier other = new ScheduledJobIdentifier(instance.getName());
|
||||
other.setJobRun(instance.getJobRun());
|
||||
other.setJobStream(instance.getJobStream());
|
||||
other.setJobKey(instance.getJobKey());
|
||||
other.setScheduleDate(new Timestamp(instance.getScheduleDate().getTime()));
|
||||
assertEquals(instance, other);
|
||||
assertEquals(other, instance);
|
||||
@@ -90,4 +89,9 @@ public class ScheduledJobIdentifierTests extends TestCase {
|
||||
public void testEqualsNull() throws Exception {
|
||||
assertNotSame(null, instance);
|
||||
}
|
||||
|
||||
public void testToString() throws Exception {
|
||||
assertTrue("String does not contain key: "+instance, instance.toString().indexOf("key=")>=0);
|
||||
assertTrue("String does not contain date: "+instance, instance.toString().indexOf("scheduleDate=")>=0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,12 +20,10 @@ import java.util.List;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.batch.execution.scope.StepScope;
|
||||
import org.springframework.batch.execution.scope.SimpleStepContext;
|
||||
import org.springframework.batch.execution.scope.StepSynchronizationManager;
|
||||
import org.springframework.batch.repeat.synch.RepeatSynchronizationManager;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.ObjectFactory;
|
||||
import org.springframework.context.support.StaticApplicationContext;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
@@ -188,5 +186,20 @@ public class StepScopeTests extends TestCase {
|
||||
scope.remove("foo");
|
||||
assertFalse(context.hasAttribute("foo"));
|
||||
}
|
||||
|
||||
public void testOrder() throws Exception {
|
||||
assertEquals(Integer.MAX_VALUE, scope.getOrder());
|
||||
scope.setOrder(11);
|
||||
assertEquals(11, scope.getOrder());
|
||||
}
|
||||
|
||||
public void testName() throws Exception {
|
||||
scope.setName("foo");
|
||||
StaticApplicationContext beanFactory = new StaticApplicationContext();
|
||||
scope.postProcessBeanFactory(beanFactory.getDefaultListableBeanFactory());
|
||||
String[] scopes = beanFactory.getDefaultListableBeanFactory().getRegisteredScopeNames();
|
||||
assertEquals(1, scopes.length);
|
||||
assertEquals("foo", scopes[0]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,9 +3,8 @@ CREATE TABLE BATCH_JOB (
|
||||
ID BIGINT IDENTITY PRIMARY KEY ,
|
||||
VERSION BIGINT,
|
||||
JOB_NAME VARCHAR(100) NOT NULL ,
|
||||
JOB_STREAM VARCHAR(20) ,
|
||||
JOB_KEY VARCHAR(20) ,
|
||||
SCHEDULE_DATE DATE ,
|
||||
JOB_RUN CHAR(2),
|
||||
STATUS VARCHAR(10) );
|
||||
|
||||
CREATE TABLE BATCH_JOB_EXECUTION (
|
||||
|
||||
@@ -79,9 +79,8 @@
|
||||
|
||||
<bean id="jobRuntimeInformationFactory"
|
||||
class="org.springframework.batch.execution.runtime.ScheduledJobIdentifierFactory">
|
||||
<property name="jobStream" value="TestStream" />
|
||||
<property name="jobKey" value="TestStream" />
|
||||
<property name="scheduleDate" value="20070505" />
|
||||
<property name="jobRun" value="1" />
|
||||
</bean>
|
||||
|
||||
<bean
|
||||
|
||||
@@ -87,9 +87,8 @@
|
||||
|
||||
<bean id="jobRuntimeInformationFactory"
|
||||
class="org.springframework.batch.execution.runtime.ScheduledJobIdentifierFactory">
|
||||
<property name="jobStream" value="TestStream" />
|
||||
<property name="jobKey" value="TestStream" />
|
||||
<property name="scheduleDate" value="20070505" />
|
||||
<property name="jobRun" value="1" />
|
||||
</bean>
|
||||
|
||||
<bean id="jdbcTemplate"
|
||||
|
||||
Reference in New Issue
Block a user