Author: imario
Date: Tue Jun 19 06:07:40 2007
New Revision: 548717
URL: http://svn.apache.org/viewvc?view=rev&rev=548717
Log:
VFS-164: move the WebdavConnectionManager to the now renamed
ThreadLocalHttpConnectionManager and use it in webdav and http to workaround
the standard way of connection handling of the used HttpClient library which
tries to limit the number of connections to 2 per server and in the end drives
VFS in a deadlock situation under heavy load.
Added:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/ThreadLocalHttpConnectionManager.java
(contents, props changed)
- copied, changed from r540928,
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavConnectionManager.java
Removed:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavConnectionManager.java
Modified:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpClientFactory.java
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpFileSystem.java
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebDavFileSystem.java
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavClientFactory.java
Modified:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpClientFactory.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpClientFactory.java?view=diff&rev=548717&r1=548716&r2=548717
==============================================================================
---
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpClientFactory.java
(original)
+++
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpClientFactory.java
Tue Jun 19 06:07:40 2007
@@ -16,16 +16,15 @@
*/
package org.apache.commons.vfs.provider.http;
+import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
-import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.methods.HeadMethod;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
-import org.apache.commons.vfs.UserAuthenticator;
import org.apache.commons.vfs.UserAuthenticationData;
+import org.apache.commons.vfs.UserAuthenticator;
import org.apache.commons.vfs.util.UserAuthenticatorUtils;
/**
@@ -48,8 +47,10 @@
HttpClient client;
try
{
- client = new HttpClient(new MultiThreadedHttpConnectionManager());
- final HostConfiguration config = new HostConfiguration();
+ // client = new HttpClient(new
MultiThreadedHttpConnectionManager());
+ client = new HttpClient(new
ThreadLocalHttpConnectionManager());
+
+ final HostConfiguration config = new
HostConfiguration();
config.setHost(hostname, port, scheme);
if (fileSystemOptions != null)
Modified:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpFileSystem.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpFileSystem.java?view=diff&rev=548717&r1=548716&r2=548717
==============================================================================
---
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpFileSystem.java
(original)
+++
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpFileSystem.java
Tue Jun 19 06:07:40 2007
@@ -17,6 +17,7 @@
package org.apache.commons.vfs.provider.http;
import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpConnectionManager;
import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystem;
@@ -57,7 +58,19 @@
return client;
}
- /**
+ public void closeCommunicationLink()
+ {
+ if (getClient() != null)
+ {
+ HttpConnectionManager mgr =
getClient().getHttpConnectionManager();
+ if (mgr instanceof ThreadLocalHttpConnectionManager)
+ {
+ ((ThreadLocalHttpConnectionManager)
mgr).releaseLocalConnection();
+ }
+ }
+ }
+
+ /**
* Creates a file object. This method is called only if the requested
* file is not cached.
*/
Copied:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/ThreadLocalHttpConnectionManager.java
(from r540928,
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavConnectionManager.java)
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/ThreadLocalHttpConnectionManager.java?view=diff&rev=548717&p1=jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavConnectionManager.java&r1=540928&p2=jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/ThreadLocalHttpConnectionManager.java&r2=548717
==============================================================================
---
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavConnectionManager.java
(original)
+++
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/ThreadLocalHttpConnectionManager.java
Tue Jun 19 06:07:40 2007
@@ -1,4 +1,4 @@
-package org.apache.commons.vfs.provider.webdav;
+package org.apache.commons.vfs.provider.http;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpConnection;
@@ -22,7 +22,7 @@
* @author Laura Werner
* @since 2.0
*/
-public class WebdavConnectionManager implements HttpConnectionManager
+public class ThreadLocalHttpConnectionManager implements HttpConnectionManager
{
private static class ConnectionParameters
{
@@ -109,7 +109,7 @@
private long idleStartTime = Long.MAX_VALUE;
}
- public WebdavConnectionManager()
+ public ThreadLocalHttpConnectionManager()
{
}
Propchange:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/ThreadLocalHttpConnectionManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/ThreadLocalHttpConnectionManager.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/ThreadLocalHttpConnectionManager.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebDavFileSystem.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebDavFileSystem.java?view=diff&rev=548717&r1=548716&r2=548717
==============================================================================
---
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebDavFileSystem.java
(original)
+++
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebDavFileSystem.java
Tue Jun 19 06:07:40 2007
@@ -21,10 +21,10 @@
import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystem;
-import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.provider.AbstractFileSystem;
import org.apache.commons.vfs.provider.GenericFileName;
+import org.apache.commons.vfs.provider.http.ThreadLocalHttpConnectionManager;
import java.util.Collection;
@@ -58,19 +58,22 @@
/**
* Returns the client for this file system.
*/
- protected HttpClient getClient() throws FileSystemException
+ protected HttpClient getClient()
{
return client;
}
- protected void closeHttpClientConnection() throws FileSystemException
- {
- HttpConnectionManager mgr = getClient().getHttpConnectionManager();
- if (mgr instanceof WebdavConnectionManager)
- {
- ((WebdavConnectionManager) mgr).releaseLocalConnection();
- }
- }
+ public void closeCommunicationLink()
+ {
+ if (getClient() != null)
+ {
+ HttpConnectionManager mgr =
getClient().getHttpConnectionManager();
+ if (mgr instanceof ThreadLocalHttpConnectionManager)
+ {
+ ((ThreadLocalHttpConnectionManager)
mgr).releaseLocalConnection();
+ }
+ }
+ }
/**
* Creates a file object. This method is called only if the requested
Modified:
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavClientFactory.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavClientFactory.java?view=diff&rev=548717&r1=548716&r2=548717
==============================================================================
---
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavClientFactory.java
(original)
+++
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavClientFactory.java
Tue Jun 19 06:07:40 2007
@@ -19,11 +19,11 @@
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpURL;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
-import org.apache.commons.httpclient.Cookie;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.UserAuthenticator;
import org.apache.commons.vfs.UserAuthenticationData;
+import org.apache.commons.vfs.provider.http.ThreadLocalHttpConnectionManager;
import org.apache.commons.vfs.util.UserAuthenticatorUtils;
import org.apache.webdav.lib.WebdavResource;
@@ -104,7 +104,7 @@
resource.setHttpURL(url, WebdavResource.NOACTION, 1);
client = resource.retrieveSessionInstance();
- client.setHttpConnectionManager(new WebdavConnectionManager());
+ client.setHttpConnectionManager(new
ThreadLocalHttpConnectionManager());
}
catch (final IOException e)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]