OPEN - issue BATCH-771: Refactor Listeners for chunk changes
Make ItemWriteListener match ItemWriter (generic list as argument).
This commit is contained in:
@@ -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<S> 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<? extends S> 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<? extends S> 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<? extends S> items);
|
||||
}
|
||||
|
||||
@@ -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<ChunkListener> listeners = new OrderedComposite<ChunkListener>();
|
||||
|
||||
/**
|
||||
* 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<Object> iterator = listeners.iterator(); iterator.hasNext();) {
|
||||
for (Iterator<ChunkListener> 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<Object> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
for (Iterator<ChunkListener> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
ChunkListener listener = (ChunkListener) iterator.next();
|
||||
listener.beforeChunk();
|
||||
}
|
||||
|
||||
@@ -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<JobExecutionListener> listeners = new OrderedComposite<JobExecutionListener>();
|
||||
|
||||
/**
|
||||
* 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<Object> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
for (Iterator<JobExecutionListener> 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<Object> iterator = listeners.iterator(); iterator.hasNext();) {
|
||||
for (Iterator<JobExecutionListener> 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<Object> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
for (Iterator<JobExecutionListener> 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<Object> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
for (Iterator<JobExecutionListener> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
JobExecutionListener listener = (JobExecutionListener) iterator.next();
|
||||
listener.onInterrupt(jobExecution);
|
||||
}
|
||||
|
||||
@@ -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<ItemReadListener> listeners = new OrderedComposite<ItemReadListener>();
|
||||
|
||||
/**
|
||||
* 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<Object> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
for (Iterator<ItemReadListener> 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<Object> iterator = listeners.iterator(); iterator.hasNext();) {
|
||||
for (Iterator<ItemReadListener> 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<Object> iterator = listeners.iterator(); iterator.hasNext();) {
|
||||
for (Iterator<ItemReadListener> iterator = listeners.iterator(); iterator.hasNext();) {
|
||||
ItemReadListener listener = (ItemReadListener) iterator.next();
|
||||
listener.onReadError(ex);
|
||||
}
|
||||
|
||||
@@ -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<S> implements ItemWriteListener<S> {
|
||||
|
||||
private OrderedComposite listeners = new OrderedComposite();
|
||||
private OrderedComposite<ItemWriteListener<S>> listeners = new OrderedComposite<ItemWriteListener<S>>();
|
||||
|
||||
/**
|
||||
* Public setter for the listeners.
|
||||
*
|
||||
* @param itemWriteListeners
|
||||
*/
|
||||
public void setListeners(ItemWriteListener[] itemWriteListeners) {
|
||||
public void setListeners(List<ItemWriteListener<S>> itemWriteListeners) {
|
||||
this.listeners.setItems(itemWriteListeners);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register additional listener.
|
||||
*
|
||||
* @param itemReaderListener
|
||||
* @param itemWriteListener
|
||||
*/
|
||||
public void register(ItemWriteListener itemReaderListener) {
|
||||
listeners.add(itemReaderListener);
|
||||
public void register(ItemWriteListener<S> 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<Object> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
ItemWriteListener listener = (ItemWriteListener) iterator.next();
|
||||
listener.afterWrite(item);
|
||||
public void afterWrite(List<? extends S> items) {
|
||||
for (Iterator<ItemWriteListener<S>> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
ItemWriteListener<S> 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<Object> iterator = listeners.iterator(); iterator.hasNext();) {
|
||||
ItemWriteListener listener = (ItemWriteListener) iterator.next();
|
||||
listener.beforeWrite(item);
|
||||
public void beforeWrite(List<? extends S> items) {
|
||||
for (Iterator<ItemWriteListener<S>> iterator = listeners.iterator(); iterator.hasNext();) {
|
||||
ItemWriteListener<S> 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<Object> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
ItemWriteListener listener = (ItemWriteListener) iterator.next();
|
||||
listener.onWriteError(ex, item);
|
||||
public void onWriteError(Exception ex, List<? extends S> items) {
|
||||
for (Iterator<ItemWriteListener<S>> iterator = listeners.reverse(); iterator.hasNext();) {
|
||||
ItemWriteListener<S> listener = iterator.next();
|
||||
listener.onWriteError(ex, items);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<SkipListener> listeners = new OrderedComposite<SkipListener>();
|
||||
|
||||
/**
|
||||
* 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<Object> iterator = listeners.iterator(); iterator.hasNext();) {
|
||||
for (Iterator<SkipListener> 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<Object> iterator = listeners.iterator(); iterator.hasNext();) {
|
||||
for (Iterator<SkipListener> iterator = listeners.iterator(); iterator.hasNext();) {
|
||||
SkipListener listener = (SkipListener) iterator.next();
|
||||
listener.onSkipInWrite(item, t);
|
||||
}
|
||||
|
||||
@@ -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<StepExecutionListener> list = new OrderedComposite<StepExecutionListener>();
|
||||
|
||||
/**
|
||||
* 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<Object> iterator = list.reverse(); iterator.hasNext();) {
|
||||
for (Iterator<StepExecutionListener> 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<Object> iterator = list.iterator(); iterator.hasNext();) {
|
||||
for (Iterator<StepExecutionListener> 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<Object> iterator = list.reverse(); iterator.hasNext();) {
|
||||
for (Iterator<StepExecutionListener> iterator = list.reverse(); iterator.hasNext();) {
|
||||
StepExecutionListener listener = (StepExecutionListener) iterator.next();
|
||||
ExitStatus close = listener.onErrorInStep(stepExecution, e);
|
||||
status = status != null ? status.and(close) : close;
|
||||
|
||||
@@ -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<S> implements ItemWriteListener<S>, ItemReadListener {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.core.domain.ItemWriteListener#afterWrite()
|
||||
*/
|
||||
public void afterWrite(Object item) {
|
||||
public void afterWrite(List<? extends S> item) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.batch.core.domain.ItemWriteListener#beforeWrite(java.lang.Object)
|
||||
*/
|
||||
public void beforeWrite(Object item) {
|
||||
public void beforeWrite(List<? extends S> 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<? extends S> item) {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -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<S> implements StepExecutionListener, ChunkListener, ItemReadListener,
|
||||
ItemWriteListener<S>, 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<S> itemWriteListener = new CompositeItemWriteListener<S>();
|
||||
|
||||
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<? extends S> 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<? extends S> 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<? extends S> items) {
|
||||
try {
|
||||
itemWriteListener.onWriteError(ex, item);
|
||||
itemWriteListener.onWriteError(ex, items);
|
||||
}
|
||||
catch (RuntimeException e) {
|
||||
throw new StepListenerFailedException("Error in onWriteError.", ex, e);
|
||||
|
||||
@@ -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<S> {
|
||||
|
||||
private List<Object> unordered = new ArrayList<Object>();
|
||||
private List<S> unordered = new ArrayList<S>();
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private Collection<Object> ordered = new TreeSet<Object>(new OrderComparator());
|
||||
private Collection<S> ordered = new TreeSet<S>(new AnnotationAwareOrderComparator());
|
||||
|
||||
private List<Object> list = new ArrayList<Object>();
|
||||
private List<S> list = new ArrayList<S>();
|
||||
|
||||
/**
|
||||
* Public setter for the listeners.
|
||||
*
|
||||
* @param items
|
||||
*/
|
||||
public void setItems(Object[] items) {
|
||||
public void setItems(List<S> 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<Object> iterator() {
|
||||
return new ArrayList<Object>(list).iterator();
|
||||
public Iterator<S> iterator() {
|
||||
return new ArrayList<S>(list).iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -86,8 +86,8 @@ class OrderedComposite {
|
||||
* last, after any unordered ones.
|
||||
* @return an iterator over the list of items
|
||||
*/
|
||||
public Iterator<Object> reverse() {
|
||||
ArrayList<Object> result = new ArrayList<Object>(list);
|
||||
public Iterator<S> reverse() {
|
||||
ArrayList<S> result = new ArrayList<S>(list);
|
||||
Collections.reverse(result);
|
||||
return result.iterator();
|
||||
}
|
||||
|
||||
@@ -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<S> implements StepExecutionListener, ChunkListener,
|
||||
ItemReadListener, ItemWriteListener<S> {
|
||||
|
||||
/* (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<? extends S> 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<? extends S> 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<? extends S> items) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<Object> {
|
||||
|
||||
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<? extends Object> item) {
|
||||
try {
|
||||
logger.error("Error encountered while writing item: [ " + item + "]", ex);
|
||||
} catch (Exception exception) {
|
||||
|
||||
@@ -60,7 +60,7 @@ public class ItemOrientedStepHandler<T, S> implements StepHandler {
|
||||
|
||||
private final RepeatOperations repeatOperations;
|
||||
|
||||
final private MulticasterBatchListener listener = new MulticasterBatchListener();
|
||||
final private MulticasterBatchListener<S> listener = new MulticasterBatchListener<S>();
|
||||
|
||||
/**
|
||||
* @param itemReader
|
||||
@@ -291,7 +291,7 @@ public class ItemOrientedStepHandler<T, S> implements StepHandler {
|
||||
* Public getter for the listener.
|
||||
* @return the listener
|
||||
*/
|
||||
protected MulticasterBatchListener getListener() {
|
||||
protected MulticasterBatchListener<S> getListener() {
|
||||
return listener;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Object> listener;
|
||||
|
||||
CompositeItemWriteListener<Object> compositeListener;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
|
||||
listener = createMock(ItemWriteListener.class);
|
||||
compositeListener = new CompositeItemWriteListener();
|
||||
compositeListener = new CompositeItemWriteListener<Object>();
|
||||
compositeListener.register(listener);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testBeforeWrite(){
|
||||
Object item = new Object();
|
||||
public void testBeforeWrite() {
|
||||
List<Object> 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<Object> 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<Object> 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<ItemWriteListener<Object>>() {
|
||||
{
|
||||
add(listener);
|
||||
}
|
||||
});
|
||||
List<Object> item = Collections.singletonList(new Object());
|
||||
listener.beforeWrite(item);
|
||||
replay(listener);
|
||||
compositeListener.beforeWrite(item);
|
||||
|
||||
@@ -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<String> multicast = new MulticasterBatchListener<String>();
|
||||
|
||||
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<String>() {
|
||||
@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<String>() {
|
||||
@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<String> {
|
||||
@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<? extends String> 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<? extends String> 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<? extends String> items) {
|
||||
count++;
|
||||
if (error) {
|
||||
throw new RuntimeException("listener error");
|
||||
}
|
||||
super.onWriteError(ex, item);
|
||||
super.onWriteError(exception, items);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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<Object> list = new OrderedComposite<Object>();
|
||||
|
||||
/**
|
||||
* 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<Object> 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<Object> 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;
|
||||
|
||||
@@ -134,12 +134,14 @@ public class SimpleStepFactoryBeanTests {
|
||||
throw new RuntimeException("Error!");
|
||||
}
|
||||
});
|
||||
factory.setListeners(new StepListener[] { new ItemListenerSupport() {
|
||||
factory.setListeners(new StepListener[] { new ItemListenerSupport<String>() {
|
||||
@Override
|
||||
public void onReadError(Exception ex) {
|
||||
listened.add(ex);
|
||||
}
|
||||
|
||||
public void onWriteError(Exception ex, Object item) {
|
||||
@Override
|
||||
public void onWriteError(Exception ex, List<? extends String> item) {
|
||||
listened.add(ex);
|
||||
}
|
||||
} });
|
||||
|
||||
Reference in New Issue
Block a user