summaryrefslogtreecommitdiffstats
path: root/sandbox/slaws/runtimecompat/combinedlauncher/src/main
diff options
context:
space:
mode:
authorslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2009-11-12 19:36:24 +0000
committerslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2009-11-12 19:36:24 +0000
commit0e6af7f88e3fea20e8f75236ef4873d4efdb6c8f (patch)
tree016255532ae67b022d00f18f88197445cb6cbd4f /sandbox/slaws/runtimecompat/combinedlauncher/src/main
parent7f9ab2a980b482f97f2b18e0f9a35455428dcf08 (diff)
looking at the practicalities of running 1.x and 2.x runtimes in the same JVM. Doesn't do anything interesting yet.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@835512 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sandbox/slaws/runtimecompat/combinedlauncher/src/main')
-rw-r--r--sandbox/slaws/runtimecompat/combinedlauncher/src/main/java/launcher/CombinedLauncher.java131
1 files changed, 131 insertions, 0 deletions
diff --git a/sandbox/slaws/runtimecompat/combinedlauncher/src/main/java/launcher/CombinedLauncher.java b/sandbox/slaws/runtimecompat/combinedlauncher/src/main/java/launcher/CombinedLauncher.java
new file mode 100644
index 0000000000..f21284716f
--- /dev/null
+++ b/sandbox/slaws/runtimecompat/combinedlauncher/src/main/java/launcher/CombinedLauncher.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 launcher;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.tuscany.sca.node.equinox.launcher.EquinoxHost;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+
+public class CombinedLauncher {
+
+ private static final String TWO_X_NODE_LAUNCHER_EQUINOX_BUNDLE = "org.apache.tuscany.sca.node.launcher.equinox";
+ private static final String TWO_X_NODE_LAUNCHER_UTIL = "org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil";
+ private static final String TWO_X_CONTRIBUTION = "org.apache.tuscany.sca.node.equinox.launcher.Contribution";
+
+ private static final String TWO_X_NODE_API_BUNDLE = "org.apache.tuscany.sca.node.api";
+ private static final String TWO_X_NODE = "org.apache.tuscany.sca.node.Node";
+
+ public static void main(String[] args) throws Exception {
+ // fire up the equinox host for the core set of Tuscany bundles
+ // enough to run the calculator sample
+
+ // set TUSCANY_HOME environment variable to get
+ // equinox host to load all the 2.x Tuscany
+ // bundles + dependencies
+ // Hack so that I don't have to remember to
+ // set the environment variable. Don't do this at home
+ System.setProperty("TUSCANY_HOME",
+ "../../../java-2.x/distribution/all/target/apache-tuscany-sca-all-2.0-SNAPSHOT-dir/tuscany-sca-2.0-SNAPSHOT");
+ EquinoxHost equinoxHost = new EquinoxHost();
+ BundleContext bundleContext = equinoxHost.start();
+
+ // need to add in the 1.x bundle(s) also
+ // TODO
+
+ // load 2xcalculator?
+ // find the the 2.x node launcher util
+ // Get the node runtime bundle.
+ Bundle bundle = null;
+ for (Bundle b : bundleContext.getBundles()) {
+ if (TWO_X_NODE_LAUNCHER_EQUINOX_BUNDLE.equals(b.getSymbolicName())) {
+ bundle = b;
+ break;
+ }
+ }
+ if (bundle == null) {
+ throw new IllegalStateException("Bundle " + TWO_X_NODE_LAUNCHER_EQUINOX_BUNDLE + " is not installed");
+ }
+
+ // All this reflection not strictly needed given the current
+ // module dependencies. Just experimenting
+ Class<?> contributionClass = bundle.loadClass(TWO_X_CONTRIBUTION);
+ Constructor<?> constructor = contributionClass.getConstructor(String.class, String.class);
+
+ Class<?> bootstrapClass = bundle.loadClass(TWO_X_NODE_LAUNCHER_UTIL);
+ Class<?> contributionArrayClass = Array.newInstance(contributionClass, 0).getClass();
+ Method nodeMethod = bootstrapClass.getMethod("node", String.class, String.class, String.class, contributionArrayClass, BundleContext.class);
+
+ bundle = null;
+ for (Bundle b : bundleContext.getBundles()) {
+ if (TWO_X_NODE_API_BUNDLE.equals(b.getSymbolicName())) {
+ bundle = b;
+ break;
+ }
+ }
+ if (bundle == null) {
+ throw new IllegalStateException("Bundle " + TWO_X_NODE_API_BUNDLE + " is not installed");
+ }
+
+ Class<?> nodeClass = bundle.loadClass(TWO_X_NODE);
+ Method startMethod = nodeClass.getMethod("start");
+
+ String configurationURI = null;
+ String compositeURI = null;
+ String compositeContent = null;
+ Object contribution = constructor.newInstance("calculator", "../2xcalculator.jar");
+ Object[] contributions = (Object[])Array.newInstance(contributionClass, 1);
+ contributions[0] = contribution;
+
+ Object node = nodeMethod.invoke(null,
+ configurationURI,
+ compositeURI,
+ compositeContent,
+ contributionArrayClass.cast(contributions),
+ bundleContext);
+
+ startMethod.invoke(node);
+
+ System.out.println("2.x Started");
+
+ // load 1xcalculator?
+ // find the the 1.x node launcher
+
+
+
+/*
+ Node node = NodeFactory.newInstance().createNode("Calculator.composite",
+ new Contribution("calculator", "../2xcalculator.jar"));
+
+ node.start();
+ node.stop();
+*/
+ equinoxHost.stop();
+ }
+
+
+}