From 6fa4e453560543682f4fa07c6b0ccdf747902593 Mon Sep 17 00:00:00 2001 From: Mahmoud Ben Hassine Date: Tue, 18 Jul 2023 12:21:48 +0200 Subject: [PATCH] Refine contribution #4376 * Rename variable * Update Javadocs * Update tests Related to #804 --- .../batch/item/database/JpaItemWriter.java | 14 ++++---- .../builder/JpaItemWriterBuilder.java | 15 ++++---- .../builder/JpaItemWriterBuilderTests.java | 34 ++++++++++--------- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JpaItemWriter.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JpaItemWriter.java index 6c2b4911c..8436452d2 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JpaItemWriter.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JpaItemWriter.java @@ -54,7 +54,7 @@ public class JpaItemWriter implements ItemWriter, InitializingBean { private boolean usePersist = false; - private boolean clearEntityManager = true; + private boolean clearPersistenceContext = true; /** * Set the EntityManager to be used internally. @@ -73,12 +73,12 @@ public class JpaItemWriter implements ItemWriter, InitializingBean { } /** - * Flag to indicate that the EntityManager should be cleared and flushed at the end of - * the write (default true). - * @param clearEntityManager the flag value to set + * Flag to indicate that the persistence context should be cleared and flushed at the + * end of the write (default true). + * @param clearPersistenceContext the flag value to set */ - public void setClearEntityManager(boolean clearEntityManager) { - this.clearEntityManager = clearEntityManager; + public void setClearPersistenceContext(boolean clearPersistenceContext) { + this.clearPersistenceContext = clearPersistenceContext; } /** @@ -103,7 +103,7 @@ public class JpaItemWriter implements ItemWriter, InitializingBean { } doWrite(entityManager, items); entityManager.flush(); - if (clearEntityManager) { + if (this.clearPersistenceContext) { entityManager.clear(); } } diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilder.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilder.java index f6a96c2fa..cdf026265 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilder.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilder.java @@ -34,7 +34,7 @@ public class JpaItemWriterBuilder { private boolean usePersist = false; - private boolean clearEntityManager = true; + private boolean clearPersistenceContext = true; /** * The JPA {@link EntityManagerFactory} to obtain an entity manager from. Required. @@ -62,13 +62,14 @@ public class JpaItemWriterBuilder { /** * If set to false, the {@link jakarta.persistence.EntityManager} will not be cleared - * at the end of the chunk. - * @param clearEntityManager defaults to true + * at the end of the chunk. defaults to true + * @param clearPersistenceContext true if the persistence context should be cleared + * after writing items, false otherwise * @return this instance for method chaining - * @see org.springframework.batch.item.database.JpaItemWriter#setClearEntityManager(boolean) + * @see org.springframework.batch.item.database.JpaItemWriter#setClearPersistenceContext(boolean) */ - public JpaItemWriterBuilder clearEntityManager(boolean clearEntityManager) { - this.clearEntityManager = clearEntityManager; + public JpaItemWriterBuilder clearPersistenceContext(boolean clearPersistenceContext) { + this.clearPersistenceContext = clearPersistenceContext; return this; } @@ -83,7 +84,7 @@ public class JpaItemWriterBuilder { JpaItemWriter writer = new JpaItemWriter<>(); writer.setEntityManagerFactory(this.entityManagerFactory); writer.setUsePersist(this.usePersist); - writer.setClearEntityManager(this.clearEntityManager); + writer.setClearPersistenceContext(this.clearPersistenceContext); return writer; } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilderTests.java index 9a2509e2d..5afc14e3d 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilderTests.java @@ -76,22 +76,6 @@ class JpaItemWriterBuilderTests { verify(this.entityManager).clear(); } - @Test - void testConfigurationClearEntityManager() throws Exception { - JpaItemWriter itemWriter = new JpaItemWriterBuilder().clearEntityManager(false) - .entityManagerFactory(this.entityManagerFactory).build(); - - itemWriter.afterPropertiesSet(); - - Chunk chunk = Chunk.of("foo", "bar"); - - itemWriter.write(chunk); - - verify(this.entityManager).merge(chunk.getItems().get(0)); - verify(this.entityManager).merge(chunk.getItems().get(1)); - verify(this.entityManager, never()).clear(); - } - @Test void testValidation() { Exception exception = assertThrows(IllegalStateException.class, @@ -114,6 +98,24 @@ class JpaItemWriterBuilderTests { verify(this.entityManager).persist(chunk.getItems().get(0)); verify(this.entityManager).persist(chunk.getItems().get(1)); + verify(this.entityManager).clear(); + } + + @Test + void testClearPersistenceContext() throws Exception { + JpaItemWriter itemWriter = new JpaItemWriterBuilder().clearPersistenceContext(false) + .entityManagerFactory(this.entityManagerFactory) + .build(); + + itemWriter.afterPropertiesSet(); + + Chunk chunk = Chunk.of("foo", "bar"); + + itemWriter.write(chunk); + + verify(this.entityManager).merge(chunk.getItems().get(0)); + verify(this.entityManager).merge(chunk.getItems().get(1)); + verify(this.entityManager, never()).clear(); } }