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
.ExecutionContext
;
6 import org
.argeo
.slc
.execution
.ExecutionFlow
;
7 import org
.argeo
.slc
.process
.SlcExecution
;
8 import org
.springframework
.beans
.BeansException
;
9 import org
.springframework
.context
.ApplicationContext
;
10 import org
.springframework
.context
.ApplicationContextAware
;
11 import org
.springframework
.context
.ApplicationEvent
;
12 import org
.springframework
.context
.ApplicationListener
;
14 public class Executor
implements ApplicationListener
, ApplicationContextAware
{
15 private final static Log log
= LogFactory
.getLog(Executor
.class);
17 private ApplicationContext applicationContext
;
19 public void onApplicationEvent(ApplicationEvent event
) {
20 if (event
instanceof NewExecutionEvent
) {
21 SlcExecution slcExecution
= ((NewExecutionEvent
) event
)
23 MapExecutionContext executionContext
= new MapExecutionContext();
24 ExecutionThread thread
= new ExecutionThread(executionContext
,
31 public void setApplicationContext(ApplicationContext applicationContext
)
32 throws BeansException
{
33 this.applicationContext
= applicationContext
;
36 private class ExecutionThread
extends Thread
{
37 private final SlcExecution slcExecution
;
38 private final ExecutionContext executionContext
;
40 public ExecutionThread(MapExecutionContext executionContext
,
41 SlcExecution slcExecution
) {
42 super("SLC Execution #" + executionContext
.getUuid());
43 this.slcExecution
= slcExecution
;
44 this.executionContext
= executionContext
;
48 // Initialize from SlcExecution
49 MapExecutionContext.registerExecutionContext(executionContext);
50 MapExecutionContext.getVariables()
51 .putAll(slcExecution.getAttributes());
54 log.info("Start execution #"
55 + MapExecutionContext.getExecutionUuid());
56 String executionBean = slcExecution.getAttributes().get(
58 ExecutionFlow main = (ExecutionFlow) applicationContext
59 .getBean(executionBean);
61 } catch (Exception e) {
62 log.error("Execution " + executionContext.getUuid()
65 applicationContext.publishEvent(new ExecutionFinishedEvent(
66 this, executionContext));