Fix LOGGING-126: loading of commons-logging.properties file locks jars on windows.
Thanks to Philippe Mouawad for the report and patch. git-svn-id: https://svn.apache.org/repos/asf/commons/proper/logging/trunk@695208 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -27,6 +27,7 @@ import java.io.PrintStream;
|
|||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.net.URLConnection;
|
||||||
import java.security.AccessController;
|
import java.security.AccessController;
|
||||||
import java.security.PrivilegedAction;
|
import java.security.PrivilegedAction;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
@@ -1420,18 +1421,36 @@ public abstract class LogFactory {
|
|||||||
PrivilegedAction action =
|
PrivilegedAction action =
|
||||||
new PrivilegedAction() {
|
new PrivilegedAction() {
|
||||||
public Object run() {
|
public Object run() {
|
||||||
|
InputStream stream = null;
|
||||||
try {
|
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) {
|
if (stream != null) {
|
||||||
Properties props = new Properties();
|
Properties props = new Properties();
|
||||||
props.load(stream);
|
props.load(stream);
|
||||||
stream.close();
|
stream.close();
|
||||||
|
stream = null;
|
||||||
return props;
|
return props;
|
||||||
}
|
}
|
||||||
} catch(IOException e) {
|
} catch(IOException e) {
|
||||||
if (isDiagnosticsEnabled()) {
|
if (isDiagnosticsEnabled()) {
|
||||||
logDiagnostic("Unable to read URL " + url);
|
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;
|
return null;
|
||||||
|
|||||||
Reference in New Issue
Block a user