diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/ItemWriteListener.java b/spring-batch-core/src/main/java/org/springframework/batch/core/ItemWriteListener.java index 7b9ca91b3..5e43245b2 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/ItemWriteListener.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/ItemWriteListener.java @@ -15,6 +15,8 @@ */ package org.springframework.batch.core; +import java.util.List; + import org.springframework.batch.item.ItemWriter; /** @@ -23,30 +25,31 @@ import org.springframework.batch.item.ItemWriter; * @author Lucas Ward * */ -public interface ItemWriteListener extends StepListener { +public interface ItemWriteListener extends StepListener { /** * Called before {@link ItemWriter#write(java.util.List)} * - * @param item to be written + * @param items to be written */ - void beforeWrite(Object item); + void beforeWrite(List items); /** - * Called after {@link ItemWriter#write(java.util.List)} If the item is last in a - * chunk, this will be called before any transaction is committed, and + * Called after {@link ItemWriter#write(java.util.List)} If the item is last + * in a chunk, this will be called before any transaction is committed, and * before {@link ChunkListener#afterChunk()} - * @param item written item + * @param items written items */ - void afterWrite(Object item); + void afterWrite(List items); /** - * Called if an error occurs while trying to write. + * Called if an error occurs while trying to write. Will be called inside a + * transaction, but the transaction will normally be rolled back. There is + * no way to identify from this callback which of the items (if any) caused + * the error. * - * @param ex - * thrown from {@link ItemWriter} - * @param item - * attempted to be written. + * @param exception thrown from {@link ItemWriter} + * @param items attempted to be written. */ - void onWriteError(Exception ex, Object item); + void onWriteError(Exception exception, List items); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeChunkListener.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeChunkListener.java index a1f5ea25b..1dfae55f4 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeChunkListener.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeChunkListener.java @@ -15,6 +15,7 @@ */ package org.springframework.batch.core.listener; +import java.util.Arrays; import java.util.Iterator; import org.springframework.batch.core.ChunkListener; @@ -26,7 +27,7 @@ import org.springframework.core.Ordered; */ public class CompositeChunkListener implements ChunkListener { - private OrderedComposite listeners = new OrderedComposite(); + private OrderedComposite listeners = new OrderedComposite(); /** * Public setter for the listeners. @@ -34,7 +35,7 @@ public class CompositeChunkListener implements ChunkListener { * @param listeners */ public void setListeners(ChunkListener[] listeners) { - this.listeners.setItems(listeners); + this.listeners.setItems(Arrays.asList(listeners)); } /** @@ -53,7 +54,7 @@ public class CompositeChunkListener implements ChunkListener { * @see org.springframework.batch.core.ChunkListener#afterChunk() */ public void afterChunk() { - for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { + for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { ChunkListener listener = (ChunkListener) iterator.next(); listener.afterChunk(); } @@ -65,7 +66,7 @@ public class CompositeChunkListener implements ChunkListener { * @see org.springframework.batch.core.ChunkListener#beforeChunk() */ public void beforeChunk() { - for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { + for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { ChunkListener listener = (ChunkListener) iterator.next(); listener.beforeChunk(); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeExecutionJobListener.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeExecutionJobListener.java index e6607b161..cb071751f 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeExecutionJobListener.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeExecutionJobListener.java @@ -15,6 +15,7 @@ */ package org.springframework.batch.core.listener; +import java.util.Arrays; import java.util.Iterator; import org.springframework.batch.core.JobExecution; @@ -27,7 +28,7 @@ import org.springframework.core.Ordered; */ public class CompositeExecutionJobListener implements JobExecutionListener { - private OrderedComposite listeners = new OrderedComposite(); + private OrderedComposite listeners = new OrderedComposite(); /** * Public setter for the listeners. @@ -35,7 +36,7 @@ public class CompositeExecutionJobListener implements JobExecutionListener { * @param listeners */ public void setListeners(JobExecutionListener[] listeners) { - this.listeners.setItems(listeners); + this.listeners.setItems(Arrays.asList(listeners)); } /** @@ -53,7 +54,7 @@ public class CompositeExecutionJobListener implements JobExecutionListener { * @see org.springframework.batch.core.JobExecutionListener#afterJob(org.springframework.batch.core.JobExecution) */ public void afterJob(JobExecution jobExecution) { - for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { + for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { JobExecutionListener listener = (JobExecutionListener) iterator.next(); listener.afterJob(jobExecution); } @@ -65,7 +66,7 @@ public class CompositeExecutionJobListener implements JobExecutionListener { * @see org.springframework.batch.core.JobExecutionListener#beforeJob(org.springframework.batch.core.JobExecution) */ public void beforeJob(JobExecution jobExecution) { - for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { + for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { JobExecutionListener listener = (JobExecutionListener) iterator.next(); listener.beforeJob(jobExecution); } @@ -78,7 +79,7 @@ public class CompositeExecutionJobListener implements JobExecutionListener { * java.lang.Throwable) */ public void onError(JobExecution jobExecution, Throwable e) { - for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { + for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { JobExecutionListener listener = (JobExecutionListener) iterator.next(); listener.onError(jobExecution, e); } @@ -91,7 +92,7 @@ public class CompositeExecutionJobListener implements JobExecutionListener { * @see org.springframework.batch.core.JobExecutionListener#onInterrupt(org.springframework.batch.core.JobExecution) */ public void onInterrupt(JobExecution jobExecution) { - for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { + for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { JobExecutionListener listener = (JobExecutionListener) iterator.next(); listener.onInterrupt(jobExecution); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeItemReadListener.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeItemReadListener.java index fa0b6a761..91b6cc9da 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeItemReadListener.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeItemReadListener.java @@ -15,6 +15,7 @@ */ package org.springframework.batch.core.listener; +import java.util.Arrays; import java.util.Iterator; import org.springframework.batch.core.ItemReadListener; @@ -27,7 +28,7 @@ import org.springframework.core.Ordered; */ public class CompositeItemReadListener implements ItemReadListener { - private OrderedComposite listeners = new OrderedComposite(); + private OrderedComposite listeners = new OrderedComposite(); /** * Public setter for the listeners. @@ -35,7 +36,7 @@ public class CompositeItemReadListener implements ItemReadListener { * @param itemReadListeners */ public void setListeners(ItemReadListener[] itemReadListeners) { - this.listeners.setItems(itemReadListeners); + this.listeners.setItems(Arrays.asList(itemReadListeners)); } /** @@ -53,7 +54,7 @@ public class CompositeItemReadListener implements ItemReadListener { * @see org.springframework.batch.core.ItemReadListener#afterRead(java.lang.Object) */ public void afterRead(Object item) { - for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { + for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { ItemReadListener listener = (ItemReadListener) iterator.next(); listener.afterRead(item); } @@ -65,7 +66,7 @@ public class CompositeItemReadListener implements ItemReadListener { * @see org.springframework.batch.core.ItemReadListener#beforeRead() */ public void beforeRead() { - for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { + for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { ItemReadListener listener = (ItemReadListener) iterator.next(); listener.beforeRead(); } @@ -77,7 +78,7 @@ public class CompositeItemReadListener implements ItemReadListener { * @see org.springframework.batch.core.ItemReadListener#onReadError(java.lang.Exception) */ public void onReadError(Exception ex) { - for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { + for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { ItemReadListener listener = (ItemReadListener) iterator.next(); listener.onReadError(ex); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeItemWriteListener.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeItemWriteListener.java index e6f5e0a22..1b4336d4b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeItemWriteListener.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeItemWriteListener.java @@ -16,6 +16,7 @@ package org.springframework.batch.core.listener; import java.util.Iterator; +import java.util.List; import org.springframework.batch.core.ItemWriteListener; import org.springframework.core.Ordered; @@ -25,62 +26,61 @@ import org.springframework.core.Ordered; * @author Dave Syer * */ -public class CompositeItemWriteListener implements ItemWriteListener { +public class CompositeItemWriteListener implements ItemWriteListener { - private OrderedComposite listeners = new OrderedComposite(); + private OrderedComposite> listeners = new OrderedComposite>(); /** * Public setter for the listeners. * * @param itemWriteListeners */ - public void setListeners(ItemWriteListener[] itemWriteListeners) { + public void setListeners(List> itemWriteListeners) { this.listeners.setItems(itemWriteListeners); } /** * Register additional listener. * - * @param itemReaderListener + * @param itemWriteListener */ - public void register(ItemWriteListener itemReaderListener) { - listeners.add(itemReaderListener); + public void register(ItemWriteListener itemWriteListener) { + listeners.add(itemWriteListener); } /** * Call the registered listeners in reverse order, respecting and * prioritising those that implement {@link Ordered}. - * @see org.springframework.batch.core.ItemWriteListener#afterWrite(java.lang.Object) + * @see ItemWriteListener#afterWrite(java.util.List) */ - public void afterWrite(Object item) { - for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { - ItemWriteListener listener = (ItemWriteListener) iterator.next(); - listener.afterWrite(item); + public void afterWrite(List items) { + for (Iterator> iterator = listeners.reverse(); iterator.hasNext();) { + ItemWriteListener listener = iterator.next(); + listener.afterWrite(items); } } /** * Call the registered listeners in order, respecting and prioritising those * that implement {@link Ordered}. - * @see org.springframework.batch.core.ItemWriteListener#beforeWrite(java.lang.Object) + * @see ItemWriteListener#beforeWrite(List) */ - public void beforeWrite(Object item) { - for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { - ItemWriteListener listener = (ItemWriteListener) iterator.next(); - listener.beforeWrite(item); + public void beforeWrite(List items) { + for (Iterator> iterator = listeners.iterator(); iterator.hasNext();) { + ItemWriteListener listener = iterator.next(); + listener.beforeWrite(items); } } /** * Call the registered listeners in reverse order, respecting and * prioritising those that implement {@link Ordered}. - * @see org.springframework.batch.core.ItemWriteListener#onWriteError(java.lang.Exception, - * java.lang.Object) + * @see ItemWriteListener#onWriteError(Exception, List) */ - public void onWriteError(Exception ex, Object item) { - for (Iterator iterator = listeners.reverse(); iterator.hasNext();) { - ItemWriteListener listener = (ItemWriteListener) iterator.next(); - listener.onWriteError(ex, item); + public void onWriteError(Exception ex, List items) { + for (Iterator> iterator = listeners.reverse(); iterator.hasNext();) { + ItemWriteListener listener = iterator.next(); + listener.onWriteError(ex, items); } } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeSkipListener.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeSkipListener.java index e0b0bed4b..cebd2cb60 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeSkipListener.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeSkipListener.java @@ -15,6 +15,7 @@ */ package org.springframework.batch.core.listener; +import java.util.Arrays; import java.util.Iterator; import org.springframework.batch.core.SkipListener; @@ -26,7 +27,7 @@ import org.springframework.core.Ordered; */ public class CompositeSkipListener implements SkipListener { - private OrderedComposite listeners = new OrderedComposite(); + private OrderedComposite listeners = new OrderedComposite(); /** * Public setter for the listeners. @@ -34,7 +35,7 @@ public class CompositeSkipListener implements SkipListener { * @param listeners */ public void setListeners(SkipListener[] listeners) { - this.listeners.setItems(listeners); + this.listeners.setItems(Arrays.asList(listeners)); } /** @@ -52,7 +53,7 @@ public class CompositeSkipListener implements SkipListener { * @see org.springframework.batch.core.SkipListener#onSkipInRead(java.lang.Throwable) */ public void onSkipInRead(Throwable t) { - for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { + for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { SkipListener listener = (SkipListener) iterator.next(); listener.onSkipInRead(t); } @@ -65,7 +66,7 @@ public class CompositeSkipListener implements SkipListener { * java.lang.Throwable) */ public void onSkipInWrite(Object item, Throwable t) { - for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { + for (Iterator iterator = listeners.iterator(); iterator.hasNext();) { SkipListener listener = (SkipListener) iterator.next(); listener.onSkipInWrite(item, t); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeStepExecutionListener.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeStepExecutionListener.java index 1c258bd29..015453370 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeStepExecutionListener.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/CompositeStepExecutionListener.java @@ -15,6 +15,7 @@ */ package org.springframework.batch.core.listener; +import java.util.Arrays; import java.util.Iterator; import org.springframework.batch.core.StepExecution; @@ -29,7 +30,7 @@ import org.springframework.core.Ordered; */ public class CompositeStepExecutionListener implements StepExecutionListener { - private OrderedComposite list = new OrderedComposite(); + private OrderedComposite list = new OrderedComposite(); /** * Public setter for the listeners. @@ -37,7 +38,7 @@ public class CompositeStepExecutionListener implements StepExecutionListener { * @param listeners */ public void setListeners(StepExecutionListener[] listeners) { - list.setItems(listeners); + list.setItems(Arrays.asList(listeners)); } /** @@ -56,7 +57,7 @@ public class CompositeStepExecutionListener implements StepExecutionListener { */ public ExitStatus afterStep(StepExecution stepExecution) { ExitStatus status = null; - for (Iterator iterator = list.reverse(); iterator.hasNext();) { + for (Iterator iterator = list.reverse(); iterator.hasNext();) { StepExecutionListener listener = (StepExecutionListener) iterator.next(); ExitStatus close = listener.afterStep(stepExecution); status = status != null ? status.and(close) : close; @@ -70,7 +71,7 @@ public class CompositeStepExecutionListener implements StepExecutionListener { * @see org.springframework.batch.core.StepExecutionListener#beforeStep(StepExecution) */ public void beforeStep(StepExecution stepExecution) { - for (Iterator iterator = list.iterator(); iterator.hasNext();) { + for (Iterator iterator = list.iterator(); iterator.hasNext();) { StepExecutionListener listener = (StepExecutionListener) iterator.next(); listener.beforeStep(stepExecution); } @@ -84,7 +85,7 @@ public class CompositeStepExecutionListener implements StepExecutionListener { */ public ExitStatus onErrorInStep(StepExecution stepExecution, Throwable e) { ExitStatus status = null; - for (Iterator iterator = list.reverse(); iterator.hasNext();) { + for (Iterator iterator = list.reverse(); iterator.hasNext();) { StepExecutionListener listener = (StepExecutionListener) iterator.next(); ExitStatus close = listener.onErrorInStep(stepExecution, e); status = status != null ? status.and(close) : close; diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/ItemListenerSupport.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/ItemListenerSupport.java index 725e60fd2..d3f8f6c38 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/ItemListenerSupport.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/ItemListenerSupport.java @@ -15,6 +15,8 @@ */ package org.springframework.batch.core.listener; +import java.util.List; + import org.springframework.batch.core.ItemReadListener; import org.springframework.batch.core.ItemWriteListener; @@ -26,24 +28,24 @@ import org.springframework.batch.core.ItemWriteListener; * @author Lucas Ward * */ -public class ItemListenerSupport implements ItemWriteListener, ItemReadListener { +public class ItemListenerSupport implements ItemWriteListener, ItemReadListener { /* (non-Javadoc) * @see org.springframework.batch.core.domain.ItemWriteListener#afterWrite() */ - public void afterWrite(Object item) { + public void afterWrite(List item) { } /* (non-Javadoc) * @see org.springframework.batch.core.domain.ItemWriteListener#beforeWrite(java.lang.Object) */ - public void beforeWrite(Object item) { + public void beforeWrite(List item) { } /* (non-Javadoc) * @see org.springframework.batch.core.domain.ItemWriteListener#onWriteError(java.lang.Exception, java.lang.Object) */ - public void onWriteError(Exception ex, Object item) { + public void onWriteError(Exception ex, List item) { } /* (non-Javadoc) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/MulticasterBatchListener.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/MulticasterBatchListener.java index a9e620225..aafd03216 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/MulticasterBatchListener.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/MulticasterBatchListener.java @@ -15,6 +15,8 @@ */ package org.springframework.batch.core.listener; +import java.util.List; + import org.springframework.batch.core.ChunkListener; import org.springframework.batch.core.ItemReadListener; import org.springframework.batch.core.ItemWriteListener; @@ -29,8 +31,8 @@ import org.springframework.batch.repeat.ExitStatus; * @author Dave Syer * */ -public class MulticasterBatchListener implements StepExecutionListener, ChunkListener, ItemReadListener, - ItemWriteListener, SkipListener { +public class MulticasterBatchListener implements StepExecutionListener, ChunkListener, ItemReadListener, + ItemWriteListener, SkipListener { private CompositeStepExecutionListener stepListener = new CompositeStepExecutionListener(); @@ -38,7 +40,7 @@ public class MulticasterBatchListener implements StepExecutionListener, ChunkLis private CompositeItemReadListener itemReadListener = new CompositeItemReadListener(); - private CompositeItemWriteListener itemWriteListener = new CompositeItemWriteListener(); + private CompositeItemWriteListener itemWriteListener = new CompositeItemWriteListener(); private CompositeSkipListener skipListener = new CompositeSkipListener(); @@ -61,7 +63,7 @@ public class MulticasterBatchListener implements StepExecutionListener, ChunkLis register(listeners[i]); } } - + /** * Register the listener for callbacks on the appropriate interfaces * implemented. Any {@link StepListener} can be provided, or an @@ -78,6 +80,7 @@ public class MulticasterBatchListener implements StepExecutionListener, ChunkLis this.itemReadListener.register((ItemReadListener) listener); } if (listener instanceof ItemWriteListener) { + // TODO: make this type safe somehow? this.itemWriteListener.register((ItemWriteListener) listener); } if (listener instanceof SkipListener) { @@ -191,11 +194,11 @@ public class MulticasterBatchListener implements StepExecutionListener, ChunkLis /** * - * @see org.springframework.batch.core.listener.CompositeItemWriteListener#afterWrite(Object) + * @see ItemWriteListener#afterWrite(List) */ - public void afterWrite(Object item) { + public void afterWrite(List items) { try { - itemWriteListener.afterWrite(item); + itemWriteListener.afterWrite(items); } catch (RuntimeException e) { throw new StepListenerFailedException("Error in afterWrite.", e); @@ -203,12 +206,12 @@ public class MulticasterBatchListener implements StepExecutionListener, ChunkLis } /** - * @param item - * @see org.springframework.batch.core.listener.CompositeItemWriteListener#beforeWrite(java.lang.Object) + * @param items + * @see ItemWriteListener#beforeWrite(List) */ - public void beforeWrite(Object item) { + public void beforeWrite(List items) { try { - itemWriteListener.beforeWrite(item); + itemWriteListener.beforeWrite(items); } catch (RuntimeException e) { throw new StepListenerFailedException("Error in beforeWrite.", e); @@ -217,13 +220,12 @@ public class MulticasterBatchListener implements StepExecutionListener, ChunkLis /** * @param ex - * @param item - * @see org.springframework.batch.core.listener.CompositeItemWriteListener#onWriteError(java.lang.Exception, - * java.lang.Object) + * @param items + * @see ItemWriteListener#onWriteError(Exception, List) */ - public void onWriteError(Exception ex, Object item) { + public void onWriteError(Exception ex, List items) { try { - itemWriteListener.onWriteError(ex, item); + itemWriteListener.onWriteError(ex, items); } catch (RuntimeException e) { throw new StepListenerFailedException("Error in onWriteError.", ex, e); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/OrderedComposite.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/OrderedComposite.java index 22b80518a..48fe54179 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/OrderedComposite.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/OrderedComposite.java @@ -22,32 +22,32 @@ import java.util.Iterator; import java.util.List; import java.util.TreeSet; -import org.springframework.core.OrderComparator; import org.springframework.core.Ordered; +import org.springframework.core.annotation.AnnotationAwareOrderComparator; /** * @author Dave Syer * */ -class OrderedComposite { +class OrderedComposite { - private List unordered = new ArrayList(); + private List unordered = new ArrayList(); @SuppressWarnings("unchecked") - private Collection ordered = new TreeSet(new OrderComparator()); + private Collection ordered = new TreeSet(new AnnotationAwareOrderComparator()); - private List list = new ArrayList(); + private List list = new ArrayList(); /** * Public setter for the listeners. * * @param items */ - public void setItems(Object[] items) { + public void setItems(List items) { unordered.clear(); ordered.clear(); - for (int i = 0; i < items.length; i++) { - add(items[i]); + for (S s : items) { + add(s); } } @@ -56,7 +56,7 @@ class OrderedComposite { * * @param item */ - public void add(Object item) { + public void add(S item) { if (item instanceof Ordered) { if (!ordered.contains(item)) { ordered.add(item); @@ -77,8 +77,8 @@ class OrderedComposite { * first, followed by any unordered ones. * @return an iterator over the list of items */ - public Iterator iterator() { - return new ArrayList(list).iterator(); + public Iterator iterator() { + return new ArrayList(list).iterator(); } /** @@ -86,8 +86,8 @@ class OrderedComposite { * last, after any unordered ones. * @return an iterator over the list of items */ - public Iterator reverse() { - ArrayList result = new ArrayList(list); + public Iterator reverse() { + ArrayList result = new ArrayList(list); Collections.reverse(result); return result.iterator(); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/StepListenerSupport.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/StepListenerSupport.java index 6cb7781e8..422e60377 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/StepListenerSupport.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/StepListenerSupport.java @@ -15,12 +15,14 @@ */ package org.springframework.batch.core.listener; -import org.springframework.batch.core.StepListener; +import java.util.List; + import org.springframework.batch.core.ChunkListener; import org.springframework.batch.core.ItemReadListener; import org.springframework.batch.core.ItemWriteListener; import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.StepExecutionListener; +import org.springframework.batch.core.StepListener; import org.springframework.batch.repeat.ExitStatus; /** @@ -29,8 +31,8 @@ import org.springframework.batch.repeat.ExitStatus; * @author Lucas Ward * */ -public class StepListenerSupport implements StepExecutionListener, ChunkListener, - ItemReadListener, ItemWriteListener { +public class StepListenerSupport implements StepExecutionListener, ChunkListener, + ItemReadListener, ItemWriteListener { /* (non-Javadoc) * @see org.springframework.batch.core.domain.StepListener#afterStep(StepExecution stepExecution) @@ -83,21 +85,21 @@ public class StepListenerSupport implements StepExecutionListener, ChunkListener } /* (non-Javadoc) - * @see org.springframework.batch.core.domain.ItemWriteListener#afterWrite() + * @see org.springframework.batch.core.ItemWriteListener#afterWrite(java.util.List) */ - public void afterWrite(Object item) { + public void afterWrite(List items) { } /* (non-Javadoc) - * @see org.springframework.batch.core.domain.ItemWriteListener#beforeWrite(java.lang.Object) + * @see org.springframework.batch.core.ItemWriteListener#beforeWrite(java.util.List) */ - public void beforeWrite(Object item) { + public void beforeWrite(List items) { } /* (non-Javadoc) - * @see org.springframework.batch.core.domain.ItemWriteListener#onWriteError(java.lang.Exception, java.lang.Object) + * @see org.springframework.batch.core.ItemWriteListener#onWriteError(java.lang.Exception, java.util.List) */ - public void onWriteError(Exception ex, Object item) { + public void onWriteError(Exception exception, List items) { } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/DefaultItemFailureHandler.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/DefaultItemFailureHandler.java index 46c8abc6b..394e4acfc 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/DefaultItemFailureHandler.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/DefaultItemFailureHandler.java @@ -15,6 +15,8 @@ */ package org.springframework.batch.core.step.item; +import java.util.List; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.batch.core.listener.ItemListenerSupport; @@ -28,16 +30,12 @@ import org.springframework.batch.core.listener.ItemListenerSupport; * @author Lucas Ward * */ -public class DefaultItemFailureHandler extends ItemListenerSupport { +public class DefaultItemFailureHandler extends ItemListenerSupport { protected static final Log logger = LogFactory .getLog(DefaultItemFailureHandler.class); - /* - * (non-Javadoc) - * - * @see org.springframework.batch.core.domain.ItemFailureLog#log(java.util.List) - */ + @Override public void onReadError(Exception ex) { try { logger.error("Error encountered while reading", ex); @@ -47,7 +45,8 @@ public class DefaultItemFailureHandler extends ItemListenerSupport { } } - public void onWriteError(Exception ex, Object item) { + @Override + public void onWriteError(Exception ex, List item) { try { logger.error("Error encountered while writing item: [ " + item + "]", ex); } catch (Exception exception) { diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStepHandler.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStepHandler.java index 5e0d37c9d..7755c3eda 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStepHandler.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStepHandler.java @@ -60,7 +60,7 @@ public class ItemOrientedStepHandler implements StepHandler { private final RepeatOperations repeatOperations; - final private MulticasterBatchListener listener = new MulticasterBatchListener(); + final private MulticasterBatchListener listener = new MulticasterBatchListener(); /** * @param itemReader @@ -291,7 +291,7 @@ public class ItemOrientedStepHandler implements StepHandler { * Public getter for the listener. * @return the listener */ - protected MulticasterBatchListener getListener() { + protected MulticasterBatchListener getListener() { return listener; } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/listener/CompositeItemWriteListenerTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/listener/CompositeItemWriteListenerTests.java index af69b6a71..b5fca07f7 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/listener/CompositeItemWriteListenerTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/listener/CompositeItemWriteListenerTests.java @@ -15,7 +15,13 @@ */ package org.springframework.batch.core.listener; -import static org.easymock.EasyMock.*; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import org.junit.Before; import org.junit.Test; @@ -23,42 +29,43 @@ import org.springframework.batch.core.ItemWriteListener; /** * @author Lucas Ward - * + * */ public class CompositeItemWriteListenerTests { - ItemWriteListener listener; - CompositeItemWriteListener compositeListener; - + ItemWriteListener listener; + + CompositeItemWriteListener compositeListener; + + @SuppressWarnings("unchecked") @Before public void setUp() throws Exception { - listener = createMock(ItemWriteListener.class); - compositeListener = new CompositeItemWriteListener(); + compositeListener = new CompositeItemWriteListener(); compositeListener.register(listener); } - + @Test - public void testBeforeWrite(){ - Object item = new Object(); + public void testBeforeWrite() { + List item = Collections.singletonList(new Object()); listener.beforeWrite(item); replay(listener); compositeListener.beforeWrite(item); verify(listener); } - + @Test - public void testAfterWrite(){ - Object item = new Object(); + public void testAfterWrite() { + List item = Collections.singletonList(new Object()); listener.afterWrite(item); replay(listener); compositeListener.afterWrite(item); verify(listener); } - + @Test - public void testOnWriteError(){ - Object item = new Object(); + public void testOnWriteError() { + List item = Collections.singletonList(new Object()); Exception ex = new Exception(); listener.onWriteError(ex, item); replay(listener); @@ -68,8 +75,12 @@ public class CompositeItemWriteListenerTests { @Test public void testSetListners() throws Exception { - compositeListener.setListeners(new ItemWriteListener[] {listener}); - Object item = new Object(); + compositeListener.setListeners(new ArrayList>() { + { + add(listener); + } + }); + List item = Collections.singletonList(new Object()); listener.beforeWrite(item); replay(listener); compositeListener.beforeWrite(item); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/listener/MulticasterBatchListenerTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/listener/MulticasterBatchListenerTests.java index 775e0b27b..55b91c6d4 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/listener/MulticasterBatchListenerTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/listener/MulticasterBatchListenerTests.java @@ -18,6 +18,8 @@ package org.springframework.batch.core.listener; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; +import java.util.List; + import org.junit.Before; import org.junit.Test; import org.springframework.batch.core.StepExecution; @@ -26,44 +28,48 @@ import org.springframework.batch.repeat.ExitStatus; /** * @author Dave Syer - * + * */ public class MulticasterBatchListenerTests { - - private MulticasterBatchListener multicast = new MulticasterBatchListener(); - + + private MulticasterBatchListener multicast = new MulticasterBatchListener(); + private int count = 0; - + private boolean error = false; - + @Before public void setUp() { multicast.register(new CountingStepListenerSupport()); } - + /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#setListeners(org.springframework.batch.core.StepListener[])}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#setListeners(org.springframework.batch.core.StepListener[])} + * . */ @Test public void testSetListeners() { - multicast.setListeners(new StepListener[] { new StepListenerSupport() { + multicast.setListeners(new StepListener[] { new StepListenerSupport() { @Override public ExitStatus afterStep(StepExecution stepExecution) { count++; return super.afterStep(stepExecution); } - }}); + } }); multicast.afterStep(null); // setListeners is cumulative (should be OK if used for DI) assertEquals(2, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#register(org.springframework.batch.core.StepListener)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#register(org.springframework.batch.core.StepListener)} + * . */ @Test public void testRegister() { - multicast.register(new StepListenerSupport() { + multicast.register(new StepListenerSupport() { @Override public ExitStatus afterStep(StepExecution stepExecution) { count++; @@ -75,7 +81,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterStep(org.springframework.batch.core.StepExecution)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterStep(org.springframework.batch.core.StepExecution)} + * . */ @Test public void testAfterStepFails() { @@ -83,17 +91,19 @@ public class MulticasterBatchListenerTests { try { multicast.afterStep(null); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "listener error", message); + assertEquals("Wrong message: " + message, "listener error", message); } assertEquals(1, count); } - /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeStep(org.springframework.batch.core.StepExecution)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeStep(org.springframework.batch.core.StepExecution)} + * . */ @Test public void testBeforeStep() { @@ -102,7 +112,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeStep(org.springframework.batch.core.StepExecution)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeStep(org.springframework.batch.core.StepExecution)} + * . */ @Test public void testBeforeStepFails() { @@ -110,16 +122,19 @@ public class MulticasterBatchListenerTests { try { multicast.beforeStep(null); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "listener error", message); + assertEquals("Wrong message: " + message, "listener error", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#onErrorInStep(org.springframework.batch.core.StepExecution, java.lang.Throwable)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#onErrorInStep(org.springframework.batch.core.StepExecution, java.lang.Throwable)} + * . */ @Test public void testOnErrorInStep() { @@ -128,7 +143,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#onErrorInStep(org.springframework.batch.core.StepExecution, java.lang.Throwable)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#onErrorInStep(org.springframework.batch.core.StepExecution, java.lang.Throwable)} + * . */ @Test public void testOnErrorInStepFails() { @@ -136,16 +153,19 @@ public class MulticasterBatchListenerTests { try { multicast.onErrorInStep(null, new RuntimeException("foo")); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "foo", message); + assertEquals("Wrong message: " + message, "foo", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterChunk()}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterChunk()} + * . */ @Test public void testAfterChunk() { @@ -154,7 +174,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterChunk()}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterChunk()} + * . */ @Test public void testAfterChunkFails() { @@ -162,16 +184,19 @@ public class MulticasterBatchListenerTests { try { multicast.afterChunk(); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "listener error", message); + assertEquals("Wrong message: " + message, "listener error", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeChunk()}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeChunk()} + * . */ @Test public void testBeforeChunk() { @@ -180,7 +205,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeChunk()}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeChunk()} + * . */ @Test public void testBeforeChunkFails() { @@ -188,16 +215,19 @@ public class MulticasterBatchListenerTests { try { multicast.beforeChunk(); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "listener error", message); + assertEquals("Wrong message: " + message, "listener error", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterRead(java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterRead(java.lang.Object)} + * . */ @Test public void testAfterRead() { @@ -206,7 +236,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterRead(java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterRead(java.lang.Object)} + * . */ @Test public void testAfterReadFails() { @@ -214,16 +246,19 @@ public class MulticasterBatchListenerTests { try { multicast.afterRead(null); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "listener error", message); + assertEquals("Wrong message: " + message, "listener error", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeRead()}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeRead()} + * . */ @Test public void testBeforeRead() { @@ -232,7 +267,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeRead()}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeRead()} + * . */ @Test public void testBeforeReadFails() { @@ -240,16 +277,19 @@ public class MulticasterBatchListenerTests { try { multicast.beforeRead(); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "listener error", message); + assertEquals("Wrong message: " + message, "listener error", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#onReadError(java.lang.Exception)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#onReadError(java.lang.Exception)} + * . */ @Test public void testOnReadError() { @@ -258,7 +298,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#onReadError(java.lang.Exception)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#onReadError(java.lang.Exception)} + * . */ @Test public void testOnReadErrorFails() { @@ -266,16 +308,19 @@ public class MulticasterBatchListenerTests { try { multicast.onReadError(new RuntimeException("foo")); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "foo", message); + assertEquals("Wrong message: " + message, "foo", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterWrite(java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterWrite(java.util.List)} + * . */ @Test public void testAfterWrite() { @@ -284,7 +329,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterWrite(java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#afterWrite(java.util.List)} + * . */ @Test public void testAfterWriteFails() { @@ -292,16 +339,19 @@ public class MulticasterBatchListenerTests { try { multicast.afterWrite(null); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "listener error", message); + assertEquals("Wrong message: " + message, "listener error", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeWrite(java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeWrite(List)} + * . */ @Test public void testBeforeWrite() { @@ -310,7 +360,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeWrite(java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#beforeWrite(List)} + * . */ @Test public void testBeforeWriteFails() { @@ -318,16 +370,19 @@ public class MulticasterBatchListenerTests { try { multicast.beforeWrite(null); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "listener error", message); + assertEquals("Wrong message: " + message, "listener error", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#onWriteError(java.lang.Exception, java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#onWriteError(Exception, java.util.List)} + * . */ @Test public void testOnWriteError() { @@ -336,7 +391,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#onWriteError(java.lang.Exception, java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#onWriteError(Exception, java.util.List)} + * . */ @Test public void testOnWriteErrorFails() { @@ -344,16 +401,19 @@ public class MulticasterBatchListenerTests { try { multicast.onWriteError(new RuntimeException("foo"), null); fail("Expected StepListenerFailedException"); - } catch (StepListenerFailedException e) { + } + catch (StepListenerFailedException e) { // expected String message = e.getCause().getMessage(); - assertEquals("Wrong message: "+message, "foo", message); + assertEquals("Wrong message: " + message, "foo", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#onSkipInRead(java.lang.Throwable)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#onSkipInRead(java.lang.Throwable)} + * . */ @Test public void testOnSkipInRead() { @@ -369,7 +429,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#onSkipInRead(java.lang.Throwable)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#onSkipInRead(java.lang.Throwable)} + * . */ @Test public void testOnSkipInReadFails() { @@ -383,16 +445,19 @@ public class MulticasterBatchListenerTests { try { multicast.onSkipInRead(new RuntimeException("bar")); fail("Expected RuntimeException"); - } catch (RuntimeException e) { + } + catch (RuntimeException e) { // expected String message = e.getMessage(); - assertEquals("Wrong message: "+message, "foo", message); + assertEquals("Wrong message: " + message, "foo", message); } assertEquals(1, count); } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#onSkipInWrite(java.lang.Object, java.lang.Throwable)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#onSkipInWrite(java.lang.Object, java.lang.Throwable)} + * . */ @Test public void testOnSkipInWrite() { @@ -408,7 +473,9 @@ public class MulticasterBatchListenerTests { } /** - * Test method for {@link org.springframework.batch.core.listener.MulticasterBatchListener#onSkipInWrite(java.lang.Object, java.lang.Throwable)}. + * Test method for + * {@link org.springframework.batch.core.listener.MulticasterBatchListener#onSkipInWrite(java.lang.Object, java.lang.Throwable)} + * . */ @Test public void testOnSkipInWriteFails() { @@ -422,19 +489,20 @@ public class MulticasterBatchListenerTests { try { multicast.onSkipInWrite(null, new RuntimeException("bar")); fail("Expected RuntimeException"); - } catch (RuntimeException e) { + } + catch (RuntimeException e) { // expected String message = e.getMessage(); - assertEquals("Wrong message: "+message, "foo", message); + assertEquals("Wrong message: " + message, "foo", message); } assertEquals(1, count); } /** * @author Dave Syer - * + * */ - private final class CountingStepListenerSupport extends StepListenerSupport { + private final class CountingStepListenerSupport extends StepListenerSupport { @Override public void onReadError(Exception ex) { count++; @@ -444,8 +512,12 @@ public class MulticasterBatchListenerTests { super.onReadError(ex); } - /* (non-Javadoc) - * @see org.springframework.batch.core.listener.StepListenerSupport#afterChunk() + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.listener.StepListenerSupport#afterChunk + * () */ @Override public void afterChunk() { @@ -456,8 +528,12 @@ public class MulticasterBatchListenerTests { super.afterChunk(); } - /* (non-Javadoc) - * @see org.springframework.batch.core.listener.StepListenerSupport#afterRead(java.lang.Object) + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.listener.StepListenerSupport#afterRead + * (java.lang.Object) */ @Override public void afterRead(Object item) { @@ -468,8 +544,12 @@ public class MulticasterBatchListenerTests { super.afterRead(item); } - /* (non-Javadoc) - * @see org.springframework.batch.core.listener.StepListenerSupport#afterStep(org.springframework.batch.core.StepExecution) + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.listener.StepListenerSupport#afterStep + * (org.springframework.batch.core.StepExecution) */ @Override public ExitStatus afterStep(StepExecution stepExecution) { @@ -480,20 +560,12 @@ public class MulticasterBatchListenerTests { return super.afterStep(stepExecution); } - /* (non-Javadoc) - * @see org.springframework.batch.core.listener.StepListenerSupport#afterWrite(java.lang.Object) - */ - @Override - public void afterWrite(Object item) { - count++; - if (error) { - throw new RuntimeException("listener error"); - } - super.afterWrite(item); - } - - /* (non-Javadoc) - * @see org.springframework.batch.core.listener.StepListenerSupport#beforeChunk() + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.listener.StepListenerSupport#beforeChunk + * () */ @Override public void beforeChunk() { @@ -504,8 +576,12 @@ public class MulticasterBatchListenerTests { super.beforeChunk(); } - /* (non-Javadoc) - * @see org.springframework.batch.core.listener.StepListenerSupport#beforeRead() + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.listener.StepListenerSupport#beforeRead + * () */ @Override public void beforeRead() { @@ -516,8 +592,12 @@ public class MulticasterBatchListenerTests { super.beforeRead(); } - /* (non-Javadoc) - * @see org.springframework.batch.core.listener.StepListenerSupport#beforeStep(org.springframework.batch.core.StepExecution) + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.listener.StepListenerSupport#beforeStep + * (org.springframework.batch.core.StepExecution) */ @Override public void beforeStep(StepExecution stepExecution) { @@ -528,20 +608,44 @@ public class MulticasterBatchListenerTests { super.beforeStep(stepExecution); } - /* (non-Javadoc) - * @see org.springframework.batch.core.listener.StepListenerSupport#beforeWrite(java.lang.Object) + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.listener.StepListenerSupport#afterWrite + * (java.util.List) */ @Override - public void beforeWrite(Object item) { + public void afterWrite(List items) { count++; if (error) { throw new RuntimeException("listener error"); } - super.beforeWrite(item); + super.afterWrite(items); } - /* (non-Javadoc) - * @see org.springframework.batch.core.listener.StepListenerSupport#onErrorInStep(org.springframework.batch.core.StepExecution, java.lang.Throwable) + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.listener.StepListenerSupport#beforeWrite + * (java.util.List) + */ + @Override + public void beforeWrite(List items) { + count++; + if (error) { + throw new RuntimeException("listener error"); + } + super.beforeWrite(items); + } + + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.listener.StepListenerSupport#onErrorInStep + * (org.springframework.batch.core.StepExecution, java.lang.Throwable) */ @Override public ExitStatus onErrorInStep(StepExecution stepExecution, Throwable e) { @@ -552,18 +656,22 @@ public class MulticasterBatchListenerTests { return super.onErrorInStep(stepExecution, e); } - /* (non-Javadoc) - * @see org.springframework.batch.core.listener.StepListenerSupport#onWriteError(java.lang.Exception, java.lang.Object) + /* + * (non-Javadoc) + * + * @see + * org.springframework.batch.core.listener.StepListenerSupport#onWriteError + * (java.lang.Exception, java.util.List) */ @Override - public void onWriteError(Exception ex, Object item) { + public void onWriteError(Exception exception, List items) { count++; if (error) { throw new RuntimeException("listener error"); } - super.onWriteError(ex, item); + super.onWriteError(exception, items); } + } - } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/listener/OrderedCompositeTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/listener/OrderedCompositeTests.java index eb8cdbb4e..bcdda71fb 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/listener/OrderedCompositeTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/listener/OrderedCompositeTests.java @@ -15,6 +15,7 @@ */ package org.springframework.batch.core.listener; +import java.util.Arrays; import java.util.Iterator; import org.springframework.core.Ordered; @@ -23,27 +24,31 @@ import junit.framework.TestCase; /** * @author Dave Syer - * + * */ public class OrderedCompositeTests extends TestCase { - - private OrderedComposite list = new OrderedComposite(); + + private OrderedComposite list = new OrderedComposite(); /** - * Test method for {@link org.springframework.batch.core.listener.OrderedComposite#setItems(java.lang.Object[])}. + * Test method for + * {@link org.springframework.batch.core.listener.OrderedComposite#setItems(java.util.List)} + * . */ public void testSetItems() { - list.setItems(new String[] {"1", "2"}); + list.setItems(Arrays.asList(new Object[] { "1", "2" })); Iterator iterator = list.iterator(); assertEquals("1", iterator.next()); assertEquals("2", iterator.next()); } /** - * Test method for {@link org.springframework.batch.core.listener.OrderedComposite#add(java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.OrderedComposite#add(java.lang.Object)} + * . */ public void testAdd() { - list.setItems(new String[] {"1"}); + list.setItems(Arrays.asList((Object) "1")); list.add("3"); Iterator iterator = list.iterator(); assertEquals("1", iterator.next()); @@ -51,10 +56,12 @@ public class OrderedCompositeTests extends TestCase { } /** - * Test method for {@link org.springframework.batch.core.listener.OrderedComposite#add(java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.OrderedComposite#add(java.lang.Object)} + * . */ public void testAddOrdered() { - list.setItems(new String[] {"1"}); + list.setItems(Arrays.asList((Object) "1")); list.add(new Ordered() { public int getOrder() { return 0; @@ -66,10 +73,12 @@ public class OrderedCompositeTests extends TestCase { } /** - * Test method for {@link org.springframework.batch.core.listener.OrderedComposite#add(java.lang.Object)}. + * Test method for + * {@link org.springframework.batch.core.listener.OrderedComposite#add(java.lang.Object)} + * . */ public void testAddMultipleOrdered() { - list.setItems(new String[] {"1"}); + list.setItems(Arrays.asList((Object) "1")); list.add(new Ordered() { public int getOrder() { return 1; diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java index 87b216802..4fc572c34 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleStepFactoryBeanTests.java @@ -134,12 +134,14 @@ public class SimpleStepFactoryBeanTests { throw new RuntimeException("Error!"); } }); - factory.setListeners(new StepListener[] { new ItemListenerSupport() { + factory.setListeners(new StepListener[] { new ItemListenerSupport() { + @Override public void onReadError(Exception ex) { listened.add(ex); } - public void onWriteError(Exception ex, Object item) { + @Override + public void onWriteError(Exception ex, List item) { listened.add(ex); } } });