OPEN - issue BATCH-1383: onSkipInProcess is not called

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

Tidied up the skip sample.  Could not reproduce issue.
This commit is contained in:
dsyer
2009-09-04 10:36:45 +00:00
parent 9e5de91923
commit cdf94a7148
10 changed files with 203 additions and 123 deletions

View File

@@ -31,6 +31,8 @@ public class Trade implements Serializable {
private long quantity = 0;
private BigDecimal price = new BigDecimal(0);
private String customer = "";
private Long id;
private long version = 0;
public Trade() {
}
@@ -42,7 +44,30 @@ public class Trade implements Serializable {
this.customer = customer;
}
public void setCustomer(String customer) {
/**
* @param id
*/
public Trade(long id) {
this.id = id;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getVersion() {
return version;
}
public void setVersion(long version) {
this.version = version;
}
public void setCustomer(String customer) {
this.customer = customer;
}

View File

@@ -16,6 +16,8 @@
package org.springframework.batch.sample.domain.trade.internal;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.batch.sample.domain.trade.Trade;
@@ -23,8 +25,6 @@ import org.springframework.batch.sample.domain.trade.TradeDao;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
import javax.sql.DataSource;
/**
* Writes a Trade object to a database
@@ -36,7 +36,7 @@ public class JdbcTradeDao implements TradeDao {
/**
* template for inserting a row
*/
private static final String INSERT_TRADE_RECORD = "INSERT INTO trade (id, isin, quantity, price, customer) VALUES (?, ?, ? ,?, ?)";
private static final String INSERT_TRADE_RECORD = "INSERT INTO trade (id, version, isin, quantity, price, customer) VALUES (?, 0, ?, ? ,?, ?)";
/**
* handles the processing of sql query
@@ -44,7 +44,7 @@ public class JdbcTradeDao implements TradeDao {
private SimpleJdbcTemplate simpleJdbcTemplate;
/**
* database is not expected to be setup for autoincrementation
* database is not expected to be setup for autoincrement
*/
private DataFieldMaxValueIncrementer incrementer;

View File

@@ -28,14 +28,17 @@ public class TradeRowMapper implements RowMapper {
public static final int QUANTITY_COLUMN = 2;
public static final int PRICE_COLUMN = 3;
public static final int CUSTOMER_COLUMN = 4;
public static final int ID_COLUMN = 5;
public static final int VERSION_COLUMN = 6;
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Trade trade = new Trade();
Trade trade = new Trade(rs.getLong(ID_COLUMN));
trade.setIsin(rs.getString(ISIN_COLUMN));
trade.setQuantity(rs.getLong(QUANTITY_COLUMN));
trade.setPrice(rs.getBigDecimal(PRICE_COLUMN));
trade.setCustomer(rs.getString(CUSTOMER_COLUMN));
trade.setVersion(rs.getLong(VERSION_COLUMN));
return trade;
}

View File

@@ -40,7 +40,7 @@ public class TradeWriter extends ItemStreamSupport implements ItemWriter<Trade>
private static Log log = LogFactory.getLog(TradeWriter.class);
private static final String TOTAL_AMOUNT_KEY = "TOTAL_AMOUNT";
public static final String TOTAL_AMOUNT_KEY = "TOTAL_AMOUNT";
private TradeDao dao;

View File

@@ -1,65 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util" xmlns:batch="http://www.springframework.org/schema/batch"
xsi:schemaLocation="http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<job id="skipJob" incrementer="incrementer" xmlns="http://www.springframework.org/schema/batch">
<step id="step1" parent="baseStep">
<tasklet>
<chunk reader="fileItemReader" processor="tradeProcessor" writer="tradeWriter"
commit-interval="3" skip-limit="10">
<chunk reader="fileItemReader" processor="tradeProcessor" writer="tradeWriter" commit-interval="3" skip-limit="10">
<skippable-exception-classes>
<include class="org.springframework.batch.item.file.FlatFileParseException"/>
<include class="org.springframework.batch.item.WriteFailedException"/>
<include class="org.springframework.batch.item.file.FlatFileParseException" />
<include class="org.springframework.batch.item.WriteFailedException" />
</skippable-exception-classes>
</chunk>
</tasklet>
<next on="*" to="step2" />
<next on="COMPLETED WITH SKIPS" to="errorPrint1" />
<fail on="FAILED" exit-code="FAILED"/>
</step>
<fail on="FAILED" exit-code="FAILED" />
</step>
<step id="errorPrint1" next="step2">
<tasklet ref="errorLogTasklet"/>
<tasklet ref="errorLogTasklet" />
</step>
<step id="step2" parent="step2parent" next="skipCheckingDecision"/>
<step id="step2" parent="baseStep" next="skipCheckingDecision">
<tasklet>
<chunk reader="tradeSqlItemReader" processor="tradeProcessorFailure" writer="itemTrackingWriter"
commit-interval="2" skip-limit="10">
<skippable-exception-classes merge="true">
<include class="org.springframework.batch.item.validator.ValidationException" />
<include class="java.io.IOException" />
</skippable-exception-classes>
</chunk>
</tasklet>
</step>
<decision id="skipCheckingDecision" decider="skipCheckingDecider">
<end on="*"/>
<end on="*" />
<next on="COMPLETED WITH SKIPS" to="errorPrint2" />
<fail on="FAILED" exit-code="FAILED"/>
<fail on="FAILED" exit-code="FAILED" />
</decision>
<step id="errorPrint2">
<tasklet ref="errorLogTasklet"/>
</step>
</job>
<step id="step2parent" parent="t2" xmlns="http://www.springframework.org/schema/batch">
<tasklet>
<chunk writer="itemTrackingWriter">
<skippable-exception-classes merge="true">
<include class="org.springframework.batch.item.validator.ValidationException"/>
</skippable-exception-classes>
</chunk>
</tasklet>
</step>
<step id="t2" parent="t3" abstract="true" xmlns="http://www.springframework.org/schema/batch"/>
<step id="t3" parent="baseStep" abstract="true" xmlns="http://www.springframework.org/schema/batch">
<tasklet>
<chunk reader="tradeSqlItemReader" processor="tradeProcessor" writer="dummyWriter"
commit-interval="2" skip-limit="10">
<skippable-exception-classes>
<include class="java.lang.RuntimeException"/>
</skippable-exception-classes>
</chunk>
</tasklet>
</step>
<tasklet ref="errorLogTasklet" />
</step>
</job>
<step id="baseStep" abstract="true" xmlns="http://www.springframework.org/schema/batch">
<tasklet>
@@ -69,14 +57,17 @@
</listener>
<listener>
<bean class="org.springframework.batch.core.listener.ExecutionContextPromotionListener" xmlns="http://www.springframework.org/schema/beans">
<property name="keys" value="stepName"/>
<property name="keys">
<list>
<value>stepName</value>
<util:constant static-field="org.springframework.batch.sample.domain.trade.internal.TradeWriter.TOTAL_AMOUNT_KEY" />
</list>
</property>
</bean>
</listener>
</listeners>
</tasklet>
</step>
<bean id="dummyWriter" class="org.springframework.batch.sample.support.DummyItemWriter"/>
<bean id="fileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<property name="resource" value="classpath:/data/skipJob/input/input#{jobParameters[run.id]}.txt" />
@@ -94,22 +85,49 @@
</property>
</bean>
<bean id="tradeProcessor" class="org.springframework.batch.sample.domain.trade.internal.TradeProcessor"/>
<bean id="tradeProcessor" class="org.springframework.batch.sample.domain.trade.internal.TradeProcessor" />
<bean id="tradeProcessorFailure" class="org.springframework.batch.sample.domain.trade.internal.TradeProcessor">
<property name="validationFailure" value="7" />
</bean>
<bean id="tradeWriter" class="org.springframework.batch.sample.domain.trade.internal.TradeWriter">
<property name="dao">
<bean class="org.springframework.batch.sample.domain.trade.internal.JdbcTradeDao">
<property name="dataSource" ref="dataSource" />
<property name="incrementer">
<bean parent="incrementerParent">
<property name="incrementerName" value="TRADE_SEQ" />
</bean>
</property>
</bean>
</property>
<property name="failingCustomers">
<list>
<value>customer6</value>
</list>
</property>
</bean>
<bean id="itemTrackingWriter" class="org.springframework.batch.sample.domain.trade.internal.ItemTrackingTradeItemWriter">
<property name="writeFailureISIN" value="UK21341EAH47" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="tradeSqlItemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="SELECT isin, quantity, price, customer from TRADE" />
<property name="sql" value="SELECT isin, quantity, price, customer, id, version from TRADE" />
<property name="rowMapper">
<bean class="org.springframework.batch.sample.domain.trade.internal.TradeRowMapper" />
</property>
</bean>
<bean id="errorLogTasklet" class="org.springframework.batch.sample.common.ErrorLogTasklet">
<property name="dataSource" ref="dataSource"/>
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="skipCheckingDecider" class="org.springframework.batch.sample.common.SkipCheckingDecider"/>
<bean id="incrementer" class="org.springframework.batch.core.launch.support.RunIdIncrementer"/>
<bean id="skipCheckingDecider" class="org.springframework.batch.sample.common.SkipCheckingDecider" />
<bean id="incrementer" class="org.springframework.batch.core.launch.support.RunIdIncrementer" />
</beans>

View File

@@ -40,24 +40,4 @@
<bean id="logAdvice" class="org.springframework.batch.sample.common.LogAdvice" />
<bean id="tradeWriter" class="org.springframework.batch.sample.domain.trade.internal.TradeWriter">
<property name="dao">
<bean class="org.springframework.batch.sample.domain.trade.internal.JdbcTradeDao">
<property name="dataSource" ref="dataSource"/>
<property name="incrementer">
<bean parent="incrementerParent">
<property name="incrementerName" value="TRADE_SEQ" />
</bean>
</property>
</bean>
</property>
<property name="failingCustomers">
<list>
<value>customer6</value>
</list>
</property>
</bean>
<bean id="itemTrackingWriter" class="org.springframework.batch.sample.domain.trade.internal.ItemTrackingTradeItemWriter" />
</beans>