From c6448a6c73afdb3874ead87b30b593ef1e48e234 Mon Sep 17 00:00:00 2001 From: rfeng Date: Tue, 9 Sep 2008 01:29:55 +0000 Subject: Use the bundle to load the implementation.node classes git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@693336 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/node/equinox/launcher/NodeLauncher.java | 8 ++++---- .../node/equinox/launcher/NodeLauncherUtil.java | 24 +++++++++++++++++----- 2 files changed, 23 insertions(+), 9 deletions(-) (limited to 'java/sca') diff --git a/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher.java b/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher.java index 807b5cd8f7..f3bb8c04ae 100644 --- a/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher.java +++ b/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher.java @@ -65,7 +65,7 @@ public class NodeLauncher { * @throws LauncherException */ public T createNodeFromURL(String configurationURL) throws LauncherException { - return (T)node(configurationURL, null, null, null, null); + return (T)node(configurationURL, null, null, null, null, bundleContext); } /** @@ -80,7 +80,7 @@ public class NodeLauncher { * @throws LauncherException */ public T createNode(String compositeURI, Contribution... contributions) throws LauncherException { - return (T)node(null, compositeURI, null, contributions, null); + return (T)node(null, compositeURI, null, contributions, null, bundleContext); } /** @@ -94,7 +94,7 @@ public class NodeLauncher { */ public T createNode(String compositeURI, String compositeContent, Contribution... contributions) throws LauncherException { - return (T)node(null, compositeURI, compositeContent, contributions, null); + return (T)node(null, compositeURI, compositeContent, contributions, null, bundleContext); } /** @@ -112,7 +112,7 @@ public class NodeLauncher { * @return A newly created SCA node */ public T createNodeFromClassLoader(String compositeURI, ClassLoader classLoader) throws LauncherException { - return (T)node(null, compositeURI, null, null, classLoader); + return (T)node(null, compositeURI, null, null, classLoader, bundleContext); } public static void main(String[] args) throws Exception { diff --git a/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java b/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java index e2b457b62c..d0c3e6f4f8 100644 --- a/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java +++ b/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java @@ -47,6 +47,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; /** * Common functions and constants used by the admin components. @@ -55,6 +56,8 @@ import org.osgi.framework.Bundle; */ final class NodeLauncherUtil { + private static final String LAUNCHER_EQUINOX_LIBRARIES = "org.apache.tuscany.sca.node.launcher.equinox.libraries"; + private static final String SCANODE_FACTORY = "org.apache.tuscany.sca.node.SCANodeFactory"; private static final String DOMAIN_MANAGER_LAUNCHER_BOOTSTRAP = @@ -69,18 +72,29 @@ final class NodeLauncherUtil { /** * Collect JAR files under the given directory. * @param contributions - * + * @param bundleContext TODO * @throws LauncherException */ static Object node(String configurationURI, String compositeURI, String compositeContent, Contribution[] contributions, - ClassLoader contributionClassLoader) throws LauncherException { + ClassLoader contributionClassLoader, BundleContext bundleContext) throws LauncherException { try { + Bundle bundle = null; + for (Bundle b : bundleContext.getBundles()) { + if ("org.apache.tuscany.sca.implementation.node.runtime".equals(b.getSymbolicName())) { + bundle = b; + break; + } + } + if (bundle == null) { + throw new IllegalStateException( + "Bundle org.apache.tuscany.sca.implementation.node.runtime is not installed"); + } // Use Java reflection to create the node as only the runtime class // loader knows the runtime classes required by the node - Class bootstrapClass = Class.forName(NODE_IMPLEMENTATION_LAUNCHER_BOOTSTRAP); + Class bootstrapClass = bundle.loadClass(NODE_IMPLEMENTATION_LAUNCHER_BOOTSTRAP); Object bootstrap; if (configurationURI != null) { @@ -256,7 +270,7 @@ final class NodeLauncherUtil { for (String jarFile : jarFiles) { addPackages(jarFile, packages); classpath.append("\"external:"); - classpath.append(file(new URL(jarFile)).getAbsolutePath().replace(File.separatorChar, '/')); + classpath.append(file(new URL(jarFile)).getPath().replace(File.separatorChar, '/')); classpath.append("\","); } @@ -282,7 +296,7 @@ final class NodeLauncherUtil { Attributes attributes = manifest.getMainAttributes(); attributes.putValue("Manifest-Version", "1.0"); attributes.putValue(BUNDLE_MANIFESTVERSION, "2"); - attributes.putValue(BUNDLE_SYMBOLICNAME, "org.apache.tuscany.sca.node.launcher.equinox.libraries"); + attributes.putValue(BUNDLE_SYMBOLICNAME, LAUNCHER_EQUINOX_LIBRARIES); attributes.putValue(EXPORT_PACKAGE, exports.substring(0, exports.length() - 1)); attributes.putValue(IMPORT_PACKAGE, imports.substring(0, imports.length() - 1)); attributes.putValue(BUNDLE_CLASSPATH, classpath.substring(0, classpath.length() - 1)); -- cgit v1.2.3