1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.github.dexecutor.core;
18
19 import java.io.Serializable;
20 import java.util.concurrent.Callable;
21
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 import com.github.dexecutor.core.TaskProvider;
26 import com.github.dexecutor.core.TaskProvider.Task;
27 import com.github.dexecutor.core.graph.Node;
28
29
30
31
32
33
34
35
36
37 class RetryOnceAndTerminateTask<T extends Comparable<T>, R> implements Callable<Node<T, R>>, Serializable {
38 private static final long serialVersionUID = 1L;
39 private static final Logger logger = LoggerFactory.getLogger(RetryOnceAndTerminateTask.class);
40 private Node<T, R> node;
41 private TaskProvider<T, R> taskProvider;
42
43 public RetryOnceAndTerminateTask(final TaskProvider<T, R> taskProvider, final Node<T, R> graphNode) {
44 this.taskProvider = taskProvider;
45 this.node = graphNode;
46 }
47
48 public Node<T, R> call() throws Exception {
49 Task<T, R> task = new ExecutorTask<T, R>(node, this.taskProvider.provid(node.getValue()));
50 task.setConsiderExecutionError(false);
51 try {
52 task.execute();
53 } catch(Exception ex) {
54 logger.error("Exception caught, executing node # " + this.node.getValue() + " Retry would happen", ex);
55 task.setConsiderExecutionError(true);
56 task.execute();
57 }
58 return this.node;
59 }
60 }