+/*
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package org.argeo.slc.osgi;
import java.util.ArrayList;
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;
AbstractExecutionModulesManager implements InitializingBean,
DisposableBean, OsgiServiceLifecycleListener {
- static {
- // Force usage of vanilla Xalan when in OSGi
- // We would like to do it in a cleaner way
- // but the integration of Xalan and Xerces in the JRE
- // makes it very difficult
- // Suggestions welcome!
- Properties systemProperties = System.getProperties();
- // if (!systemProperties
- // .containsKey("javax.xml.parsers.DocumentBuilderFactory"))
- // System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
- // "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
- // if
- // (!systemProperties.containsKey("javax.xml.parsers.SAXParserFactory"))
- // System.setProperty("javax.xml.parsers.SAXParserFactory",
- // "org.apache.xerces.jaxp.SAXParserFactoryImpl");
- if (!systemProperties
- .containsKey("javax.xml.transform.TransformerFactory"))
- System.setProperty("javax.xml.transform.TransformerFactory",
- "org.apache.xalan.processor.TransformerFactoryImpl");
- }
+// static {
+// // Force usage of vanilla Xalan when in OSGi
+// // We would like to do it in a cleaner way
+// // but the integration of Xalan and Xerces in the JRE
+// // makes it very difficult
+// // Suggestions welcome!
+// Properties systemProperties = System.getProperties();
+// // if (!systemProperties
+// // .containsKey("javax.xml.parsers.DocumentBuilderFactory"))
+// // System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
+// // "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
+// // if
+// // (!systemProperties.containsKey("javax.xml.parsers.SAXParserFactory"))
+// // System.setProperty("javax.xml.parsers.SAXParserFactory",
+// // "org.apache.xerces.jaxp.SAXParserFactoryImpl");
+// if (!systemProperties
+// .containsKey("javax.xml.transform.TransformerFactory"))
+// System.setProperty("javax.xml.transform.TransformerFactory",
+// "org.apache.xalan.processor.TransformerFactoryImpl");
+// }
private final static String PROPERTY_CACHE_SERVICES = "slc.osgi.execution.cacheServices";
Map<String, ExecutionFlow> flows = new HashMap<String, ExecutionFlow>();
if (useCachedServices) {
- Set<ExecutionFlow> flowsT = executionFlows.get(new OsgiBundle(
- moduleName, moduleVersion));
+ OsgiBundle key = new OsgiBundle(
+ moduleName, moduleVersion);
+ if(!executionFlows.containsKey(key))
+ return flows;
+ Set<ExecutionFlow> flowsT = executionFlows.get(key);
for (ExecutionFlow flow : flowsT)
flows.put(flow.getName(), flow);
} else {
}
}
- 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(
}
}
- public void execute(RealizedFlow realizedFlow) {
- if (log.isTraceEnabled())
- log.trace("Executing " + realizedFlow);
-
- String moduleName = realizedFlow.getModuleName();
- String moduleVersion = realizedFlow.getModuleVersion();
-
- Map<? extends String, ? extends Object> 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);