Project

General

Profile

1
package eu.dnetlib.msro.workflows.nodes;
2

    
3
import java.util.concurrent.ExecutorService;
4
import java.util.concurrent.Executors;
5

    
6
import eu.dnetlib.msro.workflows.procs.Env;
7
import eu.dnetlib.msro.workflows.procs.Token;
8
import org.apache.commons.logging.Log;
9
import org.apache.commons.logging.LogFactory;
10

    
11
public abstract class AsyncJobNode extends ProcessNode {
12

    
13
	/**
14
	 * logger.
15
	 */
16
	private static final Log log = LogFactory.getLog(AsyncJobNode.class);
17

    
18
	private final ExecutorService executor = Executors.newCachedThreadPool();
19

    
20
	@Override
21
	public final void execute(final Token token) {
22

    
23
		log.info("executing async node");
24

    
25
		executor.execute(new Runnable() {
26

    
27
			@Override
28
			public void run() {
29
				try {
30
					log.debug("START NODE: " + getBeanName());
31
					beforeStart(token);
32
					String arc = execute(token.getEnv());
33
					beforeCompleted(token);
34
					log.debug("END NODE (SUCCESS): " + getBeanName());
35

    
36
					token.setNextArc(arc);
37

    
38
					token.release();
39
				} catch (Throwable e) {
40
					log.error("got exception while executing workflow node", e);
41
					log.debug("END NODE (FAILED): " + getBeanName());
42
					beforeFailed(token);
43
					token.releaseAsFailed(e);
44
				}
45
			}
46
		});
47
	}
48

    
49
	abstract protected String execute(final Env env) throws Exception;
50

    
51
	protected void beforeStart(final Token token) {
52
	}
53

    
54
	protected void beforeCompleted(final Token token) {
55
	}
56

    
57
	protected void beforeFailed(final Token token) {
58
	}
59
}
(1-1/9)