luehe 2003/09/22 15:25:20 Modified: catalina/src/share/org/apache/catalina/startup TldConfig.java Log: Avoid TLD-scanning the JARs under WEB-INF lib twice per webapp. When navigating the webapp classloader delegation chain in search for "global" JARs, we are also adding the JARs under WEB-INF lib, duplicating the functionality of tldScanResourcePathsWebInfLibJars(), which has become redundant and has been removed. Revision Changes Path 1.22 +23 -56 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/TldConfig.java Index: TldConfig.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/TldConfig.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- TldConfig.java 22 Sep 2003 21:42:45 -0000 1.21 +++ TldConfig.java 22 Sep 2003 22:25:20 -0000 1.22 @@ -249,11 +249,11 @@ * files, to be processed */ Set resourcePaths = tldScanResourcePaths(); - Map globalJarPaths = getGlobalJarPaths(); + Map jarPaths = getJarPaths(); // Check to see if we can use cached listeners if (tldCache != null && tldCache.exists()) { - long lastModified = getLastModified(resourcePaths, globalJarPaths); + long lastModified = getLastModified(resourcePaths, jarPaths); if (lastModified < tldCache.lastModified()) { processCache(tldCache); return; @@ -270,8 +270,8 @@ tldScanTld(path); } } - if (globalJarPaths != null) { - paths = globalJarPaths.values().iterator(); + if (jarPaths != null) { + paths = jarPaths.values().iterator(); while (paths.hasNext()) { tldScanJar((File) paths.next()); } @@ -310,11 +310,11 @@ * Returns the last modification date of the given sets of resources. * * @param resourcePaths - * @param globalJarPaths + * @param jarPaths * * @return Last modification date */ - private long getLastModified(Set resourcePaths, Map globalJarPaths) + private long getLastModified(Set resourcePaths, Map jarPaths) throws Exception { long lastModified = 0; @@ -334,8 +334,8 @@ } } - if (globalJarPaths != null) { - paths = globalJarPaths.values().iterator(); + if (jarPaths != null) { + paths = jarPaths.values().iterator(); while (paths.hasNext()) { File jarFile = (File) paths.next(); long lastM = jarFile.lastModified(); @@ -650,7 +650,6 @@ DirContext resources = context.getResources(); if (resources != null) { tldScanResourcePathsWebInf(resources, "/WEB-INF", resourcePaths); - tldScanResourcePathsWebInfLibJars(resources, resourcePaths); } // Return the completed set @@ -705,55 +704,23 @@ } } - /* - * Adds any JARs in the /WEB-INF/lib subdirectory of the web application - * to the given set of resource paths. - * - * @param resources The web application's resources - * @param resourcePaths The set of resource paths to add to - */ - private void tldScanResourcePathsWebInfLibJars(DirContext resources, - Set resourcePaths) - throws IOException { - - if (log.isTraceEnabled()) { - log.trace(" Scanning JARs in /WEB-INF/lib subdirectory"); - } - - try { - NamingEnumeration items = resources.list("/WEB-INF/lib"); - while (items.hasMoreElements()) { - NameClassPair item = (NameClassPair) items.nextElement(); - String resourcePath = "/WEB-INF/lib/" + item.getName(); - if (!resourcePath.endsWith(".jar")) { - continue; - } - if (log.isTraceEnabled()) { - log.trace(" Adding path '" + resourcePath + "'"); - } - resourcePaths.add(resourcePath); - } - } catch (NamingException e) { - ; // Silent catch: it's valid that no /WEB-INF/lib directory exists - } - } - /** - * Returns the paths to all JAR files accessible to all parent - * classloaders of the web application class loader. + * Returns a map of the paths to all JAR files accessible to the webapp. + * + * The map includes the JARs under WEB-INF/lib as well as those in the + * classloader delegation chain of the webapp's classloader. * - * This is a Tomcat-specific extension to the TLD search order defined in - * the JSP spec, which will allow tag libraries packaged as JAR + * The latter constitutes a Tomcat-specific extension to the TLD search + * order defined in the JSP spec. It allows tag libraries packaged as JAR * files to be shared by web applications by simply dropping them in a * location that all web applications have access to (e.g., * <CATALINA_HOME>/common/lib). * - * @return Map of paths to all JAR files accessible to all parent class - * loaders of the web application class loader + * @return Map of JAR file paths */ - private Map getGlobalJarPaths() { + private Map getJarPaths() { - HashMap globalJarPaths = null; + HashMap jarPathMap = null; ClassLoader loader = Thread.currentThread().getContextClassLoader(); while (loader != null) { @@ -773,11 +740,11 @@ if (file.exists()) { String path = file.getAbsolutePath(); if (path.endsWith(".jar")) { - if (globalJarPaths == null) { - globalJarPaths = new HashMap(); - globalJarPaths.put(path, file); - } else if (!globalJarPaths.containsKey(path)) { - globalJarPaths.put(path, file); + if (jarPathMap == null) { + jarPathMap = new HashMap(); + jarPathMap.put(path, file); + } else if (!jarPathMap.containsKey(path)) { + jarPathMap.put(path, file); } } } @@ -786,6 +753,6 @@ loader = loader.getParent(); } - return globalJarPaths; + return jarPathMap; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]