package org.javaee7.jms.batch;
import javax.batch.api.chunk.AbstractItemWriter;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.Serializable;
import java.util.List;
/**
* @author Patrik Dudits
*/
@Named
public class SummingItemWriter extends AbstractItemWriter {
@Inject
ResultCollector collector;
private int numItems;
private int sum;
@Override
public void open(Serializable checkpoint) throws Exception {
numItems = 0; // <1> Reset the computation
sum = 0;
}
@Override
public void writeItems(List<Object> objects) throws Exception {
numItems += objects.size(); // <2> Perform the computation. Note that this may be called multiple times within single job run
sum += computeSum(objects);
}
@Override
public void close() throws Exception {
collector.postResult(sum, numItems); // <3> Post results
}
private int computeSum(List<Object> objects) {
int subTotal = 0;
for (Object o : objects) {
subTotal += (Integer)o;
}
return subTotal;
}
}