1 package org
.argeo
.slc
.execution
;
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
;
12 public class Executor
implements ApplicationListener
, ApplicationContextAware
{
13 private final static Log log
= LogFactory
.getLog(Executor
.class);
15 private ApplicationContext applicationContext
;
17 public void onApplicationEvent(ApplicationEvent event
) {
18 if (event
instanceof NewExecutionEvent
) {
19 SlcExecution slcExecution
= ((NewExecutionEvent
) event
)
21 ExecutionContext executionContext
= new ExecutionContext();
22 ExecutionThread thread
= new ExecutionThread(executionContext
,
29 public void setApplicationContext(ApplicationContext applicationContext
)
30 throws BeansException
{
31 this.applicationContext
= applicationContext
;
34 private class ExecutionThread
extends Thread
{
35 private final SlcExecution slcExecution
;
36 private final ExecutionContext executionContext
;
38 public ExecutionThread(ExecutionContext executionContext
,
39 SlcExecution slcExecution
) {
40 super("SLC Execution #" + executionContext
.getUuid());
41 this.slcExecution
= slcExecution
;
42 this.executionContext
= executionContext
;
46 // Initialize from SlcExecution
47 ExecutionContext
.registerExecutionContext(executionContext
);
48 ExecutionContext
.getVariables()
49 .putAll(slcExecution
.getAttributes());
52 log
.info("Start execution #"
53 + ExecutionContext
.getExecutionUuid());
54 String executionBean
= slcExecution
.getAttributes().get(
56 ExecutionFlow main
= (ExecutionFlow
) applicationContext
57 .getBean(executionBean
);
59 } catch (Exception e
) {
60 log
.error("Execution " + executionContext
.getUuid()
63 applicationContext
.publishEvent(new ExecutionFinishedEvent(
64 this, executionContext
));