/** * Returns a fully built {@link JpaItemWriter}. * * @return the writer */ public JpaItemWriter<T> build() { Assert.state(this.entityManagerFactory != null, "EntityManagerFactory must be provided"); JpaItemWriter<T> writer = new JpaItemWriter<>(); writer.setEntityManagerFactory(this.entityManagerFactory); return writer; } }
/** * Merge all provided items that aren't already in the persistence context * and then flush the entity manager. * * @see org.springframework.batch.item.ItemWriter#write(java.util.List) */ @Override public void write(List<? extends T> items) { EntityManager entityManager = EntityManagerFactoryUtils.getTransactionalEntityManager(entityManagerFactory); if (entityManager == null) { throw new DataAccessResourceFailureException("Unable to obtain a transactional EntityManager"); } doWrite(entityManager, items); entityManager.flush(); }
@Test public void testAfterPropertiesSet() throws Exception { writer = new JpaItemWriter<>(); try { writer.afterPropertiesSet(); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected assertTrue("Wrong message for exception: " + e.getMessage(), e.getMessage().indexOf("EntityManagerFactory") >= 0); } }
@Test public void testConfiguration() throws Exception { JpaItemWriter<String> itemWriter = new JpaItemWriterBuilder<String>() .entityManagerFactory(this.entityManagerFactory) .build(); itemWriter.afterPropertiesSet(); List<String> items = Arrays.asList("foo", "bar"); itemWriter.write(items); verify(this.entityManager).merge(items.get(0)); verify(this.entityManager).merge(items.get(1)); }
@Test public void testWriteAndFlushSunnyDay() throws Exception { EntityManager em = mock(EntityManager.class,"em"); em.contains("foo"); em.contains("bar"); em.merge("bar"); em.flush(); TransactionSynchronizationManager.bindResource(emf, new EntityManagerHolder(em)); List<String> items = Arrays.asList(new String[] { "foo", "bar" }); writer.write(items); TransactionSynchronizationManager.unbindResource(emf); }
@Test public void testWriteAndFlushWithFailure() throws Exception { final RuntimeException ex = new RuntimeException("ERROR"); EntityManager em = mock(EntityManager.class,"em"); em.contains("foo"); em.contains("bar"); em.merge("bar"); when(em).thenThrow(ex); TransactionSynchronizationManager.bindResource(emf, new EntityManagerHolder(em)); List<String> items = Arrays.asList(new String[] { "foo", "bar" }); try { writer.write(items); fail("Expected RuntimeException"); } catch (RuntimeException e) { assertEquals("ERROR", e.getMessage()); } TransactionSynchronizationManager.unbindResource(emf); }
@Before public void setUp() throws Exception { if (TransactionSynchronizationManager.isSynchronizationActive()) { TransactionSynchronizationManager.clearSynchronization(); } writer = new JpaItemWriter<>(); emf = mock(EntityManagerFactory.class,"emf"); writer.setEntityManagerFactory(emf); }
/** * Merge all provided items that aren't already in the persistence context * and then flush the entity manager. * * @see org.springframework.batch.item.ItemWriter#write(java.util.List) */ @Override public void write(List<? extends T> items) { EntityManager entityManager = EntityManagerFactoryUtils.getTransactionalEntityManager(entityManagerFactory); if (entityManager == null) { throw new DataAccessResourceFailureException("Unable to obtain a transactional EntityManager"); } doWrite(entityManager, items); entityManager.flush(); }
public JpaItemWriter<StoreHistory> writer() { JpaItemWriter<StoreHistory> writer = new JpaItemWriter<>(); writer.setEntityManagerFactory(entityManagerFactory); return writer; }
@Bean public JpaItemWriter<CustomerBackup> writer() { final JpaItemWriter<CustomerBackup> itemWriter = new JpaItemWriter<>(); itemWriter.setEntityManagerFactory(emf); return itemWriter; } }
@Bean public ItemWriter<Person> jpaItemWriter(EntityManagerFactory entityManagerFactory) { JpaItemWriter<Person> writer = new JpaItemWriter<>(); writer.setEntityManagerFactory(entityManagerFactory); return writer; } }
/** * Returns a fully built {@link JpaItemWriter}. * * @return the writer */ public JpaItemWriter<T> build() { Assert.state(this.entityManagerFactory != null, "EntityManagerFactory must be provided"); JpaItemWriter<T> writer = new JpaItemWriter<>(); writer.setEntityManagerFactory(this.entityManagerFactory); return writer; } }