From 62dfafcd597b775154b63ecf5e7edad35ca3a9b8 Mon Sep 17 00:00:00 2001 From: antelder Date: Thu, 19 Mar 2009 10:31:17 +0000 Subject: delete test tag git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@755899 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/node/equinox/launcher/Contribution.java | 48 - .../launcher/ContributionLocationHelper.java | 66 -- .../equinox/launcher/DomainManagerLauncher.java | 173 --- .../sca/node/equinox/launcher/EquinoxHost.java | 459 -------- .../node/equinox/launcher/LauncherException.java | 55 - .../node/equinox/launcher/NodeDaemonLauncher.java | 160 --- .../sca/node/equinox/launcher/NodeLauncher.java | 327 ------ .../sca/node/equinox/launcher/NodeLauncher2.java | 217 ---- .../node/equinox/launcher/NodeLauncherUtil.java | 1113 -------------------- .../sca/node/equinox/launcher/NodeMain.java | 62 -- 10 files changed, 2680 deletions(-) delete mode 100644 sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/Contribution.java delete mode 100644 sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/ContributionLocationHelper.java delete mode 100644 sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/DomainManagerLauncher.java delete mode 100644 sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java delete mode 100644 sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherException.java delete mode 100644 sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeDaemonLauncher.java delete mode 100644 sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher.java delete mode 100644 sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher2.java delete mode 100644 sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java delete mode 100644 sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeMain.java (limited to 'sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java') diff --git a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/Contribution.java b/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/Contribution.java deleted file mode 100644 index 892412b395..0000000000 --- a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/Contribution.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 org.apache.tuscany.sca.node.equinox.launcher; - -/** - * Represents an SCA contribution uri + location. - * - * @version $Rev$ $Date$ - */ -public final class Contribution { - private String uri; - private String location; - - /** - * Constructs a new SCA contribution. - * - * @param uri - * @param location - */ - public Contribution(String uri, String location) { - this.uri = uri; - this.location = location; - } - - public String getURI() { - return uri; - } - - public String getLocation() { - return location; - } -} \ No newline at end of file diff --git a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/ContributionLocationHelper.java b/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/ContributionLocationHelper.java deleted file mode 100644 index fd7aaed4c8..0000000000 --- a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/ContributionLocationHelper.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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 org.apache.tuscany.sca.node.equinox.launcher; - -import java.io.File; -import java.net.URL; -import java.security.AccessController; -import java.security.PrivilegedAction; - -import org.osgi.framework.Bundle; - -/** - * ContributionLocationHelper - * - * @version $Rev: $ $Date: $ - */ -public class ContributionLocationHelper { - - /** - * Returns the location of the SCA contribution containing the given class. - * - * @param anchorClass - * @return - */ - public static String getContributionLocation(final Class anchorClass) { - URL url = AccessController.doPrivileged(new PrivilegedAction() { - public URL run() { - return anchorClass.getProtectionDomain().getCodeSource().getLocation(); - } - }); - String uri = url.toString(); - return uri; - } - - /** - * Returns the location of the SCA contribution represented by the given bundle. - * - * @param anchorClass - * @return - */ - public static String getContributionLocation(final Bundle bundle) { - String uri = bundle.getLocation(); - uri = uri.substring(uri.indexOf("file:") + 5); - File file = new File(uri); - uri = file.toURI().toString(); - return uri; - } - -} diff --git a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/DomainManagerLauncher.java b/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/DomainManagerLauncher.java deleted file mode 100644 index e6f59e1b07..0000000000 --- a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/DomainManagerLauncher.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * 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 org.apache.tuscany.sca.node.equinox.launcher; - -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.domainManager; - -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Simple launcher for the SCA domain manager. - * - * @version $Rev$ $Date$ - */ -public class DomainManagerLauncher { - - static final Logger logger = Logger.getLogger(DomainManagerLauncher.class.getName()); - - /** - * Constructs a new DomainManagerLauncher. - */ - private DomainManagerLauncher() { - } - - /** - * Returns a new launcher instance. - * - * @return a new launcher instance - */ - public static DomainManagerLauncher newInstance() { - return new DomainManagerLauncher(); - } - - /** - * Creates a new DomainManager. - * - * @return a new DomainManager - * @throws LauncherException - */ - public T createDomainManager() throws LauncherException { - return (T)domainManager("."); - } - - /** - * Creates a new DomainManager. - * - * @param rootDirectory the domain's root configuration directory - * - * @return a new DomainManager - * @throws LauncherException - */ - public T createDomainManager(String rootDirectory) throws LauncherException { - return (T)domainManager(rootDirectory); - } - - public static void main(String[] args) throws Exception { - logger.info("Apache Tuscany SCA Domain Manager is starting..."); - - // Create a launcher - DomainManagerLauncher launcher = newInstance(); - - EquinoxHost equinox = null; - Object domainManager = null; - ShutdownThread shutdown = null; - try { - - // Start the OSGi host - equinox = new EquinoxHost(); - equinox.start(); - - // Start the domain manager - domainManager = launcher.createDomainManager(); - try { - domainManager.getClass().getMethod("start").invoke(domainManager); - } catch (Exception e) { - logger.log(Level.SEVERE, "SCA Domain Manager could not be started", e); - throw e; - } - logger.info("SCA Domain Manager is now started."); - - // Install a shutdown hook - ShutdownThread hook = new ShutdownThread(domainManager, equinox); - Runtime.getRuntime().addShutdownHook(hook); - - logger.info("Press enter to shutdown."); - try { - System.in.read(); - } catch (IOException e) { - - // Wait forever - Object lock = new Object(); - synchronized(lock) { - lock.wait(); - } - } - - } finally { - - // Remove the shutdown hook - if (shutdown != null) { - Runtime.getRuntime().removeShutdownHook(shutdown); - } - - // Stop the domain manager and OSGi host - if (domainManager != null) { - stopDomainManager(domainManager); - } - if (equinox != null) { - equinox.stop(); - } - } - } - - - /** - * Stop the given domain manager. - * - * @param domainManager - * @throws Exception - */ - private static void stopDomainManager(Object domainManager) throws Exception { - try { - domainManager.getClass().getMethod("stop").invoke(domainManager); - logger.info("SCA Domain Manager is now stopped."); - } catch (Exception e) { - logger.log(Level.SEVERE, "SCA Domain Manager could not be stopped", e); - throw e; - } - } - - private static class ShutdownThread extends Thread { - private Object domainManager; - private EquinoxHost equinox; - - public ShutdownThread(Object domainManager, EquinoxHost equinox) { - super(); - this.domainManager = domainManager; - this.equinox = equinox; - } - - @Override - public void run() { - try { - stopDomainManager(domainManager); - } catch (Exception e) { - // Ignore - } - try { - equinox.stop(); - } catch (Exception e) { - // Ignore - } - } - } -} diff --git a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java b/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java deleted file mode 100644 index 4918f165bc..0000000000 --- a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java +++ /dev/null @@ -1,459 +0,0 @@ -/* - * 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 org.apache.tuscany.sca.node.equinox.launcher; - -import static java.lang.System.currentTimeMillis; -import static java.lang.System.setProperty; -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.LAUNCHER_EQUINOX_LIBRARIES; -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.artifactId; -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.bundleName; -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.file; -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.fixupBundle; -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.jarVersion; -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.runtimeClasspathEntries; -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.string; -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.thirdPartyLibraryBundle; -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.thisBundleLocation; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.net.URL; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.UUID; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.eclipse.core.runtime.adaptor.EclipseStarter; -import org.eclipse.core.runtime.adaptor.LocationManager; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; - -/** - * Wraps the Equinox runtime. - */ -public class EquinoxHost { - private static Logger logger = Logger.getLogger(EquinoxHost.class.getName()); - - static { - if (getSystemProperty("osgi.debug") != null) { - logger.setLevel(Level.FINE); - } - } - - private BundleContext bundleContext; - private Bundle launcherBundle; - private boolean startedEclipse; - private List bundleFiles = new ArrayList(); - private List bundleNames = new ArrayList(); - private Collection jarFiles = new HashSet(); - private Map allBundles = new HashMap(); - private List installedBundles = new ArrayList(); - - private Set bundleLocations; - private boolean aggregateThirdPartyJars = false; - - public EquinoxHost() { - super(); - } - - public EquinoxHost(Set urls) { - super(); - this.bundleLocations = urls; - } - - private static String getSystemProperty(final String name) { - return AccessController.doPrivileged(new PrivilegedAction() { - public String run() { - return System.getProperty(name); - } - }); - } - - private static Properties getSystemProperties() { - return AccessController.doPrivileged(new PrivilegedAction() { - public Properties run() { - Properties props = new Properties(); - for (Map.Entry e : System.getProperties().entrySet()) { - if (e.getKey() instanceof String) { - String prop = (String)e.getKey(); - if (prop.startsWith("osgi.") || prop.startsWith("eclipse.")) { - props.put(prop, e.getValue()); - } - } - } - return props; - } - }); - } - - private static void put(Properties props, String key, String value) { - if (!props.contains(key)) { - props.put(key, value); - } - } - - /** - * Start the Equinox host. - * - * @return - */ - public BundleContext start() { - try { - if (!EclipseStarter.isRunning()) { - - String version = getSystemProperty("java.specification.version"); - String profile = "J2SE-1.5.profile"; - if (version.startsWith("1.6")) { - profile = "JavaSE-1.6.profile"; - } - Properties props = new Properties(); - InputStream is = getClass().getResourceAsStream(profile); - if (is != null) { - props.load(is); - is.close(); - } - - props.putAll(getSystemProperties()); - - // Configure Eclipse properties - - // Use the boot classloader as the parent classloader - put(props, "osgi.contextClassLoaderParent", "app"); - - // Set startup properties - put(props, EclipseStarter.PROP_CLEAN, "true"); - - // Set location properties - // FIXME Use proper locations - String tmpDir = getSystemProperty("java.io.tmpdir"); - File root = new File(tmpDir); - // Add user name as the prefix. For multiple users on the same Lunix, - // there will be permission issue if one user creates the .tuscany folder - // first under /tmp with no write permission for others. - String userName = getSystemProperty("user.name"); - if (userName != null) { - root = new File(root, userName); - } - root = new File(root, ".tuscany/equinox/" + UUID.randomUUID().toString()); - if (logger.isLoggable(Level.FINE)) { - logger.fine("Equinox location: " + root); - } - - put(props, LocationManager.PROP_INSTANCE_AREA_DEFAULT, new File(root, "workspace").toURI().toString()); - put(props, LocationManager.PROP_INSTALL_AREA, new File(root, "install").toURI().toString()); - put(props, LocationManager.PROP_CONFIG_AREA_DEFAULT, new File(root, "config").toURI().toString()); - put(props, LocationManager.PROP_USER_AREA_DEFAULT, new File(root, "user").toURI().toString()); - - EclipseStarter.setInitialProperties(props); - - // Test if the configuration/config.ini or osgi.bundles has been set - // If yes, try to avoid discovery of bundles - if (bundleLocations == null) { - if (props.getProperty("osgi.bundles") != null) { - bundleLocations = Collections.emptySet(); - } else { - String config = props.getProperty(LocationManager.PROP_CONFIG_AREA); - File ini = new File(config, "config.ini"); - if (ini.isFile()) { - Properties iniProps = new Properties(); - iniProps.load(new FileInputStream(ini)); - if (iniProps.getProperty("osgi.bundles") != null) { - bundleLocations = Collections.emptySet(); - } - } - } - } - - // Start Eclipse - bundleContext = EclipseStarter.startup(new String[] {}, null); - startedEclipse = true; - - } else { - - // Get bundle context from the running Eclipse instance - bundleContext = EclipseStarter.getSystemBundleContext(); - } - - // Determine the runtime classpath entries - Set urls; - urls = findBundleLocations(); - - // Sort out which are bundles (and not already installed) and which are just - // regular JARs - for (URL url : urls) { - File file = file(url); - String bundleName = bundleName(file); - if (bundleName != null) { - bundleFiles.add(url); - bundleNames.add(bundleName); - } else { - if (file.isFile()) { - jarFiles.add(url); - } - } - } - - // Get the already installed bundles - for (Bundle bundle : bundleContext.getBundles()) { - allBundles.put(bundle.getSymbolicName(), bundle); - } - - // Install the launcher bundle if necessary - String launcherBundleName = "org.apache.tuscany.sca.node.launcher.equinox"; - String launcherBundleLocation; - launcherBundle = allBundles.get(launcherBundleName); - if (launcherBundle == null) { - launcherBundleLocation = thisBundleLocation(); - if (logger.isLoggable(Level.FINE)) { - logger.fine("Installing launcher bundle: " + launcherBundleLocation); - } - fixupBundle(launcherBundleLocation); - launcherBundle = bundleContext.installBundle(launcherBundleLocation); - allBundles.put(launcherBundleName, launcherBundle); - installedBundles.add(launcherBundle); - } else { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Launcher bundle is already installed: " + string(launcherBundle, false)); - } - // launcherBundleLocation = thisBundleLocation(launcherBundle); - } - - // FIXME: SDO bundles dont have the correct dependencies - setProperty("commonj.sdo.impl.HelperProvider", "org.apache.tuscany.sdo.helper.HelperProviderImpl"); - - // Install the Tuscany bundles - long start = currentTimeMillis(); - - if (logger.isLoggable(Level.FINE)) { - logger.fine("Generating third-party library bundle."); - } - long libraryStart = currentTimeMillis(); - if (!aggregateThirdPartyJars) { - for (URL jarFile : jarFiles) { - installAsBundle(jarFile, null); - } - } else { - installAsBundle(jarFiles, LAUNCHER_EQUINOX_LIBRARIES); - } - if (logger.isLoggable(Level.FINE)) { - logger - .fine("Third-party library bundle installed in " + (currentTimeMillis() - libraryStart) + " ms: "); - } - - // Install all the other bundles that are not already installed - for (URL bundleFile: bundleFiles) { - fixupBundle(bundleFile.toString()); - } - for (int i = 0, n = bundleFiles.size(); i < n; i++) { - URL bundleFile = bundleFiles.get(i); - String bundleName = bundleNames.get(i); - if (bundleName.contains("org.eclipse.jdt.junit")) { - continue; - } - installBundle(bundleFile, bundleName); - } - - long end = currentTimeMillis(); - if (logger.isLoggable(Level.FINE)) { - logger.fine("Tuscany bundles are installed in " + (end - start) + " ms."); - } - - // Start the extensiblity and launcher bundles - String extensibilityBundleName = "org.apache.tuscany.sca.extensibility.equinox"; - Bundle extensibilityBundle = allBundles.get(extensibilityBundleName); - if (extensibilityBundle != null) { - if ((extensibilityBundle.getState() & Bundle.ACTIVE) == 0) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Starting bundle: " + string(extensibilityBundle, false)); - } - extensibilityBundle.start(); - } else if (logger.isLoggable(Level.FINE)) { - logger.fine("Bundle is already started: " + string(extensibilityBundle, false)); - } - } - if ((launcherBundle.getState() & Bundle.ACTIVE) == 0) { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Starting bundle: " + string(launcherBundle, false)); - } - launcherBundle.start(); - } else if (logger.isLoggable(Level.FINE)) { - logger.fine("Bundle is already started: " + string(launcherBundle, false)); - } - - // Start all our bundles for now to help diagnose any class loading issues - // for (Bundle bundle: bundleContext.getBundles()) { - // if (bundle.getSymbolicName().startsWith("org.apache.tuscany.sca")) { - // if ((bundle.getState() & Bundle.ACTIVE) == 0) { - // if (logger.isLoggable(Level.FINE)) { - // logger.fine("Starting bundle: " + string(bundle, false)); - // } - // try { - // //bundle.start(); - // } catch (Exception e) { - // logger.log(Level.SEVERE, e.getMessage(), e); - // // throw e; - // } - // if (logger.isLoggable(Level.FINE)) { - // logger.fine("Bundle: " + string(bundle, false)); - // } - // } - // } - // } - // logger.fine("Tuscany bundles are started in " + (System.currentTimeMillis() - activateStart) + " ms."); - return bundleContext; - - } catch (Exception e) { - throw new IllegalStateException(e); - } - } - - public Bundle installAsBundle(Collection jarFiles, String libraryBundleName) throws IOException, - BundleException { - // Install a single 'library' bundle for the third-party JAR files - Bundle libraryBundle = allBundles.get(libraryBundleName); - if (libraryBundle == null) { - InputStream library = thirdPartyLibraryBundle(jarFiles, libraryBundleName, null); - libraryBundle = bundleContext.installBundle(libraryBundleName, library); - allBundles.put(libraryBundleName, libraryBundle); - installedBundles.add(libraryBundle); - } else { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Third-party library bundle is already installed: " + string(libraryBundle, false)); - } - } - return libraryBundle; - } - - public void installBundle(URL bundleFile, String bundleName) throws MalformedURLException, BundleException { - if (bundleName == null) { - try { - bundleName = bundleName(file(bundleFile)); - } catch (IOException e) { - bundleName = null; - } - } - Bundle bundle = allBundles.get(bundleName); - if (bundle == null) { - long installStart = currentTimeMillis(); - String location = bundleFile.toString(); - if ("file".equals(bundleFile.getProtocol())) { - File target = file(bundleFile); - // Use a special "reference" scheme to install the bundle as a reference - // instead of copying the bundle - location = "reference:file:/" + target.getPath(); - } - bundle = bundleContext.installBundle(location); - if (logger.isLoggable(Level.FINE)) { - logger.fine("Bundle installed in " + (currentTimeMillis() - installStart) - + " ms: " - + string(bundle, false)); - } - allBundles.put(bundleName, bundle); - installedBundles.add(bundle); - } - } - - public Bundle installAsBundle(URL jarFile, String symbolicName) throws IOException, BundleException { - if (symbolicName == null) { - symbolicName = LAUNCHER_EQUINOX_LIBRARIES + "." + artifactId(jarFile); - } - Bundle bundle = allBundles.get(symbolicName); - if (bundle == null) { - String version = jarVersion(jarFile); - if (logger.isLoggable(Level.FINE)) { - logger.fine("Installing third-party jar as bundle: " + jarFile); - } - InputStream is = thirdPartyLibraryBundle(Collections.singleton(jarFile), symbolicName, version); - bundle = bundleContext.installBundle(symbolicName, is); - allBundles.put(symbolicName, bundle); - installedBundles.add(bundle); - } - return bundle; - } - - private Set findBundleLocations() throws FileNotFoundException, URISyntaxException, MalformedURLException { - if (bundleLocations == null) { - if (!startedEclipse) { - - // Use classpath entries from a distribution if there is one and the modules - // directories available in a dev environment for example - bundleLocations = runtimeClasspathEntries(true, false, true); - } else { - - // Use classpath entries from a distribution if there is one and the classpath - // entries on the current application's classloader - bundleLocations = runtimeClasspathEntries(true, true, false); - } - } - return bundleLocations; - } - - /** - * Stop the Equinox host. - */ - public void stop() { - try { - - // Uninstall all the bundles we've installed - for (int i = installedBundles.size() - 1; i >= 0; i--) { - Bundle bundle = installedBundles.get(i); - try { - if (logger.isLoggable(Level.FINE)) { - logger.fine("Uninstalling bundle: " + string(bundle, false)); - } - bundle.uninstall(); - } catch (Exception e) { - logger.log(Level.SEVERE, e.getMessage(), e); - } - } - installedBundles.clear(); - - // Shutdown Eclipse if we started it ourselves - if (startedEclipse) { - startedEclipse = false; - EclipseStarter.shutdown(); - } - - } catch (Exception e) { - throw new IllegalStateException(e); - } - } - - public void setBundleLocations(Set bundleLocations) { - this.bundleLocations = bundleLocations; - } - -} diff --git a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherException.java b/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherException.java deleted file mode 100644 index b9bb70b5d7..0000000000 --- a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherException.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 org.apache.tuscany.sca.node.equinox.launcher; - - -/** - * Denotes an error launching an SCA domain manager or node. - * - * @version $Rev$ $Date$ - */ -public class LauncherException extends Exception { - private static final long serialVersionUID = 4581189418849190567L; - - public LauncherException() { - super(); - } - - /** - * @param message - * @param cause - */ - public LauncherException(String message, Throwable cause) { - super(message, cause); - } - - /** - * @param message - */ - public LauncherException(String message) { - super(message); - } - - /** - * @param cause - */ - public LauncherException(Throwable cause) { - super(cause); - } -} diff --git a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeDaemonLauncher.java b/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeDaemonLauncher.java deleted file mode 100644 index aeb29c0789..0000000000 --- a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeDaemonLauncher.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * 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 org.apache.tuscany.sca.node.equinox.launcher; - -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.nodeDaemon; - -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * A launcher for the SCA Node daemon. - * - * @version $Rev$ $Date$ - */ -public class NodeDaemonLauncher { - - static final Logger logger = Logger.getLogger(NodeDaemonLauncher.class.getName()); - - /** - * Constructs a new node daemon launcher. - */ - private NodeDaemonLauncher() { - } - - /** - * Returns a new launcher instance. - * - * @return a new launcher instance - */ - public static NodeDaemonLauncher newInstance() { - return new NodeDaemonLauncher(); - } - - /** - * Creates a new node daemon. - * - * @param - * @return a new node daemon - * @throws LauncherException - */ - public T createNodeDaemon() throws LauncherException { - return (T)nodeDaemon(); - } - - public static void main(String[] args) throws Exception { - logger.info("Apache Tuscany SCA Node Daemon is starting..."); - - // Create a node launcher - NodeDaemonLauncher launcher = newInstance(); - - EquinoxHost equinox = null; - Object node = null; - ShutdownThread shutdown = null; - try { - - // Start the OSGi host - equinox = new EquinoxHost(); - equinox.start(); - - // Start the node - node = launcher.createNodeDaemon(); - try { - node.getClass().getMethod("start").invoke(node); - } catch (Exception e) { - logger.log(Level.SEVERE, "SCA Node Daemon could not be started", e); - throw e; - } - logger.info("SCA Node Daemon is now started."); - - // Install a shutdown hook - shutdown = new ShutdownThread(node, equinox); - Runtime.getRuntime().addShutdownHook(shutdown); - - logger.info("Press enter to shutdown."); - try { - System.in.read(); - } catch (IOException e) { - - // Wait forever - Object lock = new Object(); - synchronized(lock) { - lock.wait(); - } - } - } finally { - - // Remove the shutdown hook - if (shutdown != null) { - Runtime.getRuntime().removeShutdownHook(shutdown); - } - - // Stop the node - if (node != null) { - stopNode(node); - } - if (equinox != null) { - equinox.stop(); - } - } - } - - /** - * Stop the given node. - * - * @param node - * @throws Exception - */ - private static void stopNode(Object node) throws Exception { - try { - node.getClass().getMethod("stop").invoke(node); - logger.info("SCA Node Daemon is now stopped."); - } catch (Exception e) { - logger.log(Level.SEVERE, "SCA Node Daemon could not be stopped", e); - throw e; - } - } - - private static class ShutdownThread extends Thread { - private Object node; - private EquinoxHost equinox; - - public ShutdownThread(Object node, EquinoxHost equinox) { - super(); - this.node = node; - this.equinox = equinox; - } - - @Override - public void run() { - try { - stopNode(node); - } catch (Exception e) { - // Ignore - } - try { - equinox.stop(); - } catch (Exception e) { - // Ignore - } - } - } -} diff --git a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher.java b/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher.java deleted file mode 100644 index 04d77bcdd5..0000000000 --- a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher.java +++ /dev/null @@ -1,327 +0,0 @@ -/* - * 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 org.apache.tuscany.sca.node.equinox.launcher; - -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.node; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.CommandLineParser; -import org.apache.commons.cli.HelpFormatter; -import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.PosixParser; -import org.osgi.framework.BundleContext; - -/** - * A launcher for SCA nodes. - * - * Agruments: - * [-config ]: The configuration folder for Equinox - * [-c ]: The composite URI - * [-t ]: Time to live in milliseconds before the node is started - * contribution1 ... contributionN: A list of contribution files or URLs - * - * @version $Rev$ $Date$ - */ -public class NodeLauncher { - - static final Logger logger = Logger.getLogger(NodeLauncher.class.getName()); - private EquinoxHost equinoxHost; - private BundleContext bundleContext; - - /** - * Constructs a new node launcher. - */ - private NodeLauncher() { - equinoxHost = new EquinoxHost(); - bundleContext = equinoxHost.start(); - } - - /** - * Returns a new launcher instance. - * - * @return a new launcher instance - */ - public static NodeLauncher newInstance() { - return new NodeLauncher(); - } - - /** - * Creates a new SCA node from the configuration URL - * - * @param configurationURL the URL of the node configuration which is the ATOM feed - * that contains the URI of the composite and a collection of URLs for the contributions - * - * @return a new SCA node. - * @throws LauncherException - */ - public T createNode(String configurationURL) throws LauncherException { - return (T)node(configurationURL, null, null, null, bundleContext); - } - - /** - * Creates a new SCA OSGi Node. - * - * @param compositeURI the URI of the composite to use - * @param contributions the URI of the contributions that provides the composites and related - * artifacts. If the list is empty, then we will use the thread context classloader to discover - * the contribution on the classpath - * - * @return a new SCA node. - * @throws LauncherException - */ - public T createNode(String compositeURI, Contribution... contributions) throws LauncherException { - return (T)node(null, compositeURI, null, contributions, bundleContext); - } - - /** - * Creates a new SCA OSGi Node. - * - * @param compositeURI the URI of the composite to use - * @param compositeContent the XML content of the composite to use - * @param contributions the URI of the contributions that provides the composites and related artifacts - * @return a new SCA node. - * @throws LauncherException - */ - public T createNode(String compositeURI, String compositeContent, Contribution... contributions) - throws LauncherException { - return (T)node(null, compositeURI, compositeContent, contributions, bundleContext); - } - - public static void main(String[] args) throws Exception { - CommandLineParser parser = new PosixParser(); - Options options = getCommandLineOptions(); - CommandLine cli = parser.parse(options, args); - - Object node = null; - ShutdownThread shutdown = null; - EquinoxHost equinox = null; - try { - - if (cli.hasOption("config")) { - System.setProperty("osgi.configuration.area", cli.getOptionValue("config")); - } - while (true) { - if (cli.hasOption("node")) { - // Create a node from a configuration URI - String configurationURI = cli.getOptionValue("node"); - logger.info("SCA Node configuration: " + configurationURI); - - // Create a node launcher - NodeLauncher launcher = newInstance(); - equinox = launcher.equinoxHost; - - node = launcher.createNode(configurationURI); - } else { - // Create a node from a composite URI and a contribution location - String compositeURI = cli.getOptionValue("composite"); - List contribs = cli.getArgList(); - Contribution[] contributions = null; - if (!contribs.isEmpty()) { - contributions = new Contribution[contribs.size()]; - int index = 0; - for (String contrib : contribs) { - logger.info("SCA contribution: " + contrib); - URL url = null; - try { - url = new URL(contrib); - } catch (MalformedURLException e) { - url = new File(contrib).toURI().toURL(); - } - contributions[index] = new Contribution("contribution-" + index, url.toString()); - index++; - } - } else { - HelpFormatter formatter = new HelpFormatter(); - formatter.setSyntaxPrefix("Usage: "); - formatter.printHelp("java " + NodeLauncher.class.getName() - + " [-config ]" - + " [-c ]" - + " [-t ]" - + " contribution1 ... contributionN", options); - return; - } - // Create a node launcher - logger.info("SCA composite: " + compositeURI); - NodeLauncher launcher = newInstance(); - equinox = launcher.equinoxHost; - node = launcher.createNode(compositeURI, contributions); - } - - logger.info("Apache Tuscany SCA Node is starting..."); - - // Start the node - try { - node.getClass().getMethod("start").invoke(node); - } catch (Exception e) { - logger.log(Level.SEVERE, "SCA Node could not be started", e); - throw e; - } - logger.info("SCA Node is now started."); - - // Install a shutdown hook - shutdown = new ShutdownThread(node, equinox); - Runtime.getRuntime().addShutdownHook(shutdown); - - long ttl = Long.parseLong(cli.getOptionValue("ttl", "-1")); - if (ttl >= 0) { - logger.info("Waiting for " + ttl + " milliseconds ..."); - Thread.sleep(ttl); - break; // Exit - } - - // Wait until the "Enter" is pressed - logger.info("Press 'q' to quit, 'r' to restart."); - int k = 0; - try { - while ((k != 'q') && (k != 'r')) { - k = System.in.read(); - } - } catch (IOException e) { - - // Wait forever - Object lock = new Object(); - synchronized (lock) { - lock.wait(); - } - } - - // Stop the node - if (node != null) { - Object n = node; - node = null; - stopNode(n); - } - - // Quit - if (k == 'q') { - break; - } - - } - } finally { - - // Remove the shutdown hook - if (shutdown != null) { - Runtime.getRuntime().removeShutdownHook(shutdown); - } - - // Stop the node - if (node != null) { - destroyNode(node); - } - if (equinox != null) { - equinox.stop(); - } - } - } - - static Options getCommandLineOptions() { - Options options = new Options(); - Option opt1 = new Option("c", "composite", true, "URI for the composite"); - opt1.setArgName("compositeURI"); - options.addOption(opt1); - Option opt2 = new Option("n", "node", true, "URI for the node configuration"); - opt2.setArgName("nodeConfigurationURI"); - options.addOption(opt2); - Option opt3 = new Option("config", "configuration", true, "Configuration"); - opt3.setArgName("equinoxConfiguration"); - options.addOption(opt3); - Option opt4 = new Option("t", "ttl", true, "Time to live"); - opt4.setArgName("timeToLiveInMilliseconds"); - // opt4.setType(long.class); - options.addOption(opt4); - - return options; - } - - public void destroy() { - if (equinoxHost != null) { - equinoxHost.stop(); - bundleContext = null; - } - } - - /** - * Stop the given node. - * - * @param node - * @throws Exception - */ - private static void destroyNode(Object node) throws Exception { - try { - node.getClass().getMethod("stop").invoke(node); - node.getClass().getMethod("destroy").invoke(node); - logger.info("SCA Node is now stopped."); - } catch (Exception e) { - logger.log(Level.SEVERE, "SCA Node could not be stopped", e); - throw e; - } - } - - private static class ShutdownThread extends Thread { - private Object node; - private EquinoxHost equinox; - - public ShutdownThread(Object node, EquinoxHost equinox) { - super(); - this.node = node; - this.equinox = equinox; - } - - @Override - public void run() { - try { - destroyNode(node); - } catch (Exception e) { - // Ignore - } - try { - equinox.stop(); - } catch (Exception e) { - // Ignore - } - } - } - - /** - * Stop the given node. - * - * @param node - * @throws Exception - */ - private static void stopNode(Object node) throws Exception { - try { - node.getClass().getMethod("stop").invoke(node); - logger.info("SCA Node is now stopped."); - } catch (Exception e) { - logger.log(Level.SEVERE, "SCA Node could not be stopped", e); - throw e; - } - } -} diff --git a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher2.java b/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher2.java deleted file mode 100644 index fc299b3d53..0000000000 --- a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncher2.java +++ /dev/null @@ -1,217 +0,0 @@ -/* - * 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 org.apache.tuscany.sca.node.equinox.launcher; - -import static org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil.node; - -import java.io.File; -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.osgi.framework.BundleContext; - -/** - * A launcher for SCA nodes. - * - * @version $Rev: 720905 $ $Date: 2008-11-26 15:47:28 +0000 (Wed, 26 Nov 2008) $ - */ -public class NodeLauncher2 { - - static final Logger logger = Logger.getLogger(NodeLauncher2.class.getName()); - private EquinoxHost equinoxHost; - private BundleContext bundleContext; - - /** - * Constructs a new node launcher. - */ - private NodeLauncher2() { - equinoxHost = new EquinoxHost(); - bundleContext = equinoxHost.start(); - } - - /** - * Returns a new launcher instance. - * - * @return a new launcher instance - */ - public static NodeLauncher2 newInstance() { - return new NodeLauncher2(); - } - - /** - * Creates a new SCA node from the configuration URL - * - * @param configurationURL the URL of the node configuration which is the ATOM feed - * that contains the URI of the composite and a collection of URLs for the contributions - * - * @return a new SCA node. - * @throws LauncherException - */ - public T createNode(String configurationURL) throws LauncherException { - return (T)node(configurationURL, null, null, null, bundleContext); - } - - /** - * Creates a new SCA OSGi Node. - * - * @param compositeURI the URI of the composite to use - * @param contributions the URI of the contributions that provides the composites and related - * artifacts. If the list is empty, then we will use the thread context classloader to discover - * the contribution on the classpath - * - * @return a new SCA node. - * @throws LauncherException - */ - public T createNode(String compositeURI, Contribution... contributions) throws LauncherException { - return (T)node(null, compositeURI, null, contributions, bundleContext); - } - - /** - * Creates a new SCA OSGi Node. - * - * @param compositeURI the URI of the composite to use - * @param compositeContent the XML content of the composite to use - * @param contributions the URI of the contributions that provides the composites and related artifacts - * @return a new SCA node. - * @throws LauncherException - */ - public T createNode(String compositeURI, String compositeContent, Contribution... contributions) - throws LauncherException { - return (T)node(null, compositeURI, compositeContent, contributions, bundleContext); - } - - public static void main(String[] args) throws Exception { - logger.info("Apache Tuscany SCA Node is starting..."); - - // Create a node launcher - NodeLauncher2 launcher = newInstance(); - - EquinoxHost equinox = launcher.equinoxHost; - Object node = null; - ShutdownThread shutdown = null; - try { - - Contribution[] contributions = new Contribution[args.length]; - for (int i=0; i bootstrapClass = bundle.loadClass(NODE_IMPLEMENTATION_LAUNCHER_BOOTSTRAP); - - Object bootstrap; - if (configurationURI != null) { - - // Construct the node with a configuration URI - bootstrap = bootstrapClass.getConstructor(String.class).newInstance(configurationURI); - - } else if (compositeContent != null) { - - // Construct the node with a composite URI, the composite content and - // the URIs and locations of a list of contributions - Constructor constructor = - bootstrapClass.getConstructor(String.class, String.class, String[].class, String[].class); - String[] uris = new String[contributions.length]; - String[] locations = new String[contributions.length]; - for (int i = 0; i < contributions.length; i++) { - uris[i] = contributions[i].getURI(); - locations[i] = contributions[i].getLocation(); - } - bootstrap = constructor.newInstance(compositeURI, compositeContent, uris, locations); - - } else { - - // Construct the node with a composite URI and the URIs and - // locations of a list of contributions - Constructor constructor = - bootstrapClass.getConstructor(String.class, String[].class, String[].class); - String[] uris = new String[contributions.length]; - String[] locations = new String[contributions.length]; - for (int i = 0; i < contributions.length; i++) { - uris[i] = contributions[i].getURI(); - locations[i] = contributions[i].getLocation(); - } - bootstrap = constructor.newInstance(compositeURI, uris, locations); - } - - // Get the node instance - Object node = bootstrapClass.getMethod("getNode").invoke(bootstrap); - - // If the SCANodeFactory interface is available in the current classloader, create - // an SCANode proxy around the node we've just create - try { - Class type = Class.forName(NODE_FACTORY); - type = type.getDeclaredClasses()[0]; - return type.getMethod("createProxy", Class.class, Object.class).invoke(null, type, node); - } catch (ClassNotFoundException e) { - // Ignore - } - return node; - - } catch (Exception e) { - NodeLauncher.logger.log(Level.SEVERE, "SCA Node could not be created", e); - throw new LauncherException(e); - } - } - - /** - * Creates a new node daemon. - * - * @throws LauncherException - */ - static Object nodeDaemon() throws LauncherException { - ClassLoader tccl = Thread.currentThread().getContextClassLoader(); - try { - - // Use Java reflection to create the node daemon as only the runtime class - // loader knows the runtime classes required by the node - String className = NODE_IMPLEMENTATION_DAEMON_BOOTSTRAP; - Class bootstrapClass; - bootstrapClass = Class.forName(className, false, tccl); - Object bootstrap = bootstrapClass.getConstructor().newInstance(); - - Object nodeDaemon = bootstrapClass.getMethod("getNode").invoke(bootstrap); - return nodeDaemon; - - } catch (Exception e) { - NodeDaemonLauncher.logger.log(Level.SEVERE, "SCA Node Daemon could not be created", e); - throw new LauncherException(e); - } finally { - Thread.currentThread().setContextClassLoader(tccl); - } - } - - /** - * Creates a new domain manager. - * - * @throws LauncherException - */ - static Object domainManager(String rootDirectory) throws LauncherException { - ClassLoader tccl = Thread.currentThread().getContextClassLoader(); - try { - - // Use Java reflection to create the node daemon as only the runtime class - // loader knows the runtime classes required by the node - String className = DOMAIN_MANAGER_LAUNCHER_BOOTSTRAP; - Class bootstrapClass; - bootstrapClass = Class.forName(className, false, tccl); - Constructor constructor = bootstrapClass.getConstructor(String.class); - Object bootstrap = constructor.newInstance(rootDirectory); - - Object domainManager = bootstrapClass.getMethod("getNode").invoke(bootstrap); - return domainManager; - - } catch (Exception e) { - DomainManagerLauncher.logger.log(Level.SEVERE, "SCA Domain Manager could not be created", e); - throw new LauncherException(e); - } finally { - Thread.currentThread().setContextClassLoader(tccl); - } - } - - /** - * starting with -, then some digits, then . or - or _, then some digits again - * - */ - private static Pattern pattern = Pattern.compile("-(\\d)+((\\.|-|_)(\\d)+)*"); - - /** - * Returns the version number to use for the given JAR file. - * - * @param jarFile - * @return - */ - static String jarVersion(URL jarFile) { - String name = jarFile.getFile(); - int index = name.lastIndexOf('/'); - if (index != -1) { - // Find the last segment - name = name.substring(index + 1); - } - index = name.lastIndexOf('.'); - if (index != -1) { - // Trim the extension - name = name.substring(0, index); - } - - Matcher matcher = pattern.matcher(name); - String version = "0.0.0"; - if (matcher.find()) { - version = matcher.group(); - version = version.substring(1); - } - return version; - } - - static String artifactId(URL jarFile) { - String name = jarFile.getFile(); - int index = name.lastIndexOf('/'); - if (index != -1) { - // Find the last segment - name = name.substring(index + 1); - } - index = name.lastIndexOf('.'); - if (index != -1) { - // Trim the extension - name = name.substring(0, index); - } - - Matcher matcher = pattern.matcher(name); - if (matcher.find()) { - return name.substring(0, matcher.start()); - } else { - return name; - } - } - - /** - * Add the packages found in the given JAR to a set. - * - * @param jarFile - * @param packages - * @throws IOException - */ - private static void addPackages(URL jarFile, Set packages, String version) throws IOException { - if (version == null) { - version = ";version=" + jarVersion(jarFile); - } else { - version = ";version=" + version; - } - File file = file(jarFile); - if (file.isDirectory()) { - List classFiles = listClassFiles(file); - for (String cls : classFiles) { - int index = cls.lastIndexOf('/'); - if (index == -1) { - // Default package cannot be exported - continue; - } - String pkg = cls.substring(0, index); - pkg = pkg.replace('/', '.') + version; - packages.add(pkg); - } - } else if (file.isFile()) { - ZipInputStream is = new ZipInputStream(new FileInputStream(file)); - ZipEntry entry; - while ((entry = is.getNextEntry()) != null) { - String entryName = entry.getName(); - if (!entry.isDirectory() && entryName != null - && entryName.length() > 0 - && !entryName.startsWith(".") - && entryName.endsWith(".class") // Exclude resources from Export-Package - && entryName.lastIndexOf("/") > 0) { - String pkg = entryName.substring(0, entryName.lastIndexOf("/")).replace('/', '.') + version; - packages.add(pkg); - } - } - is.close(); - } - } - - private static List listClassFiles(File directory) { - List artifacts = new ArrayList(); - traverse(artifacts, directory, directory); - return artifacts; - } - - /** - * Recursively traverse a root directory - * - * @param fileList - * @param file - * @param root - * @throws IOException - */ - private static void traverse(List fileList, File file, File root) { - if (file.isFile() && file.getName().endsWith(".class")) { - fileList.add(root.toURI().relativize(file.toURI()).toString()); - } else if (file.isDirectory()) { - String uri = root.toURI().relativize(file.toURI()).toString(); - if (uri.endsWith("/")) { - uri = uri.substring(0, uri.length() - 1); - } - fileList.add(uri); - - File[] files = file.listFiles(); - for (File f : files) { - if (!f.getName().startsWith(".")) { - traverse(fileList, f, root); - } - } - } - } - - /** - * Generate a manifest from a list of third-party JAR files. - * - * @param jarFiles - * @param bundleSymbolicName The Bundle-SymbolicName - * @param bundleVersion The Bundle-Version - * @return - * @throws IllegalStateException - */ - static private Manifest thirdPartyLibraryBundleManifest(Collection jarFiles, - String bundleSymbolicName, - String bundleVersion) throws IllegalStateException { - try { - - // List exported packages and bundle classpath entries - StringBuffer classpath = new StringBuffer(); - StringBuffer exports = new StringBuffer(); - StringBuffer imports = new StringBuffer(); - Set packages = new HashSet(); - - for (URL jarFile : jarFiles) { - addPackages(jarFile, packages, bundleVersion); - classpath.append("\"external:"); - classpath.append(file(jarFile).getPath().replace(File.separatorChar, '/')); - classpath.append("\","); - } - - Set importPackages = new HashSet(); - for (String pkg : packages) { - - String importPackage = pkg; - int index = pkg.indexOf(';'); - if (index != -1) { - importPackage = pkg.substring(0, index); - } - if (!importPackages.contains(importPackage)) { - imports.append(importPackage); - imports.append(','); - importPackages.add(importPackage); - exports.append(pkg); - exports.append(','); - } else { - logger.warning("Duplicate package skipped: " + pkg); - } - } - - // Create a manifest - Manifest manifest = new Manifest(); - Attributes attributes = manifest.getMainAttributes(); - attributes.putValue("Manifest-Version", "1.0"); - attributes.putValue(BUNDLE_MANIFESTVERSION, "2"); - - if (bundleVersion == null) { - bundleVersion = "0.0.0"; - } - attributes.putValue(Constants.BUNDLE_VERSION, bundleVersion); - if (bundleSymbolicName == null) { - bundleSymbolicName = LAUNCHER_EQUINOX_LIBRARIES; - } - attributes.putValue(BUNDLE_SYMBOLICNAME, bundleSymbolicName); - if (exports.length() > 0) { - attributes.putValue(EXPORT_PACKAGE, exports.substring(0, exports.length() - 1)); - } - if (imports.length() > 0) { - attributes.putValue(IMPORT_PACKAGE, imports.substring(0, imports.length() - 1)); - } - if (classpath.length() > 0) { - attributes.putValue(BUNDLE_CLASSPATH, classpath.substring(0, classpath.length() - 1)); - } - attributes.putValue(DYNAMICIMPORT_PACKAGE, "*"); - - return manifest; - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - /** - * Generates a library bundle from a list of third-party JARs. - * - * @param jarFiles - * @param bundleSymbolicName The Bundle-SymbolicName - * @param bundleVersion The Bundle-Version - * @return - * @throws IOException - */ - static InputStream thirdPartyLibraryBundle(Collection jarFiles, - String bundleSymbolicName, - String bundleVersion) throws IOException { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - Manifest mf = thirdPartyLibraryBundleManifest(jarFiles, bundleSymbolicName, bundleVersion); - JarOutputStream jos = new JarOutputStream(bos, mf); - jos.close(); - return new ByteArrayInputStream(bos.toByteArray()); - } - - /** - * Returns the location of this bundle. - * - * @return - * @throws IOException - */ - static String thisBundleLocation() throws IOException, URISyntaxException { - String resource = NodeLauncherUtil.class.getName().replace('.', '/') + ".class"; - URL url = NodeLauncherUtil.class.getClassLoader().getResource(resource); - if (url == null) { - throw new FileNotFoundException(resource); - } - URI uri = toURI(url); - - String scheme = uri.getScheme(); - if (scheme.equals("jar")) { - String path = uri.toString().substring(4); - int i = path.indexOf("!/"); - path = path.substring(0, i); - return path; - } else { - String path = uri.toString(); - path = path.substring(0, path.length() - resource.length()); - return path; - } - } - - static URI toURI(URL url) { - File file = file(url); - if (file != null) { - return file.toURI(); - } else { - try { - return url.toURI(); - } catch (URISyntaxException e) { - throw new IllegalArgumentException(e); - } - } - } - - /** - * Returns the location of this bundle. - * - * @param bundle - * @return - * @throws IOException - */ - static String thisBundleLocation(Bundle bundle) throws IOException, URISyntaxException, ClassNotFoundException { - String resource = NodeLauncherUtil.class.getName(); - Class clazz = bundle.loadClass(NodeLauncherUtil.class.getName()); - URL url = clazz.getProtectionDomain().getCodeSource().getLocation(); - if (url == null) { - throw new FileNotFoundException(resource); - } - URI uri = toURI(url); - - String scheme = uri.getScheme(); - if (scheme.equals("jar")) { - String path = uri.toString().substring(4); - int i = path.indexOf("!/"); - path = path.substring(0, i); - return path; - } else { - String path = uri.toString(); - //path = path.substring(0, path.length() - resource.length()); - return path; - } - } - - /** - * Install the given bundle. - * - * @param bundleContext - * @param location - * @throws BundleException - * @throws IOException - */ - static void fixupBundle(String location) throws BundleException, IOException { - File target = file(new URL(location)); - location = target.toURI().toString(); - - // For development mode, copy the MANIFEST.MF file to the bundle location as it's - // initially outside of target/classes, at the root of the project. - if (location.endsWith("/target/classes/")) { - File targetManifest = new File(target, "META-INF/MANIFEST.MF"); - File sourceManifest = new File(target.getParentFile().getParentFile(), "META-INF/MANIFEST.MF"); - targetManifest.getParentFile().mkdirs(); - OutputStream os = new FileOutputStream(targetManifest); - InputStream is = new FileInputStream(sourceManifest); - byte[] buf = new byte[2048]; - for (;;) { - int l = is.read(buf); - if (l == -1) { - break; - } - os.write(buf, 0, l); - } - is.close(); - os.close(); - } - } - - /** - * Returns a string representation of the given bundle. - * - * @param b - * @param verbose - * @return - */ - static String string(Bundle bundle, boolean verbose) { - StringBuffer sb = new StringBuffer(); - sb.append(bundle.getBundleId()).append(" ").append(bundle.getSymbolicName()); - int s = bundle.getState(); - if ((s & Bundle.UNINSTALLED) != 0) { - sb.append(" UNINSTALLED"); - } - if ((s & Bundle.INSTALLED) != 0) { - sb.append(" INSTALLED"); - } - if ((s & Bundle.RESOLVED) != 0) { - sb.append(" RESOLVED"); - } - if ((s & Bundle.STARTING) != 0) { - sb.append(" STARTING"); - } - if ((s & Bundle.STOPPING) != 0) { - sb.append(" STOPPING"); - } - if ((s & Bundle.ACTIVE) != 0) { - sb.append(" ACTIVE"); - } - - if (verbose) { - sb.append(" ").append(bundle.getLocation()); - sb.append(" ").append(bundle.getHeaders()); - } - return sb.toString(); - } - - /** - * Returns the name of a bundle, or null if the given file is not a bundle. - * - * @param file - * @return - * @throws IOException - */ - static String bundleName(File file) throws IOException { - if (!file.exists()) { - return null; - } - String bundleName = null; - if (file.isDirectory()) { - File mf = new File(file, "META-INF/MANIFEST.MF"); - if (mf.isFile()) { - Manifest manifest = new Manifest(new FileInputStream(mf)); - bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME); - } else { - if (file.toURI().getPath().endsWith("/target/classes/")) { - // Development mode, MANIFEST.MF is outside the bundle location - mf = new File(file.getParentFile().getParentFile(), "META-INF/MANIFEST.MF"); - if (mf.isFile()) { - Manifest manifest = new Manifest(new FileInputStream(mf)); - bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME); - } - } - } - } else { - JarFile jar = new JarFile(file, false); - Manifest manifest = jar.getManifest(); - if (manifest != null) { - bundleName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME); - } - jar.close(); - } - if (bundleName == null) { - return bundleName; - } - int sc = bundleName.indexOf(';'); - if (sc != -1) { - bundleName = bundleName.substring(0, sc); - } - return bundleName; - } - - /** - * Collect JAR files in the given directory. - * - * @param directory - * @param urls - * @param filter - * @throws MalformedURLException - */ - private static void collectClasspathEntries(File directory, Set urls, FilenameFilter filter, boolean recursive) - throws MalformedURLException { - File[] files = directory.listFiles(filter); - if (files != null) { - int count = 0; - for (File file : files) { - if (recursive && file.isDirectory()) { - collectClasspathEntries(file, urls, filter, recursive); - } else { - urls.add(file.toURI().toURL()); - count++; - } - } - if (count != 0) { - logger.info("Runtime classpath: " + count - + " JAR" - + (count > 1 ? "s" : "") - + " from " - + directory.toString()); - } - } - } - - /** - * Collect development .../ target/classes directories in the given directory. - * - * @param directory - * @param urls - * @param filter - * @throws MalformedURLException - */ - private static void collectTargetClassesClasspathEntries(File directory, Set urls, FilenameFilter filter) - throws MalformedURLException { - File[] files = directory.listFiles(); - if (files != null) { - int count = 0; - for (File file : files) { - if (!file.isDirectory()) { - continue; - } - File target = new File(file, "target"); - if (!target.isDirectory()) { - continue; - } - File classes = new File(target, "classes"); - if (classes.isDirectory() && filter.accept(target, "classes")) { - urls.add(classes.toURI().toURL()); - count++; - } - } - if (count != 0) { - logger.info("Runtime classpath: " + count - + " classes folder" - + (count > 1 ? "s" : "") - + " from " - + directory.toString()); - } - } - } - - /** - * Collect JAR files under the given distribution directory. - * - * @param directory - * @param jarDirectoryURLs - * @param jarURLs - * @param filter - * @throws MalformedURLException - */ - private static void collectDistributionClasspathEntries(String directory, - Set jarDirectoryURLs, - Set jarURLs, - FilenameFilter filter) throws MalformedURLException { - File directoryFile = new File(directory); - URL directoryURL = directoryFile.toURI().toURL(); - if (!jarDirectoryURLs.contains(directoryURL) && directoryFile.exists()) { - - // Collect files under the given directory - jarDirectoryURLs.add(directoryURL); - collectClasspathEntries(directoryFile, jarURLs, filter, false); - - // Collect files under /modules - File modulesDirectory = new File(directoryFile, "modules"); - URL modulesDirectoryURL = modulesDirectory.toURI().toURL(); - if (!jarDirectoryURLs.contains(modulesDirectoryURL) && modulesDirectory.exists()) { - jarDirectoryURLs.add(modulesDirectoryURL); - collectClasspathEntries(modulesDirectory, jarURLs, filter, true); - } - - // Collect files under /lib - File libDirectory = new File(directoryFile, "lib"); - URL libDirectoryURL = libDirectory.toURI().toURL(); - if (!jarDirectoryURLs.contains(libDirectoryURL) && libDirectory.exists()) { - jarDirectoryURLs.add(libDirectoryURL); - collectClasspathEntries(libDirectory, jarURLs, filter, true); - } - } - } - - /** - * Determine the Tuscany runtime classpath entries. - * - * @param useDistribution - * @param useAppClasspath - * @param useModulesDirectory - * @return - */ - static Set runtimeClasspathEntries(boolean useDistribution, - boolean useAppClasspath, - boolean useModulesDirectory) throws FileNotFoundException, - URISyntaxException, MalformedURLException { - - // Build list of runtime JARs - Set jarDirectoryURLs = new HashSet(); - Set jarURLs = new HashSet(); - - // Determine the path to the launcher class - URI uri; - try { - uri = codeLocation(NodeLauncherUtil.class); - } catch (Exception e) { - uri = URI.create(""); - } - - // If the launcher class is in a JAR, add all runtime JARs from directory containing - // that JAR (e.g. the Tuscany modules directory) as well as the ../modules and - // ../lib directories - if (uri.getPath().endsWith(".jar")) { - if (useDistribution) { - - File file = new File(uri); - if (file.exists()) { - File jarDirectory = file.getParentFile(); - if (jarDirectory != null && jarDirectory.exists()) { - - // Collect JAR files from the directory containing the input JAR - // (e.g. the Tuscany modules directory) - URL jarDirectoryURL = jarDirectory.toURI().toURL(); - jarDirectoryURLs.add(jarDirectoryURL); - collectClasspathEntries(jarDirectory, jarURLs, new StandAloneJARFileNameFilter(), true); - - File homeDirectory = jarDirectory.getParentFile(); - if (homeDirectory != null && homeDirectory.exists()) { - collectDistributionClasspathEntries(homeDirectory.getAbsolutePath(), - jarDirectoryURLs, - jarURLs, - new StandAloneJARFileNameFilter()); - } - } - } - } - } else if (uri.getPath().endsWith("/target/classes/")) { - - // Development mode, we're running off classes in a workspace - // and not from Maven surefire, collect all bundles in the workspace - if (useModulesDirectory) { - ClassLoader cl = NodeLauncherUtil.class.getClassLoader(); - if (!cl.getClass().getName().startsWith("org.apache.maven.surefire")) { - File file = new File(uri); - if (file.exists()) { - File moduleDirectory = file.getParentFile().getParentFile(); - if (moduleDirectory != null) { - File modulesDirectory = moduleDirectory.getParentFile(); - if (modulesDirectory != null && modulesDirectory.exists() - && modulesDirectory.getName().equals("modules")) { - collectDevelopmentClasspathEntries(modulesDirectory.getAbsolutePath(), - jarDirectoryURLs, - jarURLs, - new StandAloneDevelopmentClassesFileNameFilter()); - } - } - } - } - } - } - - // Look for a TUSCANY_HOME system property or environment variable - // Add all the JARs found under $TUSCANY_HOME, $TUSCANY_HOME/modules - // and $TUSCANY_HOME/lib - if (useDistribution) { - String home = getProperty(TUSCANY_HOME); - if (home != null && home.length() != 0) { - logger.info(TUSCANY_HOME + ": " + home); - collectDistributionClasspathEntries(home, jarDirectoryURLs, jarURLs, new StandAloneJARFileNameFilter()); - } - - // Look for a TUSCANY_PATH system property or environment variable - // Add all the JARs found under $TUSCANY_PATH, $TUSCANY_PATH/modules - // and $TUSCANY_PATH/lib - String ext = getProperty(TUSCANY_PATH); - if (ext != null && ext.length() != 0) { - logger.info(TUSCANY_PATH + ": " + ext); - String separator = getProperty("path.separator"); - for (StringTokenizer tokens = new StringTokenizer(ext, separator); tokens.hasMoreTokens();) { - collectDistributionClasspathEntries(tokens.nextToken(), - jarDirectoryURLs, - jarURLs, - new StandAloneJARFileNameFilter()); - } - } - } - - // Add the classpath entries from the current classloader - if (useAppClasspath) { - collectClassLoaderClasspathEntries(jarURLs, NodeLauncherUtil.class.getClassLoader()); - } - - return jarURLs; - - } - - /** - * Returns the JAR files on the classpath used by the given classloader. - * - * @param classLoader - * @return - */ - static List jarFilesOnClasspath(ClassLoader classLoader) { - Set entries = new HashSet(); - collectClassLoaderClasspathEntries(entries, classLoader); - return new ArrayList(entries); - } - - private static String getProperty(final String prop) { - return AccessController.doPrivileged(new PrivilegedAction() { - public String run() { - String value = System.getProperty(prop); - if (value == null || value.length() == 0) { - return System.getenv(prop); - } else { - return value; - } - } - }); - } - - /** - * Collect JARs on the classpath of a URLClassLoader. - * - * @param urls - * @param cl - */ - private static void collectClassLoaderClasspathEntries(Set urls, ClassLoader cl) { - if (cl == null) { - return; - } - - int count = urls.size(); - // Collect JARs from the URLClassLoader's classpath - if (cl instanceof URLClassLoader) { - URL[] jarURLs = ((URLClassLoader)cl).getURLs(); - if (jarURLs != null) { - for (URL jarURL : jarURLs) { - urls.add(jarURL); - try { - urls.addAll(manifestClassPath(jarURL)); - } catch (Exception e) { - logger.log(Level.SEVERE, e.getMessage(), e); - } - } - count = urls.size() - count; - - if (count != 0) { - logger.info("Runtime classpath: " + count - + " JAR" - + (count > 1 ? "s" : "") - + " from application classpath."); - } - } - } - } - - static Set manifestClassPath(URL jarFile) throws Exception { - Set urls = new HashSet(); - if (jarFile != null) { - Manifest mf = null; - if ("file".equals(jarFile.getProtocol())) { - File f = file(jarFile); - if (f.isDirectory()) { - File mfFile = new File(f, "META-INF/MANIFEST.MF"); - if (mfFile.isFile()) { - FileInputStream is = new FileInputStream(mfFile); - mf = new Manifest(is); - is.close(); - } - } else if (f.isFile()) { - JarInputStream jar = new JarInputStream(jarFile.openStream()); - mf = jar.getManifest(); - jar.close(); - } - } - if (mf != null) { - String cp = mf.getMainAttributes().getValue("Class-Path"); - if (cp != null) { - StringTokenizer st = new StringTokenizer(cp); - while (st.hasMoreTokens()) { - URL entry = new URL(jarFile.toURI().toURL(), st.nextToken()).toURI().toURL(); - urls.add(entry); - } - } - } - } - return urls; - } - - /** - * A file name filter used to filter JAR files. - */ - private static class StandAloneJARFileNameFilter implements FilenameFilter { - - public boolean accept(File dir, String name) { - name = name.toLowerCase(); - - if (new File(dir, name).isDirectory()) { - return true; - } - - // Filter out the Tomcat and Webapp hosts - if (name.startsWith("tuscany-host-tomcat") || name.startsWith("tuscany-host-webapp")) { - //FIXME This is temporary - return false; - } - - // Include JAR and MAR files - if (name.endsWith(".jar")) { - return true; - } - if (name.endsWith(".mar")) { - return true; - } - return false; - } - } - - /** - * A file name filter used to filter target/classes directories. - */ - private static class StandAloneDevelopmentClassesFileNameFilter implements FilenameFilter { - - public boolean accept(File dir, String name) { - name = name.toLowerCase(); - if (dir.getName().equals("target") && name.equals("classes")) { - - // Filter out the Tomcat and Webapp hosts - String dirPath = dir.getAbsolutePath(); - if (dirPath.endsWith("host-tomcat/target") || dirPath.endsWith("host-webapp/target")) { - //FIXME This is temporary - return false; - } - return true; - } - - // Filter out the Tomcat and Webapp hosts - if (name.startsWith("tuscany-host-tomcat") || name.startsWith("tuscany-host-webapp")) { - //FIXME This is temporary - return false; - } - - // Include JAR and MAR files - if (name.endsWith(".jar")) { - return true; - } - if (name.endsWith(".mar")) { - return true; - } - return false; - } - } - - /** - * A file name filter used to filter JAR files. - */ - private static class WebAppJARFileNameFilter extends StandAloneJARFileNameFilter { - - @Override - public boolean accept(File dir, String name) { - if (!super.accept(dir, name)) { - return false; - } - name = name.toLowerCase(); - - // Exclude servlet-api JARs - if (name.startsWith("servlet-api")) { - return false; - } - - // Exclude the Tomcat and Jetty hosts - if (name.startsWith("tuscany-host-tomcat") || name.startsWith("tuscany-host-jetty")) { - //FIXME This is temporary - return false; - } - - return true; - } - } - - /** - * Returns the File object representing the given URL. - * - * @param url - * @return - */ - static File file(URL url) { - if (url == null || !url.getProtocol().equals("file")) { - return null; - } else { - String filename = url.getFile().replace('/', File.separatorChar); - int pos = 0; - while ((pos = filename.indexOf('%', pos)) >= 0) { - if (pos + 2 < filename.length()) { - String hexStr = filename.substring(pos + 1, pos + 3); - char ch = (char)Integer.parseInt(hexStr, 16); - filename = filename.substring(0, pos) + ch + filename.substring(pos + 3); - } - } - return new File(filename); - } - } - - /** - * Returns the location of the classpath entry, JAR, WAR etc. containing the given class. - * - * @param clazz - * @return - */ - static private URI codeLocation(Class clazz) { - URL url = clazz.getProtectionDomain().getCodeSource().getLocation(); - return toURI(url); - } - - /** - * Collect JAR files under the given distribution directory. - * - * @param directory - * @param jarDirectoryURLs - * @param jarURLs - * @param filter - * @throws MalformedURLException - */ - private static void collectDevelopmentClasspathEntries(String directory, - Set jarDirectoryURLs, - Set jarURLs, - FilenameFilter filter) throws MalformedURLException { - File directoryFile = new File(directory); - URL directoryURL = directoryFile.toURI().toURL(); - if (!jarDirectoryURLs.contains(directoryURL) && directoryFile.exists()) { - - // Collect files under the given directory - jarDirectoryURLs.add(directoryURL); - collectTargetClassesClasspathEntries(directoryFile, jarURLs, filter); - - } - } - -} diff --git a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeMain.java b/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeMain.java deleted file mode 100644 index 4b4c4a8978..0000000000 --- a/sandbox/ant/sca/tags/2.0-M2/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeMain.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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 org.apache.tuscany.sca.node.equinox.launcher; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.CommandLineParser; -import org.apache.commons.cli.Option; -import org.apache.commons.cli.OptionGroup; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.PosixParser; - - -/** - * Main class for this JAR. - * With a "-nodeDaemon or -nd" this class launches the SCA Node Daemon. - * With a "-domainManager or -dm" argument it launches the SCA domain admin node. - * With any other argument it launches an SCA Node. - * - * @version $Rev$ $Date$ - */ -public class NodeMain { - - public static void main(String[] args) throws Exception { - CommandLineParser parser = new PosixParser(); - Options options = new Options(); - OptionGroup group = new OptionGroup(); - group.addOption(new Option("dm", "domainManager", false, "Domain Manager")); - group.addOption(new Option("nd", "nodeDaemon", false, "Node Domain")); - options.addOptionGroup(group); - - // Add options from NodeLauncher to avoid UnrecognizedOptionException - for (Object o : NodeLauncher.getCommandLineOptions().getOptions()) { - options.addOption((Option)o); - } - - CommandLine cli = parser.parse(options, args); - if (cli.hasOption("nd")) { - NodeDaemonLauncher.main(args); - } else if (cli.hasOption("dm")) { - DomainManagerLauncher.main(args); - } else { - NodeLauncher.main(args); - } - } -} -- cgit v1.2.3