diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/Game.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/Game.java
index c24cce96a..d85d16555 100644
--- a/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/Game.java
+++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/Game.java
@@ -1,8 +1,10 @@
package org.springframework.batch.sample.domain;
+import java.io.Serializable;
+
import org.apache.commons.lang.builder.EqualsBuilder;
-public class Game {
+public class Game implements Serializable {
private String id;
private int year;
diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/item/reader/StagingItemReader.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/item/reader/StagingItemReader.java
index e8dc857d1..6b705b50c 100644
--- a/spring-batch-samples/src/main/java/org/springframework/batch/sample/item/reader/StagingItemReader.java
+++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/item/reader/StagingItemReader.java
@@ -40,6 +40,14 @@ public class StagingItemReader extends JdbcDaoSupport implements ItemStream, Key
private volatile boolean initialized = false;
private volatile Iterator keys;
+
+ /**
+ * Public setter for the {@link LobHandler}.
+ * @param lobHandler the {@link LobHandler} to set (defaults to {@link DefaultLobHandler}).
+ */
+ public void setLobHandler(LobHandler lobHandler) {
+ this.lobHandler = lobHandler;
+ }
/**
*
diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/item/writer/StagingItemWriter.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/item/writer/StagingItemWriter.java
index 718d2d7f9..0393cc156 100644
--- a/spring-batch-samples/src/main/java/org/springframework/batch/sample/item/writer/StagingItemWriter.java
+++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/item/writer/StagingItemWriter.java
@@ -1,7 +1,8 @@
package org.springframework.batch.sample.item.writer;
import java.io.Serializable;
-import java.sql.Types;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
import org.apache.commons.lang.SerializationUtils;
import org.springframework.batch.execution.scope.StepContext;
@@ -9,21 +10,37 @@ import org.springframework.batch.execution.scope.StepContextAware;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.exception.ClearFailedException;
import org.springframework.batch.item.exception.FlushFailedException;
+import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
+import org.springframework.jdbc.support.lob.DefaultLobHandler;
+import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
-public class StagingItemWriter extends JdbcDaoSupport implements
- StepContextAware, ItemWriter {
+public class StagingItemWriter extends JdbcDaoSupport implements StepContextAware, ItemWriter {
public static final String NEW = "N";
+
public static final String DONE = "Y";
+
public static final Object WORKING = "W";
private DataFieldMaxValueIncrementer incrementer;
+
private StepContext stepContext;
+ private LobHandler lobHandler = new DefaultLobHandler();
+
+ /**
+ * Public setter for the {@link LobHandler}.
+ * @param lobHandler the {@link LobHandler} to set (defaults to
+ * {@link DefaultLobHandler}).
+ */
+ public void setLobHandler(LobHandler lobHandler) {
+ this.lobHandler = lobHandler;
+ }
+
/**
* Check mandatory properties.
*
@@ -31,19 +48,14 @@ public class StagingItemWriter extends JdbcDaoSupport implements
*/
protected void initDao() throws Exception {
super.initDao();
- Assert
- .notNull(
- incrementer,
- "DataFieldMaxValueIncrementer is required - set the incrementer property in the "
- + ClassUtils
- .getShortName(StagingItemWriter.class));
+ Assert.notNull(incrementer, "DataFieldMaxValueIncrementer is required - set the incrementer property in the "
+ + ClassUtils.getShortName(StagingItemWriter.class));
}
/**
* Callback for injection of the step context.
*
- * @param stepContext
- * the stepContext to set
+ * @param stepContext the stepContext to set
*/
public void setStepContext(StepContext stepContext) {
this.stepContext = stepContext;
@@ -52,8 +64,7 @@ public class StagingItemWriter extends JdbcDaoSupport implements
/**
* Setter for the key generator for the staging table.
*
- * @param incrementer
- * the {@link DataFieldMaxValueIncrementer} to set
+ * @param incrementer the {@link DataFieldMaxValueIncrementer} to set
*/
public void setIncrementer(DataFieldMaxValueIncrementer incrementer) {
this.incrementer = incrementer;
@@ -65,14 +76,20 @@ public class StagingItemWriter extends JdbcDaoSupport implements
* @see ItemWriter#write(java.lang.Object)
*/
public void write(Object data) {
- Long id = new Long(incrementer.nextLongValue());
- Long jobId = stepContext.getStepExecution().getJobExecution().getJobId();
- byte[] blob = SerializationUtils.serialize((Serializable) data);
+ final long id = incrementer.nextLongValue();
+ final long jobId = stepContext.getStepExecution().getJobExecution().getJobId().longValue();
+ final byte[] blob = SerializationUtils.serialize((Serializable) data);
getJdbcTemplate()
- .update(
- "INSERT into BATCH_STAGING (ID, JOB_ID, VALUE, PROCESSED) values (?,?,?,?)",
- new Object[] { id, jobId, blob, NEW },
- new int[] { Types.BIGINT, Types.BIGINT, Types.BLOB, Types.CHAR});
+ .update("INSERT into BATCH_STAGING (ID, JOB_ID, VALUE, PROCESSED) values (?,?,?,?)",
+ new PreparedStatementSetter() {
+ public void setValues(PreparedStatement ps) throws SQLException {
+ ps.setLong(1, id);
+ ps.setLong(2, jobId);
+ lobHandler.getLobCreator().setBlobAsBytes(ps, 3, blob);
+ ps.setString(4, NEW);
+ }
+
+ });
}
public void close() throws Exception {
diff --git a/spring-batch-samples/src/main/resources/jobs/parallelJob.xml b/spring-batch-samples/src/main/resources/jobs/parallelJob.xml
index c1ea3eb5a..92b71cae9 100644
--- a/spring-batch-samples/src/main/resources/jobs/parallelJob.xml
+++ b/spring-batch-samples/src/main/resources/jobs/parallelJob.xml
@@ -60,18 +60,6 @@
-
-
-
-
-
-
-
-
-
diff --git a/spring-batch-samples/src/main/resources/simple-container-definition.xml b/spring-batch-samples/src/main/resources/simple-container-definition.xml
index 85303aad6..df6a0f704 100644
--- a/spring-batch-samples/src/main/resources/simple-container-definition.xml
+++ b/spring-batch-samples/src/main/resources/simple-container-definition.xml
@@ -10,6 +10,7 @@
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
+
-
diff --git a/spring-batch-samples/src/test/java/test/jdbc/datasource/DerbyDataSourceFactoryBean.java b/spring-batch-samples/src/test/java/test/jdbc/datasource/DerbyDataSourceFactoryBean.java
index de5db29a3..34160c1b3 100644
--- a/spring-batch-samples/src/test/java/test/jdbc/datasource/DerbyDataSourceFactoryBean.java
+++ b/spring-batch-samples/src/test/java/test/jdbc/datasource/DerbyDataSourceFactoryBean.java
@@ -27,6 +27,8 @@ public class DerbyDataSourceFactoryBean extends AbstractFactoryBean {
ds.setDatabaseName("derbydb");
ds.setCreateDatabase("create");
dataSource = ds;
+ ds.getConnection().close();
+ ds.setCreateDatabase(null);
return ds;
}