OPEN - issue BATCH-404: FactoryBeans for step configuration

http://jira.springframework.org/browse/BATCH-404

Remove SimpleStepFactoryBean.
This commit is contained in:
dsyer
2008-03-03 16:16:59 +00:00
parent 760b0405fb
commit 196b8547b8
16 changed files with 66 additions and 127 deletions

View File

@@ -350,7 +350,7 @@ public class ItemOrientedStep extends AbstractStep {
catch (Exception e) {
fatalException.setException(e);
stepExecution.setStatus(BatchStatus.UNKNOWN);
throw new CommitFailedException("Fatal error detected during commit", e);
throw new CommitFailedException("Fatal error detected during save of step execution context", e);
}
}

View File

@@ -23,26 +23,52 @@ import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemStream;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.repeat.exception.handler.SimpleLimitExceptionHandler;
import org.springframework.batch.repeat.policy.SimpleCompletionPolicy;
import org.springframework.batch.repeat.support.RepeatTemplate;
import org.springframework.batch.repeat.support.TaskExecutorRepeatTemplate;
import org.springframework.core.task.TaskExecutor;
/**
* Adds listeners to {@link SimpleStepFactoryBean}.
* Most common configuration options for simple steps should be found here. Use
* this factory bean instead of creating a {@link Step} implementation manually.
*
* @author Dave Syer
*
*/
public class DefaultStepFactoryBean extends SimpleStepFactoryBean {
public class DefaultStepFactoryBean extends AbstractStepFactoryBean {
private boolean alwaysSkip = false;
private int commitInterval = 0;
private ItemStream[] streams = new ItemStream[0];
private BatchListener[] listeners = new BatchListener[0];
private ListenerMulticaster listener = new ListenerMulticaster();
private TaskExecutor taskExecutor;
/**
* Set the commit interval.
*
* @param commitInterval
*/
public void setCommitInterval(int commitInterval) {
this.commitInterval = commitInterval;
}
/**
* The streams to inject into the {@link Step}. Any instance of
* {@link ItemStream} can be used, and will then receive callbacks at the
* appropriate stage in the step.
*
* @param streams an array of listeners
*/
public void setStreams(ItemStream[] streams) {
this.streams = streams;
}
/**
* Public setter for a flag that determines skip policy. If this flag is
* true then an exception in chunk processing will cause the item to be
@@ -83,6 +109,15 @@ public class DefaultStepFactoryBean extends SimpleStepFactoryBean {
protected void applyConfiguration(ItemOrientedStep step) {
super.applyConfiguration(step);
step.setStreams(streams);
if (commitInterval > 0) {
RepeatTemplate chunkOperations = new RepeatTemplate();
chunkOperations.setCompletionPolicy(new SimpleCompletionPolicy(commitInterval));
step.setChunkOperations(chunkOperations);
}
for (int i = 0; i < listeners.length; i++) {
BatchListener listener = listeners[i];
if (listener instanceof StepListener) {

View File

@@ -26,9 +26,9 @@ import org.springframework.batch.repeat.RepeatOperations;
import org.springframework.batch.repeat.support.RepeatTemplate;
/**
* Extends a {@link SimpleStepFactoryBean} allowing registration of listeners
* and also direct injection of the {@link RepeatOperations} needed at step and
* chunk level.
* Factory bean for {@link Step} implementations allowing registration of
* listeners and also direct injection of the {@link RepeatOperations} needed at
* step and chunk level.
*
* @author Dave Syer
*

View File

@@ -1,71 +0,0 @@
/*
* 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.step.support;
import org.springframework.batch.core.domain.Step;
import org.springframework.batch.execution.step.ItemOrientedStep;
import org.springframework.batch.item.ItemStream;
import org.springframework.batch.repeat.policy.SimpleCompletionPolicy;
import org.springframework.batch.repeat.support.RepeatTemplate;
/**
* @author Dave Syer
*
*/
public class SimpleStepFactoryBean extends AbstractStepFactoryBean {
private int commitInterval = 0;
private ItemStream[] streams = new ItemStream[0];
/**
* Set the commit interval.
*
* @param commitInterval
*/
public void setCommitInterval(int commitInterval) {
this.commitInterval = commitInterval;
}
/**
* The streams to inject into the {@link Step}. Any instance of
* {@link ItemStream} can be used, and will then receive callbacks at the
* appropriate stage in the step.
*
* @param streams an array of listeners
*/
public void setStreams(ItemStream[] streams) {
this.streams = streams;
}
/**
* @param step
*
*/
protected void applyConfiguration(ItemOrientedStep step) {
super.applyConfiguration(step);
step.setStreams(streams);
if (commitInterval > 0) {
RepeatTemplate chunkOperations = new RepeatTemplate();
chunkOperations.setCompletionPolicy(new SimpleCompletionPolicy(commitInterval));
step.setChunkOperations(chunkOperations);
}
}
}

View File

@@ -23,7 +23,7 @@ import org.springframework.batch.core.domain.Step;
* @author Dave Syer
*
*/
public class SimpleStepFactoryBeanTests extends TestCase {
public class StatefulRetryStepFactoryBeanTests extends TestCase {
private AbstractStepFactoryBean factory = new StatefulRetryStepFactoryBean();

View File

@@ -18,7 +18,7 @@
class="org.springframework.batch.execution.job.JobSupport">
<property name="steps">
<bean id="step1"
class="org.springframework.batch.execution.step.support.SimpleStepFactoryBean">
class="org.springframework.batch.execution.step.support.DefaultStepFactoryBean">
<property name="itemReader">
<bean
class="org.springframework.batch.item.reader.ListItemReader">

View File

@@ -15,7 +15,7 @@
class="org.springframework.batch.execution.job.JobSupport">
<property name="steps">
<bean id="step1"
class="org.springframework.batch.execution.step.support.SimpleStepFactoryBean">
class="org.springframework.batch.execution.step.support.DefaultStepFactoryBean">
<property name="itemReader">
<bean
class="org.springframework.batch.item.reader.ListItemReader">

View File

@@ -20,7 +20,7 @@
<bean id="test-job"
class="org.springframework.batch.execution.job.JobSupport">
<property name="steps">
<bean id="step1" class="org.springframework.batch.execution.step.support.SimpleStepFactoryBean">
<bean id="step1" class="org.springframework.batch.execution.step.support.DefaultStepFactoryBean">
<property name="itemReader" ref="itemReader" />
<property name="itemWriter" ref="itemWriter" />
<property name="jobRepository" ref="jobRepository" />