Author: markt Date: Mon Sep 1 10:06:07 2014 New Revision: 1621725 URL: http://svn.apache.org/r1621725 Log: Partial fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=56900 Fix resource leaks reading property files Based on a patch by Felix Schumacher
Modified: tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java Modified: tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java?rev=1621725&r1=1621724&r2=1621725&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java Mon Sep 1 10:06:07 2014 @@ -49,6 +49,7 @@ import org.apache.catalina.ContainerServ import org.apache.catalina.Globals; import org.apache.catalina.security.SecurityUtil; import org.apache.catalina.util.Introspection; +import org.apache.juli.logging.Log; import org.apache.tomcat.InstanceManager; import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.res.StringManager; @@ -71,9 +72,9 @@ public class DefaultInstanceManager impl protected final ClassLoader containerClassLoader; protected final boolean privileged; protected final boolean ignoreAnnotations; - private final Properties restrictedFilters = new Properties(); - private final Properties restrictedListeners = new Properties(); - private final Properties restrictedServlets = new Properties(); + private final Properties restrictedFilters; + private final Properties restrictedListeners; + private final Properties restrictedServlets; private final Map<Class<?>, AnnotationCacheEntry[]> annotationCache = new WeakHashMap<>(); private final Map<String, String> postConstructMethods; @@ -88,49 +89,18 @@ public class DefaultInstanceManager impl this.containerClassLoader = containerClassLoader; ignoreAnnotations = catalinaContext.getIgnoreAnnotations(); StringManager sm = StringManager.getManager(Constants.Package); - try { - InputStream is = - this.getClass().getClassLoader().getResourceAsStream - ("org/apache/catalina/core/RestrictedServlets.properties"); - if (is != null) { - restrictedServlets.load(is); - } else { - catalinaContext.getLogger().error(sm.getString( - "defaultInstanceManager.restrictedServletsResource")); - } - } catch (IOException e) { - catalinaContext.getLogger().error(sm.getString( - "defaultInstanceManager.restrictedServletsResource"), e); - } - - try { - InputStream is = - this.getClass().getClassLoader().getResourceAsStream - ("org/apache/catalina/core/RestrictedListeners.properties"); - if (is != null) { - restrictedListeners.load(is); - } else { - catalinaContext.getLogger().error(sm.getString( - "defaultInstanceManager.restrictedListenersResources")); - } - } catch (IOException e) { - catalinaContext.getLogger().error(sm.getString( - "defaultInstanceManager.restrictedListenersResources"), e); - } - try { - InputStream is = - this.getClass().getClassLoader().getResourceAsStream - ("org/apache/catalina/core/RestrictedFilters.properties"); - if (is != null) { - restrictedFilters.load(is); - } else { - catalinaContext.getLogger().error(sm.getString( - "defaultInstanceManager.restrictedFiltersResource")); - } - } catch (IOException e) { - catalinaContext.getLogger().error(sm.getString( - "defaultInstanceManager.restrictedServletsResources"), e); - } + restrictedServlets = loadProperties( + "org/apache/catalina/core/RestrictedServlets.properties", + sm.getString("defaultInstanceManager.restrictedServletsResource"), + catalinaContext.getLogger()); + restrictedListeners = loadProperties( + "org/apache/catalina/core/RestrictedListeners.properties", + "defaultInstanceManager.restrictedListenersResources", + catalinaContext.getLogger()); + restrictedFilters = loadProperties( + "org/apache/catalina/core/RestrictedFilters.properties", + "defaultInstanceManager.restrictedFiltersResource", + catalinaContext.getLogger()); this.context = context; this.injectionMap = injectionMap; this.postConstructMethods = catalinaContext.findPostConstructMethods(); @@ -654,6 +624,21 @@ public class DefaultInstanceManager impl } } + private static Properties loadProperties(String resourceName, String errorString, Log log) { + Properties result = new Properties(); + ClassLoader cl = DefaultInstanceManager.class.getClassLoader(); + try (InputStream is = cl.getResourceAsStream(resourceName)) { + if (is ==null) { + log.error(errorString); + } else { + result.load(is); + } + } catch (IOException ioe) { + log.error(errorString, ioe); + } + return result; + } + private static String normalize(String jndiName){ if(jndiName != null && jndiName.startsWith("java:comp/env/")){ return jndiName.substring(14); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org