1 package org
.argeo
.slc
.core
.execution
;
3 import org
.apache
.commons
.logging
.Log
;
4 import org
.apache
.commons
.logging
.LogFactory
;
5 import org
.argeo
.slc
.execution
.ExecutionFlow
;
6 import org
.argeo
.slc
.process
.SlcExecution
;
7 import org
.springframework
.beans
.BeansException
;
8 import org
.springframework
.context
.ApplicationContext
;
9 import org
.springframework
.context
.ApplicationContextAware
;
10 import org
.springframework
.context
.ApplicationEvent
;
11 import org
.springframework
.context
.ApplicationListener
;
13 public class Executor
implements ApplicationListener
, ApplicationContextAware
{
14 private final static Log log
= LogFactory
.getLog(Executor
.class);
16 private ApplicationContext applicationContext
;
18 public void onApplicationEvent(ApplicationEvent event
) {
19 if (event
instanceof NewExecutionEvent
) {
20 SlcExecution slcExecution
= ((NewExecutionEvent
) event
)
22 ExecutionContext executionContext
= new ExecutionContext();
23 ExecutionThread thread
= new ExecutionThread(executionContext
,
30 public void setApplicationContext(ApplicationContext applicationContext
)
31 throws BeansException
{
32 this.applicationContext
= applicationContext
;
35 private class ExecutionThread
extends Thread
{
36 private final SlcExecution slcExecution
;
37 private final ExecutionContext executionContext
;
39 public ExecutionThread(ExecutionContext executionContext
,
40 SlcExecution slcExecution
) {
41 super("SLC Execution #" + executionContext
.getUuid());
42 this.slcExecution
= slcExecution
;
43 this.executionContext
= executionContext
;
47 // Initialize from SlcExecution
48 ExecutionContext
.registerExecutionContext(executionContext
);
49 ExecutionContext
.getVariables()
50 .putAll(slcExecution
.getAttributes());
53 log
.info("Start execution #"
54 + ExecutionContext
.getExecutionUuid());
55 String executionBean
= slcExecution
.getAttributes().get(
57 ExecutionFlow main
= (ExecutionFlow
) applicationContext
58 .getBean(executionBean
);
60 } catch (Exception e
) {
61 log
.error("Execution " + executionContext
.getUuid()
64 applicationContext
.publishEvent(new ExecutionFinishedEvent(
65 this, executionContext
));