Hello Oleg and others,
        Suppose I have the following basic code structure:

Init() {
        // Create a new MultiThreadHTTPConnectionManager if one does not
exist()
        // Create an HTTPClient if one does not exist()
}

HandleRequest() {
        // Create new method
        try{
                // Execute the method, without Connection:Close set
        }
        catch (IOException e) {
                // WANT TO CLOSE THE CONNECTION, because of the error
        } 
        catch (HTTPException h) {
                // WANT TO CLOSE THE CONNECTION, because of the error
        }  
        finally {
                method.releaseConnection();
        }


Where I say WANT TO CLOSE THE CONNECTION, would the following suffice?

        method.setConnectionCloseForced();
        method.responseBodyConsumed();


Thanks or your guidance,

Vivek
-----Original Message-----
From: Oleg Kalnichevski [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, December 14, 2005 4:17 AM
To: [email protected]
Subject: Re: Flushing the response upon IO error

On Tue, Dec 13, 2005 at 02:31:37PM -0500, Satsangi, Vivek  wrote:
> We are using http-client inside a servlet running on the SUNOne
> webserver, JVm version 1.4.2_06. The servlet acts like a reverse proxy
> for a web-exposed application.
> 
> One user can only access the http client connection object once at a
> time. For this reason, I thought that we don't need to use the
> multi-threaded connection manager. However, we see some errors where
the
> contents of the wire are "mangled" -- e.g. the http status line is not
> found, partial http, etc. 
> 
> Question 1. Does the connection manager have some sort of class-level
> statics that are used to maintain the list of connections so that even
> though the users' sessions should not be able to "see" each others'
> connection objects, somehow the connection object are ending up
getting
> shared?
> 
> We occasionally get some sort of I/O error when trying to do an https
> connection to the back end. Once a connection gets such an error, the
> error "stays", so that subsequent connections will not find the HTTP
in
> the status line, etc. Because of this, I switched to using http
instead,
> and setting the Connection: close header. This would cause fairly bad
> performance if we were using https, obviously.
> 
> Question 2: Suppose I get an IO error when executing the method. Is
> there a way to tell the connection manager to close *this* connection
> (and create new ones as necessary) so that the error at least does not
> "propogate"? Alternately, can I somehow flush the response object /
> response body stream so that the next connection will be "fresh"?
> 
> 
> Thanks for any guidance you are able to give me.
> 

Vivek,

HTTP connection managers are not aware of the concept of a user or a
user session. HTTP connection managers assign connections based on the
combination of the following attributes: host name, port, local address,
proxy host, proxy port. 

If your application executes HTTP methods from multiple threads using 
the same connection manager / HttpClient instance, you MUST ensure that 
access to the underlying HTTP connection objects is synchronized

The simple connection manager used by HttpClient per default is NOT
threading-safe. This pretty much explains the problems you are seeing.
Consider using the multithreaded connection manager instead

Hope this helps

Oleg

> Vivek Satsangi

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to