BAEL-2168 Java EE 7 Batch Processing (#5645)
* jberet batch * Batch Understanding * partition * exception * some more changes
This commit is contained in:
committed by
Grzegorz Piwowarek
parent
2f9fee0391
commit
f784c3bb79
+11
@@ -0,0 +1,11 @@
|
||||
package com.baeldung.batch.understanding;
|
||||
|
||||
import javax.batch.api.chunk.listener.SkipReadListener;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class ChunkExceptionSkipReadListener implements SkipReadListener {
|
||||
@Override
|
||||
public void onSkipReadItem(Exception e) throws Exception {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.baeldung.batch.understanding;
|
||||
|
||||
import javax.batch.api.chunk.AbstractCheckpointAlgorithm;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class CustomCheckPoint extends AbstractCheckpointAlgorithm {
|
||||
@Override
|
||||
public boolean isReadyToCheckpoint() throws Exception {
|
||||
return SimpleChunkItemReader.COUNT % 5 == 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.baeldung.batch.understanding;
|
||||
|
||||
import javax.batch.api.Decider;
|
||||
import javax.batch.runtime.StepExecution;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class DeciderJobSequence implements Decider {
|
||||
@Override
|
||||
public String decide(StepExecution[] ses) throws Exception {
|
||||
return "nothing";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.baeldung.batch.understanding;
|
||||
|
||||
import javax.batch.api.AbstractBatchlet;
|
||||
import javax.batch.api.BatchProperty;
|
||||
import javax.batch.runtime.BatchStatus;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class InjectSimpleBatchLet extends AbstractBatchlet {
|
||||
@Inject
|
||||
@BatchProperty(name = "name")
|
||||
private String nameString;
|
||||
|
||||
@Override
|
||||
public String process() throws Exception {
|
||||
System.out.println("Value passed in = " + nameString);
|
||||
return BatchStatus.COMPLETED.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.baeldung.batch.understanding;
|
||||
|
||||
import javax.batch.api.AbstractBatchlet;
|
||||
import javax.batch.runtime.BatchStatus;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class SimpleBatchLet extends AbstractBatchlet {
|
||||
@Override
|
||||
public String process() throws Exception {
|
||||
return BatchStatus.FAILED.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.baeldung.batch.understanding;
|
||||
|
||||
import javax.batch.api.chunk.ItemProcessor;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class SimpleChunkItemProcessor implements ItemProcessor {
|
||||
@Override
|
||||
public Integer processItem(Object t) {
|
||||
return ((Integer) t).intValue() % 2 == 0 ? null : ((Integer) t).intValue();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.baeldung.batch.understanding;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.StringTokenizer;
|
||||
import javax.batch.api.chunk.AbstractItemReader;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class SimpleChunkItemReader extends AbstractItemReader {
|
||||
private StringTokenizer tokens;
|
||||
public static int COUNT = 0;
|
||||
|
||||
@Override
|
||||
public Integer readItem() throws Exception {
|
||||
if (tokens.hasMoreTokens()) {
|
||||
COUNT++;
|
||||
String tempTokenize = tokens.nextToken();
|
||||
return Integer.valueOf(tempTokenize);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(Serializable checkpoint) throws Exception {
|
||||
tokens = new StringTokenizer("1,2,3,4,5,6,7,8,9,10", ",");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.baeldung.batch.understanding;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import javax.batch.api.chunk.AbstractItemReader;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class SimpleChunkItemReaderError extends AbstractItemReader {
|
||||
private StringTokenizer tokens;
|
||||
public static int COUNT = 0;
|
||||
|
||||
@Override
|
||||
public Integer readItem() throws Exception {
|
||||
if (tokens.hasMoreTokens()) {
|
||||
COUNT++;
|
||||
int token = Integer.valueOf(tokens.nextToken());
|
||||
if (token == 3) {
|
||||
throw new RuntimeException("Something happened");
|
||||
}
|
||||
return Integer.valueOf(token);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(Serializable checkpoint) throws Exception {
|
||||
tokens = new StringTokenizer("1,2,3,4,5,6,7,8,9,10", ",");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.baeldung.batch.understanding;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.batch.api.chunk.AbstractItemWriter;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class SimpleChunkWriter extends AbstractItemWriter {
|
||||
@Override
|
||||
public void writeItems(List<Object> items) throws Exception {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class MyInputRecord implements Serializable {
|
||||
private int id;
|
||||
|
||||
public MyInputRecord(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o)
|
||||
return true;
|
||||
if (o == null || getClass() != o.getClass())
|
||||
return false;
|
||||
|
||||
MyInputRecord that = (MyInputRecord) o;
|
||||
|
||||
return id == that.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MyInputRecord: " + id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import javax.batch.api.chunk.ItemProcessor;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class MyItemProcessor implements ItemProcessor {
|
||||
@Override
|
||||
public Object processItem(Object t) {
|
||||
if (((MyInputRecord) t).getId() == 6) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
return new MyOutputRecord(((MyInputRecord) t).getId());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import javax.batch.api.chunk.AbstractItemReader;
|
||||
import javax.inject.Named;
|
||||
import java.io.Serializable;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
@Named
|
||||
public class MyItemReader extends AbstractItemReader {
|
||||
private StringTokenizer tokens;
|
||||
private MyInputRecord lastElement;
|
||||
private boolean alreadyFailed;
|
||||
|
||||
@Override
|
||||
public void open(Serializable checkpoint) {
|
||||
tokens = new StringTokenizer("1,2,3,4,5,6,7,8,9,10", ",");
|
||||
if (checkpoint != null) {
|
||||
while (!Integer.valueOf(tokens.nextToken())
|
||||
.equals(((MyInputRecord) checkpoint).getId())) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object readItem() {
|
||||
if (tokens.hasMoreTokens()) {
|
||||
int token = Integer.valueOf(tokens.nextToken());
|
||||
if (token == 5 && !alreadyFailed) {
|
||||
alreadyFailed = true;
|
||||
throw new IllegalArgumentException("Could not read record");
|
||||
}
|
||||
lastElement = new MyInputRecord(token);
|
||||
return lastElement;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Serializable checkpointInfo() throws Exception {
|
||||
return lastElement;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import javax.batch.api.chunk.AbstractItemWriter;
|
||||
import javax.inject.Named;
|
||||
import java.util.List;
|
||||
|
||||
@Named
|
||||
public class MyItemWriter extends AbstractItemWriter {
|
||||
private static int retries = 0;
|
||||
|
||||
@Override
|
||||
public void writeItems(List list) {
|
||||
if (retries <= 3 && list.contains(new MyOutputRecord(8))) {
|
||||
retries++;
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class MyOutputRecord implements Serializable {
|
||||
private int id;
|
||||
|
||||
public MyOutputRecord(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
MyOutputRecord that = (MyOutputRecord) o;
|
||||
|
||||
return id == that.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MyOutputRecord: " + id;
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import javax.batch.api.chunk.listener.RetryProcessListener;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class MyRetryProcessorListener implements RetryProcessListener {
|
||||
@Override
|
||||
public void onRetryProcessException(Object item, Exception ex) throws Exception {
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import javax.batch.api.chunk.listener.RetryReadListener;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class MyRetryReadListener implements RetryReadListener {
|
||||
@Override
|
||||
public void onRetryReadException(Exception ex) throws Exception {
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import javax.batch.api.chunk.listener.RetryWriteListener;
|
||||
import javax.inject.Named;
|
||||
import java.util.List;
|
||||
|
||||
@Named
|
||||
public class MyRetryWriteListener implements RetryWriteListener {
|
||||
@Override
|
||||
public void onRetryWriteException(List<Object> items, Exception ex) throws Exception {
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import javax.batch.api.chunk.listener.SkipProcessListener;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class MySkipProcessorListener implements SkipProcessListener {
|
||||
@Override
|
||||
public void onSkipProcessItem(Object t, Exception e) throws Exception {
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import javax.batch.api.chunk.listener.SkipReadListener;
|
||||
import javax.inject.Named;
|
||||
|
||||
@Named
|
||||
public class MySkipReadListener implements SkipReadListener {
|
||||
@Override
|
||||
public void onSkipReadItem(Exception e) throws Exception {
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package com.baeldung.batch.understanding.exception;
|
||||
|
||||
import javax.batch.api.chunk.listener.SkipWriteListener;
|
||||
import javax.inject.Named;
|
||||
import java.util.List;
|
||||
|
||||
@Named
|
||||
public class MySkipWriteListener implements SkipWriteListener {
|
||||
@Override
|
||||
public void onSkipWriteItem(List list, Exception e) throws Exception {
|
||||
list.remove(new MyOutputRecord(2));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user