]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.execution/src/main/java/org/argeo/slc/execution/Executor.java
ActiveMQ and Castor integration
[gpl/argeo-slc.git] / runtime / org.argeo.slc.execution / src / main / java / org / argeo / slc / execution / Executor.java
1 package org.argeo.slc.execution;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5 import org.argeo.slc.process.SlcExecution;
6 import org.springframework.beans.BeansException;
7 import org.springframework.context.ApplicationContext;
8 import org.springframework.context.ApplicationContextAware;
9 import org.springframework.context.ApplicationEvent;
10 import org.springframework.context.ApplicationListener;
11
12 public class Executor implements ApplicationListener, ApplicationContextAware {
13 private final static Log log = LogFactory.getLog(Executor.class);
14
15 private ApplicationContext applicationContext;
16
17 public void onApplicationEvent(ApplicationEvent event) {
18 if (event instanceof NewExecutionEvent) {
19 SlcExecution slcExecution = ((NewExecutionEvent) event)
20 .getSlcExecution();
21 ExecutionContext executionContext = new ExecutionContext();
22 ExecutionThread thread = new ExecutionThread(executionContext,
23 slcExecution);
24 thread.start();
25 }
26
27 }
28
29 public void setApplicationContext(ApplicationContext applicationContext)
30 throws BeansException {
31 this.applicationContext = applicationContext;
32 }
33
34 private class ExecutionThread extends Thread {
35 private final SlcExecution slcExecution;
36 private final ExecutionContext executionContext;
37
38 public ExecutionThread(ExecutionContext executionContext,
39 SlcExecution slcExecution) {
40 super("SLC Execution #" + executionContext.getUuid());
41 this.slcExecution = slcExecution;
42 this.executionContext = executionContext;
43 }
44
45 public void run() {
46 // Initialize from SlcExecution
47 ExecutionContext.registerExecutionContext(executionContext);
48 ExecutionContext.getVariables()
49 .putAll(slcExecution.getAttributes());
50
51 try {
52 log.info("Start execution #"
53 + ExecutionContext.getExecutionUuid());
54 String executionBean = slcExecution.getAttributes().get(
55 "slc.flows");
56 ExecutionFlow main = (ExecutionFlow) applicationContext
57 .getBean(executionBean);
58 main.execute();
59 } catch (Exception e) {
60 log.error("Execution " + executionContext.getUuid()
61 + " failed.", e);
62 } finally {
63 applicationContext.publishEvent(new ExecutionFinishedEvent(
64 this, executionContext));
65 }
66
67 }
68 }
69
70 }