You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2006/07/03 12:50:35 UTC
svn commit: r418740 -
/cocoon/trunk/core/cocoon-bootstrap/src/main/java/org/apache/cocoon/classloader/AbstractClassLoaderFactory.java
Author: cziegeler
Date: Mon Jul 3 03:50:35 2006
New Revision: 418740
URL: http://svn.apache.org/viewvc?rev=418740&view=rev
Log:
Sort jars for classloading to provide consistent search order
Modified:
cocoon/trunk/core/cocoon-bootstrap/src/main/java/org/apache/cocoon/classloader/AbstractClassLoaderFactory.java
Modified: cocoon/trunk/core/cocoon-bootstrap/src/main/java/org/apache/cocoon/classloader/AbstractClassLoaderFactory.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-bootstrap/src/main/java/org/apache/cocoon/classloader/AbstractClassLoaderFactory.java?rev=418740&r1=418739&r2=418740&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-bootstrap/src/main/java/org/apache/cocoon/classloader/AbstractClassLoaderFactory.java (original)
+++ cocoon/trunk/core/cocoon-bootstrap/src/main/java/org/apache/cocoon/classloader/AbstractClassLoaderFactory.java Mon Jul 3 03:50:35 2006
@@ -21,6 +21,9 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -44,6 +47,7 @@
* <exclude-classes pattern="org.apache.cocoon.transformation.**"/>
* &/lt;classpath>
* </pre>
+ *
* @version $Id$
* @since 2.2
*/
@@ -118,7 +122,8 @@
throw new Exception("Configuration for lib class path is not a directory: " + libDir);
}
File[] libraries = libDir.listFiles(new JarFileFilter());
-
+ // sort the files to provide a consistent search order
+ Arrays.sort(libraries);
for (int m = 0; m < libraries.length; m++) {
final URL lib = libraries[m].toURL();
urlList.add(lib);
@@ -131,13 +136,19 @@
final String contextPath = this.getContextPath(directory);
final Set resources = servletContext.getResourcePaths(contextPath + '/');
if ( resources != null ) {
+ // we add all urls into a temporary list first to sort them
+ // before we add them
+ final List temporaryList = new ArrayList();
final Iterator iter = resources.iterator();
while ( iter.hasNext() ) {
final String path = (String)iter.next();
if (path.endsWith(".jar") || path.endsWith(".zip")) {
- urlList.add(servletContext.getResource(path));
+ temporaryList.add(servletContext.getResource(path));
}
}
+ // let's sort before adding
+ Collections.sort(temporaryList, new UrlComparator());
+ urlList.addAll(temporaryList);
}
}
}
@@ -149,10 +160,19 @@
protected abstract ClassLoader createClassLoader(URL[] urls, List includePatterns, List excludePatterns, ClassLoader parent);
- private class JarFileFilter implements FilenameFilter {
+ private final static class JarFileFilter implements FilenameFilter {
public boolean accept(File dir, String name) {
return name.endsWith(".zip") || name.endsWith(".jar");
}
}
+ private final static class UrlComparator implements Comparator {
+
+ public int compare(Object o1, Object o2) {
+ if ( o1 instanceof URL && o2 instanceof URL ) {
+ return ((URL)o1).toExternalForm().compareTo(((URL)o2).toExternalForm());
+ }
+ return 0;
+ }
+ }
}