You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2008/09/04 23:56:40 UTC
svn commit: r692269 - in /tuscany/java/sca/modules/node-launcher-equinox/src:
main/java/org/apache/tuscany/sca/node/equinox/launcher/
test/java/org/apache/tuscany/sca/node/equinox/launcher/
Author: rfeng
Date: Thu Sep 4 14:56:40 2008
New Revision: 692269
URL: http://svn.apache.org/viewvc?rev=692269&view=rev
Log:
Add the capability to find dependencies jars/folders from the URLClassLoader without building a mini distro
Modified:
tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/JarFileFinder.java
tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherBundleActivator.java
tuscany/java/sca/modules/node-launcher-equinox/src/test/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherTestCase.java
Modified: tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/JarFileFinder.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/JarFileFinder.java?rev=692269&r1=692268&r2=692269&view=diff
==============================================================================
--- tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/JarFileFinder.java (original)
+++ tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/JarFileFinder.java Thu Sep 4 14:56:40 2008
@@ -27,6 +27,7 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.net.URLClassLoader;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
@@ -267,6 +268,48 @@
return jarURLs;
}
+
+
+ /**
+ * Returns contribution JARs available on the classpath.
+ *
+ * @return
+ */
+ public static List<URL> getClassPathEntries(ClassLoader classLoader, boolean recursive) {
+ if (classLoader == null) {
+ classLoader = Thread.currentThread().getContextClassLoader();
+ }
+ Set<URL> entries = new HashSet<URL>();
+ list(entries, classLoader, recursive);
+ return new ArrayList<URL>(entries);
+ }
+
+ /**
+ * Collect JARs on the classpath of a URLClassLoader
+ * @param urls
+ * @param cl
+ */
+ private static void list(Set<URL> urls, ClassLoader cl, boolean recursive) {
+ if (cl == null) {
+ return;
+ }
+
+ // 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);
+ }
+ }
+ }
+
+ // Collect JARs from the parent ClassLoader
+ if (recursive) {
+ list(urls, cl.getParent(), recursive);
+ }
+ }
+
static String getProperty(final String prop) {
return AccessController.doPrivileged(new PrivilegedAction<String>() {
@@ -281,7 +324,7 @@
});
}
- private static File toFile(URL url) {
+ public static File toFile(URL url) {
if (url == null || !url.getProtocol().equals("file")) {
return null;
} else {
Modified: tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherBundleActivator.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherBundleActivator.java?rev=692269&r1=692268&r2=692269&view=diff
==============================================================================
--- tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherBundleActivator.java (original)
+++ tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherBundleActivator.java Thu Sep 4 14:56:40 2008
@@ -3,12 +3,11 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.net.URI;
import java.net.URL;
-import java.security.CodeSource;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -137,7 +136,12 @@
if (urls == null) {
File tuscanyInstallDir = findTuscanyInstallDir(bundleContext.getBundle());
- urls = JarFileFinder.findJarFiles(tuscanyInstallDir, new JarFileFinder.StandAloneJARFileNameFilter());
+ if (tuscanyInstallDir != null) {
+ urls =
+ JarFileFinder.findJarFiles(tuscanyInstallDir, new JarFileFinder.StandAloneJARFileNameFilter());
+ } else {
+ urls = JarFileFinder.getClassPathEntries(JarFileFinder.class.getClassLoader(), false);
+ }
}
for (URL url : urls) {
@@ -169,6 +173,7 @@
return tuscanyInstallDir;
}
+ /*
String location = bundle.getLocation();
if (location != null && location.startsWith("file:")) {
@@ -189,6 +194,7 @@
}
}
}
+ */
return null;
}
@@ -198,6 +204,26 @@
}
long start = System.currentTimeMillis();
+ File file = JarFileFinder.toFile(bundleFile);
+ if (file != null && file.isDirectory()) {
+ boolean isOSGiBundle = false;
+ File mf = new File(file, "META-INF/MANIFEST.MF");
+ if (mf.isFile()) {
+ Manifest manifest = new Manifest();
+ manifest.read(new FileInputStream(mf));
+ isOSGiBundle = manifest != null && manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME) != null;
+ }
+ if (isOSGiBundle) {
+ Bundle bundle = bundleContext.installBundle(bundleFile.toString());
+ if (logger.isLoggable(Level.FINE)) {
+ logger.fine("Bundle installed in " + (System.currentTimeMillis() - start) + " ms: " + bundleFile);
+ }
+ tuscanyBundles.add(bundle);
+ return bundle;
+ } else {
+ return null;
+ }
+ }
Manifest manifest = readManifest(bundleFile);
boolean isOSGiBundle = manifest != null && manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME) != null;
Modified: tuscany/java/sca/modules/node-launcher-equinox/src/test/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-launcher-equinox/src/test/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherTestCase.java?rev=692269&r1=692268&r2=692269&view=diff
==============================================================================
--- tuscany/java/sca/modules/node-launcher-equinox/src/test/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherTestCase.java (original)
+++ tuscany/java/sca/modules/node-launcher-equinox/src/test/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherTestCase.java Thu Sep 4 14:56:40 2008
@@ -23,10 +23,6 @@
import org.apache.tuscany.sca.node.SCAClient;
import org.apache.tuscany.sca.node.SCANode;
-import org.apache.tuscany.sca.node.equinox.launcher.DomainManagerLauncher;
-import org.apache.tuscany.sca.node.equinox.launcher.NodeLauncher;
-import org.apache.tuscany.sca.node.equinox.launcher.NodeLauncherUtil;
-import org.apache.tuscany.sca.node.equinox.launcher.OSGiHost;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
@@ -40,7 +36,7 @@
@BeforeClass
public static void setUp() {
- System.setProperty("TUSCANY_HOME", "target/tuscany");
+ // System.setProperty("TUSCANY_HOME", "target/tuscany");
host = NodeLauncherUtil.startOSGi();
}