Project

General

Profile

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

    
3
import javax.annotation.Resource;
4

    
5
import org.apache.commons.lang3.StringUtils;
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8

    
9
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
10
import eu.dnetlib.enabling.tools.blackboard.BlackboardClientHandler;
11
import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
12
import eu.dnetlib.enabling.tools.blackboard.BlackboardJobImpl;
13
import eu.dnetlib.enabling.tools.blackboard.BlackboardJobRegistry;
14
import eu.dnetlib.msro.workflows.nodes.blackboard.BlackboardWorkflowJobListener;
15
import eu.dnetlib.msro.workflows.procs.Env;
16
import eu.dnetlib.msro.workflows.procs.Token;
17
import eu.dnetlib.msro.workflows.util.WorkflowsConstants;
18

    
19
public abstract class BlackboardJobNode extends ProcessNode {
20

    
21
	/**
22
	 * logger.
23
	 */
24
	private static final Log log = LogFactory.getLog(BlackboardJobNode.class); // NOPMD by marko on 11/24/08 5:02 PM
25
	@Resource
26
	private UniqueServiceLocator serviceLocator;
27
	/**
28
	 * blackboard handler.
29
	 */
30
	@Resource
31
	private BlackboardClientHandler blackboardClientHandler;
32

    
33
	/**
34
	 * blackboard job registry.
35
	 */
36
	@Resource
37
	private BlackboardJobRegistry jobRegistry;
38

    
39
	@Override
40
	public final void execute(final Token token) {
41
		log.info("executing blackboard node");
42

    
43
		try {
44
			token.getEnv().setAttribute(WorkflowsConstants.BLACKBOARD_IS_BLACKBOARD, true);
45

    
46
			final String serviceId = obtainServiceId(token.getEnv());
47
			if (StringUtils.isBlank(serviceId)) {
48
				final String msg = "cannot locate target service profile: " + serviceId;
49
				log.error(msg);
50
				token.releaseAsFailed(msg);
51
				token.release();
52
				return;
53
			}
54

    
55
			final BlackboardJob job = this.blackboardClientHandler.newJob(serviceId);
56

    
57
			token.getEnv().setAttribute(WorkflowsConstants.BLACKBOARD_JOB, job);
58
			token.getEnv().setAttribute(WorkflowsConstants.BLACKBOARD_SERVICE_ID, ((BlackboardJobImpl) job).getServiceId());
59
			prepareJob(job, token.getEnv());
60

    
61
			this.jobRegistry.registerJobListener(job, generateBlackboardListener(token));
62

    
63
			this.blackboardClientHandler.assign(job);
64

    
65
		} catch (final Throwable e) {
66
			log.error("cannot prepare blackboard job", e);
67
			token.releaseAsFailed(e);
68
			token.release();
69
		}
70
	}
71

    
72
	abstract protected String obtainServiceId(final Env env);
73

    
74
	abstract protected void prepareJob(final BlackboardJob job, final Env env) throws Exception;
75

    
76
	protected BlackboardWorkflowJobListener generateBlackboardListener(final Token token) {
77
		return new BlackboardWorkflowJobListener(token);
78
	}
79

    
80
	public UniqueServiceLocator getServiceLocator() {
81
		return this.serviceLocator;
82
	}
83

    
84
}
(2-2/10)