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]

Reply via email to