From: Mathieu Baudier Date: Fri, 3 Jul 2009 17:31:16 +0000 (+0000) Subject: Move to execution package X-Git-Tag: argeo-slc-2.1.7~1685 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=a91feabac0f3f603a73936b4447599402fba71d0;hp=5f2e766337b44b8f3e1a1f7522b52d1dc01516e8;p=gpl%2Fargeo-slc.git Move to execution package git-svn-id: https://svn.argeo.org/slc/trunk@2697 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- 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 5fa0d015f..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 @@ -3,7 +3,6 @@ package org.argeo.slc.core.execution; import java.util.ArrayList; import java.util.List; -import org.argeo.slc.core.execution.internal.ProcessThread; import org.argeo.slc.execution.ExecutionModulesManager; import org.argeo.slc.process.SlcExecution; import org.argeo.slc.process.SlcExecutionNotifier; diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ExecutionThread.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ExecutionThread.java new file mode 100644 index 000000000..08dfca28b --- /dev/null +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ExecutionThread.java @@ -0,0 +1,66 @@ +package org.argeo.slc.core.execution; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.slc.execution.ExecutionFlowDescriptor; +import org.argeo.slc.process.RealizedFlow; +import org.argeo.slc.process.SlcExecution; +import org.argeo.slc.process.SlcExecutionNotifier; +import org.argeo.slc.process.SlcExecutionStep; + +/** Thread of a single execution */ +public class ExecutionThread extends Thread { + private final static Log log = LogFactory.getLog(ExecutionThread.class); + + 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 { + processThread.getExecutionModulesManager().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)); + } + } + + protected void dispatchAddStep(SlcExecution slcExecution, + SlcExecutionStep step) { + slcExecution.getSteps().add(step); + List steps = new ArrayList(); + steps.add(step); + for (Iterator it = processThread + .getExecutionModulesManager().getSlcExecutionNotifiers() + .iterator(); it.hasNext();) { + it.next().addSteps(slcExecution, steps); + } + } + +} diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ProcessThread.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ProcessThread.java new file mode 100644 index 000000000..678e6f679 --- /dev/null +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ProcessThread.java @@ -0,0 +1,84 @@ +package org.argeo.slc.core.execution; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.slc.process.RealizedFlow; +import org.argeo.slc.process.SlcExecution; +import org.argeo.slc.process.SlcExecutionNotifier; + +/** Thread of the SLC Process, starting the sub executions. */ +public class ProcessThread extends Thread { + private final static Log log = LogFactory.getLog(ProcessThread.class); + + private final AbstractExecutionModulesManager executionModulesManager; + private final SlcExecution slcProcess; + private final ThreadGroup processThreadGroup; + private final List flowsToProcess = new ArrayList(); + + public ProcessThread( + AbstractExecutionModulesManager executionModulesManager, + SlcExecution slcExecution) { + super(executionModulesManager.getProcessesThreadGroup(), + "SLC Process #" + slcExecution.getUuid()); + this.executionModulesManager = executionModulesManager; + 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); + } + + protected void dispatchUpdateStatus(SlcExecution slcExecution, + String oldStatus, String newStatus) { + for (Iterator it = executionModulesManager + .getSlcExecutionNotifiers().iterator(); it.hasNext();) { + it.next().updateStatus(slcExecution, oldStatus, newStatus); + } + } + + public synchronized void flowCompleted() { + notifyAll(); + } + + public SlcExecution getSlcProcess() { + return slcProcess; + } + + public ThreadGroup getProcessThreadGroup() { + return processThreadGroup; + } + + public AbstractExecutionModulesManager getExecutionModulesManager() { + return executionModulesManager; + } +} diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/internal/ExecutionThread.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/internal/ExecutionThread.java deleted file mode 100644 index 043f74bc7..000000000 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/internal/ExecutionThread.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.argeo.slc.core.execution.internal; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.slc.execution.ExecutionFlowDescriptor; -import org.argeo.slc.process.RealizedFlow; -import org.argeo.slc.process.SlcExecution; -import org.argeo.slc.process.SlcExecutionNotifier; -import org.argeo.slc.process.SlcExecutionStep; - -/** Thread of a single execution */ -public class ExecutionThread extends Thread { - private final static Log log = LogFactory.getLog(ExecutionThread.class); - - 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 { - processThread.getExecutionModulesManager().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)); - } - } - - protected void dispatchAddStep(SlcExecution slcExecution, - SlcExecutionStep step) { - slcExecution.getSteps().add(step); - List steps = new ArrayList(); - steps.add(step); - for (Iterator it = processThread - .getExecutionModulesManager().getSlcExecutionNotifiers() - .iterator(); it.hasNext();) { - it.next().addSteps(slcExecution, steps); - } - } - -} diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/internal/ProcessThread.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/internal/ProcessThread.java deleted file mode 100644 index 0bfca64fc..000000000 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/internal/ProcessThread.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.argeo.slc.core.execution.internal; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.slc.core.execution.AbstractExecutionModulesManager; -import org.argeo.slc.process.RealizedFlow; -import org.argeo.slc.process.SlcExecution; -import org.argeo.slc.process.SlcExecutionNotifier; - -/** Thread of the SLC Process, starting the sub executions. */ -public class ProcessThread extends Thread { - private final static Log log = LogFactory.getLog(ProcessThread.class); - - private final AbstractExecutionModulesManager executionModulesManager; - private final SlcExecution slcProcess; - private final ThreadGroup processThreadGroup; - private final List flowsToProcess = new ArrayList(); - - public ProcessThread( - AbstractExecutionModulesManager executionModulesManager, - SlcExecution slcExecution) { - super(executionModulesManager.getProcessesThreadGroup(), - "SLC Process #" + slcExecution.getUuid()); - this.executionModulesManager = executionModulesManager; - 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); - } - - protected void dispatchUpdateStatus(SlcExecution slcExecution, - String oldStatus, String newStatus) { - for (Iterator it = executionModulesManager - .getSlcExecutionNotifiers().iterator(); it.hasNext();) { - it.next().updateStatus(slcExecution, oldStatus, newStatus); - } - } - - public synchronized void flowCompleted() { - notifyAll(); - } - - public SlcExecution getSlcProcess() { - return slcProcess; - } - - public ThreadGroup getProcessThreadGroup() { - return processThreadGroup; - } - - public AbstractExecutionModulesManager getExecutionModulesManager() { - return executionModulesManager; - } -}