From: Mathieu Baudier Date: Wed, 17 Feb 2010 23:23:20 +0000 (+0000) Subject: Improve executions and system calls X-Git-Tag: argeo-slc-2.1.7~1416 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=c092f2c4564f7238f2960bc005c5a2202732f44e;hp=4d39406346e271cb799a5dc6cc3dadf718b90ada;p=gpl%2Fargeo-slc.git Improve executions and system calls git-svn-id: https://svn.argeo.org/slc/trunk@3366 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 c437ba0cb..76d523bf8 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 @@ -2,23 +2,69 @@ package org.argeo.slc.core.execution; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.slc.execution.ExecutionContext; +import org.argeo.slc.execution.ExecutionFlow; +import org.argeo.slc.execution.ExecutionFlowDescriptorConverter; import org.argeo.slc.execution.ExecutionModulesListener; import org.argeo.slc.execution.ExecutionModulesManager; +import org.argeo.slc.process.RealizedFlow; import org.argeo.slc.process.SlcExecution; import org.argeo.slc.process.SlcExecutionNotifier; public abstract class AbstractExecutionModulesManager implements ExecutionModulesManager { + private final static Log log = LogFactory + .getLog(AbstractExecutionModulesManager.class); + private List slcExecutionNotifiers = new ArrayList(); private List executionModulesListeners = new ArrayList(); private ThreadGroup processesThreadGroup = new ThreadGroup("Processes"); + protected abstract ExecutionFlow findExecutionFlow(String moduleName, + String moduleVersion, String flowName); + + protected abstract ExecutionContext findExecutionContext(String moduleName, + String moduleVersion); + + protected abstract ExecutionFlowDescriptorConverter getExecutionFlowDescriptorConverter( + String moduleName, String moduleVersion); + public void process(SlcExecution slcExecution) { new ProcessThread(this, slcExecution).start(); } + public void execute(RealizedFlow realizedFlow) { + if (log.isTraceEnabled()) + log.trace("Executing " + realizedFlow); + + String moduleName = realizedFlow.getModuleName(); + String moduleVersion = realizedFlow.getModuleVersion(); + + Map variablesToAdd = getExecutionFlowDescriptorConverter( + moduleName, moduleVersion).convertValues( + realizedFlow.getFlowDescriptor()); + ExecutionContext executionContext = findExecutionContext(moduleName, + moduleVersion); + for (String key : variablesToAdd.keySet()) + executionContext.setVariable(key, variablesToAdd.get(key)); + + ExecutionFlow flow = findExecutionFlow(moduleName, moduleVersion, + realizedFlow.getFlowDescriptor().getName()); + + // + // Actually runs the flow, IN THIS THREAD + // + flow.run(); + // + // + // + } + public void setSlcExecutionNotifiers( List slcExecutionNotifiers) { this.slcExecutionNotifiers = slcExecutionNotifiers; 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 index 3c85055f8..f1ebde364 100644 --- 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 @@ -14,6 +14,8 @@ import org.argeo.slc.process.SlcExecutionStep; /** Thread of a single execution */ public class ExecutionThread extends Thread { + public final static String SYSPROP_EXECUTION_AUTO_UPGRADE = "slc.execution.autoupgrade"; + private final static Log log = LogFactory.getLog(ExecutionThread.class); private final RealizedFlow realizedFlow; @@ -43,6 +45,11 @@ public class ExecutionThread extends Thread { SlcExecutionStep.TYPE_PHASE_START, "Flow " + flowName)); try { + String autoUpgrade = System + .getProperty(SYSPROP_EXECUTION_AUTO_UPGRADE); + if (autoUpgrade != null && autoUpgrade.equals("true")) + processThread.getExecutionModulesManager().upgrade( + realizedFlow.getModuleNameVersion()); processThread.getExecutionModulesManager().execute(realizedFlow); } catch (Exception e) { // TODO: re-throw exception ? diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ParameterRef.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ParameterRef.java index 6fd277a10..f28e1e49f 100644 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ParameterRef.java +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ParameterRef.java @@ -16,12 +16,8 @@ public class ParameterRef implements FactoryBean { public ParameterRef() { } - /** @deprecated for backward compatibility with pre v0.11.4 approach. */ public ParameterRef(String name) { this.name = name; - log - .warn("Using constructor in parameter ref is deprecated" - + " and will be removed in a later version. Set with property 'name'."); } public Object getObject() throws Exception { diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/tasks/SystemCall.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/tasks/SystemCall.java index 95154ef0f..e5df71ab1 100644 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/tasks/SystemCall.java +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/tasks/SystemCall.java @@ -281,13 +281,15 @@ public class SystemCall extends TreeSRelatedHelper implements Runnable { stdOutputStream != null ? stdOutputStream : new LogOutputStream() { protected void processLine(String line, int level) { - log(stdOutLogLevel, line); + if (line != null && !line.trim().equals("")) + log(stdOutLogLevel, line); if (stdOutWriter != null) appendLineToFile(stdOutWriter, line); } }, new LogOutputStream() { protected void processLine(String line, int level) { - log(stdErrLogLevel, line); + if (line != null && !line.trim().equals("")) + log(stdErrLogLevel, line); if (stdErrWriter != null) appendLineToFile(stdErrWriter, line); } @@ -301,20 +303,19 @@ public class SystemCall extends TreeSRelatedHelper implements Runnable { return new ExecuteResultHandler() { public void onProcessComplete(int exitValue) { + String msg = "System call '" + commandLine + + "' properly completed."; if (log.isDebugEnabled()) - log - .debug("Process " + commandLine - + " properly completed."); + log.debug(msg); if (testResult != null) { forwardPath(testResult, null); testResult.addResultPart(new SimpleResultPart( - TestStatus.PASSED, "Process " + commandLine - + " properly completed.")); + TestStatus.PASSED, msg)); } } public void onProcessFailed(ExecuteException e) { - String msg = "Process " + commandLine + " failed."; + String msg = "System call '" + commandLine + "' failed."; if (testResult != null) { forwardPath(testResult, null); testResult.addResultPart(new SimpleResultPart( diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/deploy/ModulesManager.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/deploy/ModulesManager.java index 93d325f5f..b80887d0f 100644 --- a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/deploy/ModulesManager.java +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/deploy/ModulesManager.java @@ -2,6 +2,8 @@ package org.argeo.slc.deploy; import java.util.List; +import org.argeo.slc.build.NameVersion; + /** Provides access to modules */ public interface ModulesManager { /** @return a full fledged module descriptor. */ @@ -12,4 +14,7 @@ public interface ModulesManager { * @return a list of minimal module descriptors */ public List listModules(); + + /** Synchronously upgrades the module referenced by this name version */ + public void upgrade(NameVersion nameVersion); } diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/process/RealizedFlow.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/process/RealizedFlow.java index 308b906e7..1abf69428 100644 --- a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/process/RealizedFlow.java +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/process/RealizedFlow.java @@ -2,6 +2,8 @@ package org.argeo.slc.process; import java.io.Serializable; +import org.argeo.slc.build.BasicNameVersion; +import org.argeo.slc.build.NameVersion; import org.argeo.slc.execution.ExecutionFlowDescriptor; import org.argeo.slc.execution.ExecutionSpec; @@ -20,6 +22,10 @@ public class RealizedFlow implements Serializable { public void setModuleName(String moduleName) { this.moduleName = moduleName; } + + public NameVersion getModuleNameVersion(){ + return new BasicNameVersion(getModuleName(), getModuleVersion()); + } public String getModuleVersion() { return moduleVersion; diff --git a/runtime/org.argeo.slc.support.equinox/src/main/java/org/argeo/slc/equinox/ExecutionCommandProvider.java b/runtime/org.argeo.slc.support.equinox/src/main/java/org/argeo/slc/equinox/ExecutionCommandProvider.java index 9711c3c96..8b9378e17 100644 --- a/runtime/org.argeo.slc.support.equinox/src/main/java/org/argeo/slc/equinox/ExecutionCommandProvider.java +++ b/runtime/org.argeo.slc.support.equinox/src/main/java/org/argeo/slc/equinox/ExecutionCommandProvider.java @@ -58,9 +58,10 @@ public class ExecutionCommandProvider implements CommandProvider { + executionName); // Execute - if (SLC_WITH_REFRESH.equals(slcCommand)) - modulesManager.updateAndExecute(lastLaunch); - else if (SLC_NO_REFRESH.equals(slcCommand)) + if (SLC_WITH_REFRESH.equals(slcCommand)) { + modulesManager.upgrade(lastLaunch.getModuleNameVersion()); + modulesManager.execute(lastLaunch); + } else if (SLC_NO_REFRESH.equals(slcCommand)) modulesManager.execute(lastLaunch); else throw new SlcException("Unrecognized SLC command " + slcCommand); diff --git a/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java b/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java index 2f846ccb7..5f50bf84f 100644 --- a/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java +++ b/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java @@ -91,9 +91,9 @@ public class BundlesManager implements BundleContextAware, FrameworkListener, } if (log.isDebugEnabled()) - log.debug("Bundle " + bundle.getSymbolicName() - + " ready to be used at latest version." - + " (upgrade performed in " + (end - begin) + "ms)."); + log.debug("Bundle '" + bundle.getSymbolicName() + + "' upgraded and ready " + " (upgrade performed in " + + (end - begin) + "ms)."); if (log.isTraceEnabled()) { ApplicationContext applicationContext = (ApplicationContext) bundleContext diff --git a/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/OsgiBundle.java b/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/OsgiBundle.java index 50b76fa47..19b357285 100644 --- a/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/OsgiBundle.java +++ b/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/OsgiBundle.java @@ -2,6 +2,7 @@ package org.argeo.slc.osgi; import org.argeo.slc.build.BasicNameVersion; import org.argeo.slc.build.Distribution; +import org.argeo.slc.build.NameVersion; import org.argeo.slc.core.build.ResourceDistribution; import org.argeo.slc.deploy.DeploymentData; import org.argeo.slc.deploy.Module; @@ -26,6 +27,10 @@ public class OsgiBundle extends BasicNameVersion implements Module { super(name, version); } + public OsgiBundle(NameVersion nameVersion) { + super(nameVersion); + } + public OsgiBundle(Bundle bundle) { super(bundle.getSymbolicName(), getVersionSafe(bundle)); internalBundleId = bundle.getBundleId(); diff --git a/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/OsgiExecutionModulesManager.java b/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/OsgiExecutionModulesManager.java index 9fd9c09f4..50967384e 100644 --- a/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/OsgiExecutionModulesManager.java +++ b/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/OsgiExecutionModulesManager.java @@ -14,6 +14,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.slc.SlcException; import org.argeo.slc.build.BasicNameVersion; +import org.argeo.slc.build.NameVersion; import org.argeo.slc.core.execution.AbstractExecutionModulesManager; import org.argeo.slc.core.execution.DefaultExecutionFlowDescriptorConverter; import org.argeo.slc.deploy.ModuleDescriptor; @@ -258,10 +259,9 @@ public class OsgiExecutionModulesManager extends } } - public void updateAndExecute(RealizedFlow realizedFlow) { - OsgiBundle osgiBundle = new OsgiBundle(realizedFlow); + public void upgrade(NameVersion nameVersion) { + OsgiBundle osgiBundle = new OsgiBundle(nameVersion); bundlesManager.upgradeSynchronous(osgiBundle); - execute(realizedFlow); } protected synchronized ExecutionFlowDescriptorConverter getExecutionFlowDescriptorConverter( @@ -283,33 +283,6 @@ public class OsgiExecutionModulesManager extends } } - public void execute(RealizedFlow realizedFlow) { - if (log.isTraceEnabled()) - log.trace("Executing " + realizedFlow); - - String moduleName = realizedFlow.getModuleName(); - String moduleVersion = realizedFlow.getModuleVersion(); - - Map variablesToAdd = getExecutionFlowDescriptorConverter( - moduleName, moduleVersion).convertValues( - realizedFlow.getFlowDescriptor()); - ExecutionContext executionContext = findExecutionContext(moduleName, - moduleVersion); - for (String key : variablesToAdd.keySet()) - executionContext.setVariable(key, variablesToAdd.get(key)); - - ExecutionFlow flow = findExecutionFlow(moduleName, moduleVersion, - realizedFlow.getFlowDescriptor().getName()); - - // - // Actually runs the flow, IN THIS THREAD - // - flow.run(); - // - // - // - } - public ModuleDescriptor getModuleDescriptor(String moduleName, String version) { return getExecutionModuleDescriptor(moduleName, version);