From 0e6af7f88e3fea20e8f75236ef4873d4efdb6c8f Mon Sep 17 00:00:00 2001 From: slaws Date: Thu, 12 Nov 2009 19:36:24 +0000 Subject: 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 --- .../slaws/runtimecompat/combinedlauncher/pom.xml | 61 ++++++++++ .../src/main/java/launcher/CombinedLauncher.java | 131 +++++++++++++++++++++ 2 files changed, 192 insertions(+) create mode 100644 sandbox/slaws/runtimecompat/combinedlauncher/pom.xml create mode 100644 sandbox/slaws/runtimecompat/combinedlauncher/src/main/java/launcher/CombinedLauncher.java (limited to 'sandbox/slaws/runtimecompat/combinedlauncher') diff --git a/sandbox/slaws/runtimecompat/combinedlauncher/pom.xml b/sandbox/slaws/runtimecompat/combinedlauncher/pom.xml new file mode 100644 index 0000000000..93c9b2652e --- /dev/null +++ b/sandbox/slaws/runtimecompat/combinedlauncher/pom.xml @@ -0,0 +1,61 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-SNAPSHOT + + 1.0-SNAPSHOT + combined-launcher + Apache Tuscany SCA Combined Launcher + + + + org.apache.tuscany.sca + tuscany-node-launcher-equinox + 2.0-SNAPSHOT + + + + + + junit + junit + 4.5 + test + + + + + ${artifactId} + + 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(); + } + + +} -- cgit v1.2.3