You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2008/06/01 10:36:34 UTC
svn commit: r662174 -
/incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java
Author: jsdelfino
Date: Sun Jun 1 01:36:34 2008
New Revision: 662174
URL: http://svn.apache.org/viewvc?rev=662174&view=rev
Log:
Optimized computation of runtime classpath.
Modified:
incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java
Modified: incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java?rev=662174&r1=662173&r2=662174&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java (original)
+++ incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java Sun Jun 1 01:36:34 2008
@@ -32,7 +32,9 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -83,6 +85,7 @@
private static ClassLoader runtimeClassLoader(ClassLoader parentClassLoader, FilenameFilter filter) throws FileNotFoundException, URISyntaxException, MalformedURLException {
// Build list of runtime JARs
+ Set<URL> jarDirectoryURLs = new HashSet<URL>();
List<URL> jarURLs = new ArrayList<URL>();
// First determine the path to the launcher class
@@ -112,6 +115,8 @@
// Collect JAR files from the directory containing the input JAR
// (e.g. the Tuscany modules directory)
+ URL jarDirectoryURL = jarDirectory.toURI().toURL();
+ jarDirectoryURLs.add(jarDirectoryURL);
collectJARFiles(jarDirectory, jarURLs, filter);
File homeDirectory = jarDirectory.getParentFile();
@@ -119,16 +124,19 @@
// Collect JARs from the ../modules directory
File modulesDirectory = new File(homeDirectory, "modules");
- if (modulesDirectory.exists() && !modulesDirectory.getAbsolutePath().equals(jarDirectory.getAbsolutePath())) {
+ URL modulesDirectoryURL = modulesDirectory.toURI().toURL();
+ if (!jarDirectoryURLs.contains(modulesDirectoryURL) && modulesDirectory.exists()) {
+ jarDirectoryURLs.add(modulesDirectoryURL);
collectJARFiles(modulesDirectory, jarURLs, filter);
}
// Collect JARs from the ../lib directory
File libDirectory = new File(homeDirectory, "lib");
- if (libDirectory.exists() && !libDirectory.getAbsolutePath().equals(jarDirectory.getAbsolutePath())) {
+ URL libDirectoryURL = libDirectory.toURI().toURL();
+ if (!jarDirectoryURLs.contains(libDirectoryURL) && libDirectory.exists()) {
+ jarDirectoryURLs.add(libDirectoryURL);
collectJARFiles(libDirectory, jarURLs, filter);
}
-
}
}
}
@@ -144,20 +152,26 @@
if (home != null && home.length() != 0) {
logger.fine(TUSCANY_HOME + ": " + home);
File homeDirectory = new File(home);
- if (homeDirectory.exists()) {
+ URL homeDirectoryURL = homeDirectory.toURI().toURL();
+ if (!jarDirectoryURLs.contains(homeDirectoryURL) && homeDirectory.exists()) {
// Collect files under $TUSCANY_HOME
+ jarDirectoryURLs.add(homeDirectoryURL);
collectJARFiles(homeDirectory, jarURLs, filter);
// Collect files under $TUSCANY_HOME/modules
File modulesDirectory = new File(homeDirectory, "modules");
- if (modulesDirectory.exists()) {
+ URL modulesDirectoryURL = modulesDirectory.toURI().toURL();
+ if (!jarDirectoryURLs.contains(modulesDirectoryURL) && modulesDirectory.exists()) {
+ jarDirectoryURLs.add(modulesDirectoryURL);
collectJARFiles(modulesDirectory, jarURLs, filter);
}
// Collect files under $TUSCANY_HOME/lib
File libDirectory = new File(homeDirectory, "lib");
- if (libDirectory.exists()) {
+ URL libDirectoryURL = libDirectory.toURI().toURL();
+ if (!jarDirectoryURLs.contains(libDirectoryURL) && libDirectory.exists()) {
+ jarDirectoryURLs.add(libDirectoryURL);
collectJARFiles(libDirectory, jarURLs, filter);
}
}
@@ -167,7 +181,7 @@
if (!jarURLs.isEmpty()) {
// Return a ClassLoader configured with the runtime JARs
- ClassLoader classLoader = new RuntimeClassLoader(jarURLs.toArray(new URL[0]), parentClassLoader);
+ ClassLoader classLoader = new RuntimeClassLoader(jarURLs.toArray(new URL[jarURLs.size()]), parentClassLoader);
return classLoader;
} else {
@@ -183,18 +197,14 @@
* @throws MalformedURLException
*/
private static void collectJARFiles(File directory, List<URL> urls, FilenameFilter filter) throws MalformedURLException {
- File[] files = directory.listFiles(filter);
+ String[] files = directory.list(filter);
if (files != null) {
+ URL directoryURL = new URL(directory.toURI().toString() + "/");
int count = 0;
- for (File file: files) {
- URL url = file.toURI().toURL();
-
- // Collect URL of the JAR file, make sure that there are no
- // duplicates in the list
- if (!urls.contains(url)) {
- urls.add(url);
- count++;
- }
+ for (String file: files) {
+ URL url = new URL(directoryURL, file);
+ urls.add(url);
+ count++;
}
if (count != 0) {
logger.fine("Runtime classpath: "+ count + " JAR" + (count > 1? "s":"")+ " from " + directory.toString());
@@ -274,6 +284,7 @@
static Object node(String configurationURI, String compositeURI, String compositeContent, NodeLauncher.Contribution[] contributions) throws LauncherException {
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
try {
+
// Set up runtime ClassLoader
ClassLoader runtimeClassLoader = runtimeClassLoader(Thread.currentThread().getContextClassLoader(),
new StandAloneJARFileNameFilter());
@@ -290,6 +301,7 @@
} else {
bootstrapClass = Class.forName(className);
}
+
Object bootstrap;
if (configurationURI != null) {