Author: skitching
Date: Sun Sep 14 05:26:03 2008
New Revision: 695208

URL: http://svn.apache.org/viewvc?rev=695208&view=rev
Log:
Fix LOGGING-126: loading of commons-logging.properties file locks jars on 
windows.
Thanks to Philippe Mouawad for the report and patch.

Modified:
    
commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java

Modified: 
commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java
URL: 
http://svn.apache.org/viewvc/commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java?rev=695208&r1=695207&r2=695208&view=diff
==============================================================================
--- 
commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java
 (original)
+++ 
commons/proper/logging/trunk/src/java/org/apache/commons/logging/LogFactory.java
 Sun Sep 14 05:26:03 2008
@@ -27,6 +27,7 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.net.URL;
+import java.net.URLConnection;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Enumeration;
@@ -1420,18 +1421,36 @@
         PrivilegedAction action = 
             new PrivilegedAction() {
                 public Object run() {
+                    InputStream stream = null;
                     try {
-                        InputStream stream = url.openStream();
+                        // We must ensure that useCaches is set to false, as 
the
+                        // default behaviour of java is to cache file handles, 
and
+                        // this "locks" files, preventing hot-redeploy on 
windows.
+                        URLConnection connection = url.openConnection();
+                        connection.setDefaultUseCaches(false);
+                        stream = connection.getInputStream();
                         if (stream != null) {
                             Properties props = new Properties();
                             props.load(stream);
                             stream.close();
+                            stream = null;
                             return props;
                         }
                     } catch(IOException e) {
                         if (isDiagnosticsEnabled()) {
                             logDiagnostic("Unable to read URL " + url);
                         }
+                    } finally {
+                        if (stream != null) {
+                            try {
+                                stream.close();
+                            } catch(Throwable t) {
+                                // ignore exception; this should not happen
+                                if (isDiagnosticsEnabled()) {
+                                    logDiagnostic("Unable to close stream for 
URL " + url);
+                                }
+                            }
+                        }
                     }
 
                     return null;


Reply via email to