/** * Creates a {@link PassThroughItemProcessor} and uses it to create an * instance of {@link Tasklet}. */ public TestingChunkOrientedTasklet(ItemReader<T> itemReader, ItemProcessor<T, T> itemProcessor, ItemWriter<T> itemWriter, RepeatOperations repeatOperations) { super(new SimpleChunkProvider<>(itemReader, repeatOperations), new SimpleChunkProcessor<>( itemProcessor, itemWriter)); }
@Override protected Tasklet createTasklet() { Assert.state(reader != null, "ItemReader must be provided"); Assert.state(writer != null, "ItemWriter must be provided"); RepeatOperations repeatOperations = createChunkOperations(); SimpleChunkProvider<I> chunkProvider = new SimpleChunkProvider<>(getReader(), repeatOperations); SimpleChunkProcessor<I, O> chunkProcessor = new SimpleChunkProcessor<>(getProcessor(), getWriter()); chunkProvider.setListeners(new ArrayList<>(itemListeners)); chunkProcessor.setListeners(new ArrayList<>(itemListeners)); ChunkOrientedTasklet<I> tasklet = new ChunkOrientedTasklet<>(chunkProvider, chunkProcessor); tasklet.setBuffering(!readerTransactionalQueue); return tasklet; }
@Test public void testProvide() throws Exception { provider = new SimpleChunkProvider<>(new ListItemReader<>(Arrays.asList("foo", "bar")), new RepeatTemplate()); Chunk<String> chunk = provider.provide(contribution); assertNotNull(chunk); assertEquals(2, chunk.getItems().size()); }
@Test public void testProvideWithOverflow() throws Exception { provider = new SimpleChunkProvider<String>(new ListItemReader<>(Arrays.asList("foo", "bar")), new RepeatTemplate()) { @Override protected String read(StepContribution contribution, Chunk<String> chunk) throws SkipOverflowException, Exception { chunk.skip(new RuntimeException("Planned")); throw new SkipOverflowException("Overflow"); } }; Chunk<String> chunk = null; chunk = provider.provide(contribution); assertNotNull(chunk); assertEquals(0, chunk.getItems().size()); assertEquals(1, chunk.getErrors().size()); }
/** * Extension point for creating appropriate {@link ChunkProvider}. Return * value must subclass {@link SimpleChunkProvider} due to listener * registration. */ protected SimpleChunkProvider<T> configureChunkProvider() { return new SimpleChunkProvider<T>(itemReader, chunkOperations); }
@Override protected Tasklet createTasklet() { Assert.state(reader != null, "ItemReader must be provided"); Assert.state(processor != null || writer != null, "ItemWriter or ItemProcessor must be provided"); RepeatOperations repeatOperations = createChunkOperations(); SimpleChunkProvider<I> chunkProvider = new SimpleChunkProvider<I>(reader, repeatOperations); SimpleChunkProcessor<I, O> chunkProcessor = new SimpleChunkProcessor<I, O>(processor, writer); chunkProvider.setListeners(new ArrayList<StepListener>(itemListeners)); chunkProcessor.setListeners(new ArrayList<StepListener>(itemListeners)); ChunkOrientedTasklet<I> tasklet = new ChunkOrientedTasklet<I>(chunkProvider, chunkProcessor); tasklet.setBuffering(!readerTransactionalQueue); return tasklet; }
@Override protected Tasklet createTasklet() { Assert.state(reader != null, "ItemReader must be provided"); Assert.state(writer != null, "ItemWriter must be provided"); RepeatOperations repeatOperations = createChunkOperations(); SimpleChunkProvider<I> chunkProvider = new SimpleChunkProvider<>(getReader(), repeatOperations); SimpleChunkProcessor<I, O> chunkProcessor = new SimpleChunkProcessor<>(getProcessor(), getWriter()); chunkProvider.setListeners(new ArrayList<>(itemListeners)); chunkProcessor.setListeners(new ArrayList<>(itemListeners)); ChunkOrientedTasklet<I> tasklet = new ChunkOrientedTasklet<>(chunkProvider, chunkProcessor); tasklet.setBuffering(!readerTransactionalQueue); return tasklet; }
@Override protected Tasklet createTasklet() { Assert.state(reader != null, "ItemReader must be provided"); Assert.state(writer != null, "ItemWriter must be provided"); RepeatOperations repeatOperations = createChunkOperations(); SimpleChunkProvider<I> chunkProvider = new SimpleChunkProvider<>(getReader(), repeatOperations); SimpleChunkProcessor<I, O> chunkProcessor = new SimpleChunkProcessor<>(getProcessor(), getWriter()); chunkProvider.setListeners(new ArrayList<>(itemListeners)); chunkProcessor.setListeners(new ArrayList<>(itemListeners)); ChunkOrientedTasklet<I> tasklet = new ChunkOrientedTasklet<>(chunkProvider, chunkProcessor); tasklet.setBuffering(!readerTransactionalQueue); return tasklet; }