Return-Path: Delivered-To: apmail-ws-tuscany-commits-archive@locus.apache.org Received: (qmail 20591 invoked from network); 1 Jun 2008 08:36:55 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 1 Jun 2008 08:36:55 -0000 Received: (qmail 74095 invoked by uid 500); 1 Jun 2008 08:36:57 -0000 Delivered-To: apmail-ws-tuscany-commits-archive@ws.apache.org Received: (qmail 74074 invoked by uid 500); 1 Jun 2008 08:36:57 -0000 Mailing-List: contact tuscany-commits-help@ws.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: tuscany-dev@ws.apache.org Delivered-To: mailing list tuscany-commits@ws.apache.org Received: (qmail 74065 invoked by uid 99); 1 Jun 2008 08:36:57 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 01 Jun 2008 01:36:57 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 01 Jun 2008 08:36:17 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 9ACC02388A26; Sun, 1 Jun 2008 01:36:34 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r662174 - /incubator/tuscany/java/sca/modules/node2-launcher/src/main/java/org/apache/tuscany/sca/node/launcher/NodeLauncherUtil.java Date: Sun, 01 Jun 2008 08:36:34 -0000 To: tuscany-commits@ws.apache.org From: jsdelfino@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080601083634.9ACC02388A26@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 jarDirectoryURLs = new HashSet(); List jarURLs = new ArrayList(); // 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 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) {