From 68092549bd8ca11648af2d015f7ad92f9bd9b917 Mon Sep 17 00:00:00 2001 From: lucasward Date: Fri, 2 May 2008 15:12:00 +0000 Subject: [PATCH] BATCH-610:JdbcCursorItemReader can now be closed and opened again without issue. --- .../item/database/JdbcCursorItemReader.java | 3 ++- .../item/CommonItemStreamItemReaderTests.java | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcCursorItemReader.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcCursorItemReader.java index 5af63faff..39959afcb 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcCursorItemReader.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcCursorItemReader.java @@ -230,6 +230,7 @@ public class JdbcCursorItemReader extends ExecutionContextUserSupport implements JdbcUtils.closeStatement(this.preparedStatement); JdbcUtils.closeConnection(this.con); bufferredReader = null; + rs = null; } /* @@ -343,7 +344,7 @@ public class JdbcCursorItemReader extends ExecutionContextUserSupport implements */ public void open(ExecutionContext context) { Assert.state(!initialized, "Stream is already initialized. Close before re-opening."); - Assert.isNull(rs); + Assert.isNull(rs, "ResultSet still open! Close before re-opening."); Assert.notNull(context, "ExecutionContext must not be null"); executeQuery(); initialized = true; diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/CommonItemStreamItemReaderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/CommonItemStreamItemReaderTests.java index 339d7bee4..a53a512ff 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/CommonItemStreamItemReaderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/CommonItemStreamItemReaderTests.java @@ -55,5 +55,25 @@ public abstract class CommonItemStreamItemReaderTests extends CommonItemReaderTe Foo fooAfterRestart = (Foo) tested.read(); assertEquals(3, fooAfterRestart.getValue()); } + + public void testReopen() throws Exception { + testedAsStream().update(executionContext); + + Foo foo1 = (Foo) tested.read(); + assertEquals(1, foo1.getValue()); + + Foo foo2 = (Foo) tested.read(); + assertEquals(2, foo2.getValue()); + + testedAsStream().update(executionContext); + + // create new input source + testedAsStream().close(executionContext); + + testedAsStream().open(executionContext); + + Foo fooAfterRestart = (Foo) tested.read(); + assertEquals(3, fooAfterRestart.getValue()); + } }