X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=runtime%2Forg.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fexecution%2FAbstractExecutionModulesManager.java;h=4e5672638fb1311b40a26e847285101f67fe24b4;hb=a91feabac0f3f603a73936b4447599402fba71d0;hp=4722280d9f28663610084e58807b6fd5a40a0e8f;hpb=1d1bc92e4aef2b8b889d7482f91b7ed905f0fb47;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/AbstractExecutionModulesManager.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/AbstractExecutionModulesManager.java index 4722280d9..4e5672638 100644 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/AbstractExecutionModulesManager.java +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/AbstractExecutionModulesManager.java @@ -1,39 +1,21 @@ package org.argeo.slc.core.execution; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.slc.SlcException; -import org.argeo.slc.execution.ExecutionFlow; -import org.argeo.slc.execution.ExecutionFlowDescriptor; -import org.argeo.slc.execution.ExecutionModuleDescriptor; + import org.argeo.slc.execution.ExecutionModulesManager; -import org.argeo.slc.execution.ExecutionSpec; -import org.argeo.slc.execution.ExecutionSpecAttribute; -import org.argeo.slc.process.RealizedFlow; import org.argeo.slc.process.SlcExecution; import org.argeo.slc.process.SlcExecutionNotifier; -import org.argeo.slc.process.SlcExecutionStep; -import org.springframework.aop.scope.ScopedObject; -import org.springframework.util.Assert; public abstract class AbstractExecutionModulesManager implements ExecutionModulesManager { - private final static Log log = LogFactory - .getLog(AbstractExecutionModulesManager.class); - private List slcExecutionNotifiers = new ArrayList(); private ThreadGroup processesThreadGroup = new ThreadGroup("Processes"); public void process(SlcExecution slcExecution) { - new ProcessThread(processesThreadGroup, slcExecution).start(); + new ProcessThread(this, slcExecution).start(); } - +/* protected void dispatchUpdateStatus(SlcExecution slcExecution, String oldStatus, String newStatus) { for (Iterator it = slcExecutionNotifiers @@ -51,21 +33,16 @@ public abstract class AbstractExecutionModulesManager implements .iterator(); it.hasNext();) { it.next().addSteps(slcExecution, steps); } - } + }*/ public void setSlcExecutionNotifiers( List slcExecutionNotifiers) { this.slcExecutionNotifiers = slcExecutionNotifiers; } - - protected static ExecutionModuleDescriptor createDescriptor( - String moduleName, String moduleVersion, +/* + protected static void addFlowsToDescriptor(ExecutionModuleDescriptor md, Map executionFlows) { // TODO: put this in a separate configurable object - ExecutionModuleDescriptor md = new ExecutionModuleDescriptor(); - md.setName(moduleName); - md.setVersion(moduleVersion); - for (String name : executionFlows.keySet()) { ExecutionFlow executionFlow = executionFlows.get(name); @@ -120,103 +97,81 @@ public abstract class AbstractExecutionModulesManager implements // Add execution flow md.getExecutionFlows().add(efd); } - - return md; } - - /** Thread of the SLC Process, starting the sub executions. */ - private class ProcessThread extends Thread { - private final SlcExecution slcProcess; - private final ThreadGroup processThreadGroup; - private final List flowsToProcess = new ArrayList(); - - public ProcessThread(ThreadGroup processesThreadGroup, - SlcExecution slcExecution) { - super(processesThreadGroup, "SLC Process #" - + slcExecution.getUuid()); - this.slcProcess = slcExecution; - processThreadGroup = new ThreadGroup("SLC Process #" - + slcExecution.getUuid() + " thread group"); - } - - public void run() { - log.info("\n##\n## Process SLC Execution " + slcProcess + "\n##\n"); - - slcProcess.setStatus(SlcExecution.STATUS_RUNNING); - dispatchUpdateStatus(slcProcess, SlcExecution.STATUS_SCHEDULED, - SlcExecution.STATUS_RUNNING); - - flowsToProcess.addAll(slcProcess.getRealizedFlows()); - - while (flowsToProcess.size() > 0) { - RealizedFlow flow = flowsToProcess.remove(0); - ExecutionThread thread = new ExecutionThread(this, flow); - thread.start(); - - synchronized (this) { - try { - wait(); - } catch (InterruptedException e) { - // silent - } - } - } - - slcProcess.setStatus(SlcExecution.STATUS_FINISHED); - dispatchUpdateStatus(slcProcess, SlcExecution.STATUS_RUNNING, - SlcExecution.STATUS_FINISHED); - } - - public synchronized void flowCompleted() { - notifyAll(); - } - - public SlcExecution getSlcProcess() { - return slcProcess; - } - - public ThreadGroup getProcessThreadGroup() { - return processThreadGroup; - } +*/ + /** + * Thread of the SLC Process, starting the sub executions. private class + * ProcessThread extends Thread { private final SlcExecution slcProcess; + * private final ThreadGroup processThreadGroup; private final + * List flowsToProcess = new ArrayList(); + * + * public ProcessThread(ThreadGroup processesThreadGroup, SlcExecution + * slcExecution) { super(processesThreadGroup, "SLC Process #" + + * slcExecution.getUuid()); this.slcProcess = slcExecution; + * processThreadGroup = new ThreadGroup("SLC Process #" + + * slcExecution.getUuid() + " thread group"); } + * + * public void run() { log.info("\n##\n## Process SLC Execution " + + * slcProcess + "\n##\n"); + * + * slcProcess.setStatus(SlcExecution.STATUS_RUNNING); + * dispatchUpdateStatus(slcProcess, SlcExecution.STATUS_SCHEDULED, + * SlcExecution.STATUS_RUNNING); + * + * flowsToProcess.addAll(slcProcess.getRealizedFlows()); + * + * while (flowsToProcess.size() > 0) { RealizedFlow flow = + * flowsToProcess.remove(0); ExecutionThread thread = new + * ExecutionThread(this, flow); thread.start(); + * + * synchronized (this) { try { wait(); } catch (InterruptedException e) { // + * silent } } } + * + * slcProcess.setStatus(SlcExecution.STATUS_FINISHED); + * dispatchUpdateStatus(slcProcess, SlcExecution.STATUS_RUNNING, + * SlcExecution.STATUS_FINISHED); } + * + * public synchronized void flowCompleted() { notifyAll(); } + * + * public SlcExecution getSlcProcess() { return slcProcess; } + * + * public ThreadGroup getProcessThreadGroup() { return processThreadGroup; } + * } + */ + + /** + * Thread of a single execution private class ExecutionThread extends Thread + * { private final RealizedFlow realizedFlow; private final ProcessThread + * processThread; + * + * public ExecutionThread(ProcessThread processThread, RealizedFlow + * realizedFlow) { super(processThread.getProcessThreadGroup(), "Flow " + + * realizedFlow.getFlowDescriptor().getName()); this.realizedFlow = + * realizedFlow; this.processThread = processThread; } + * + * public void run() { ExecutionFlowDescriptor executionFlowDescriptor = + * realizedFlow .getFlowDescriptor(); String flowName = + * executionFlowDescriptor.getName(); + * + * dispatchAddStep(processThread.getSlcProcess(), new + * SlcExecutionStep(SlcExecutionStep.TYPE_PHASE_START, "Flow " + flowName)); + * + * try { execute(realizedFlow); } catch (Exception e) { // TODO: re-throw + * exception ? String msg = "Execution of flow " + flowName + " failed."; + * log.error(msg, e); dispatchAddStep(processThread.getSlcProcess(), new + * SlcExecutionStep(msg + " " + e.getMessage())); } finally { + * processThread.flowCompleted(); + * dispatchAddStep(processThread.getSlcProcess(), new + * SlcExecutionStep(SlcExecutionStep.TYPE_PHASE_END, "Flow " + flowName)); } + * } } + */ + + public List getSlcExecutionNotifiers() { + return slcExecutionNotifiers; } - /** Thread of a single execution */ - private class ExecutionThread extends Thread { - private final RealizedFlow realizedFlow; - private final ProcessThread processThread; - - public ExecutionThread(ProcessThread processThread, - RealizedFlow realizedFlow) { - super(processThread.getProcessThreadGroup(), "Flow " - + realizedFlow.getFlowDescriptor().getName()); - this.realizedFlow = realizedFlow; - this.processThread = processThread; - } - - public void run() { - ExecutionFlowDescriptor executionFlowDescriptor = realizedFlow - .getFlowDescriptor(); - String flowName = executionFlowDescriptor.getName(); - - dispatchAddStep(processThread.getSlcProcess(), - new SlcExecutionStep(SlcExecutionStep.TYPE_PHASE_START, - "Flow " + flowName)); - - try { - execute(realizedFlow); - } catch (Exception e) { - // TODO: re-throw exception ? - String msg = "Execution of flow " + flowName + " failed."; - log.error(msg, e); - dispatchAddStep(processThread.getSlcProcess(), - new SlcExecutionStep(msg + " " + e.getMessage())); - } finally { - processThread.flowCompleted(); - dispatchAddStep(processThread.getSlcProcess(), - new SlcExecutionStep(SlcExecutionStep.TYPE_PHASE_END, - "Flow " + flowName)); - } - } + public ThreadGroup getProcessesThreadGroup() { + return processesThreadGroup; } }