Oleg,

I was afraid of that. Thanks for for your advice and for pointing out that utility class ..... it saves me the time not having to write and test my own.

Regards, Kieran

On May 19, 2005, at 10:05 AM, Oleg Kalnichevski wrote:

Kieran,

This problem is not uncommon. I know for a fact that the stale connection
check does not work with older Sun JREs (< 1.4) when SSL is being used.
I suspect the stale connection check is not always reliable with newer
JREs as well.


I am afraid the only alternative is to disable the stale connection check
altogether and to run an eviction thread which drops idle connections
after a specified period of inactivity


http://jakarta.apache.org/commons/httpclient/3.0/apidocs/org/apache/ commons/httpclient/util/IdleConnectionTimeoutThread.html

Oleg

On Wed, May 18, 2005 at 08:41:46PM -0400, Kieran Kelleher wrote:
Hi,

In brief, I get a SocketInputStream exception on
httpClient.executeMethod( postMethod ) intermittently and rarely, but
usually after connections to the host have been left idle for a few
minutes. My web application is using HttpClient library to process
multithreaded POST HTTPS requests to viaklix.com credit card service
provider. It seems the host is dropping the "keep-alive" connection
from the connection manager's pool so that that this exception is
thrown when the httpClient tries to use a connection that the
connection manager is trying to keep open.

Logging indicates that the method has isRequestSent=true and
hasBeenUsed=false and http status code is unset consistently after the
exception is thrown.

My short-term workaround (it works, but I don't longterm want to take
the chance of resending a credit card payment especially since
method.isRequestSent=true) is to use a retry handler on the method
since for the 1 in 50 times I have been able to reproduce the
exception, the cc service provider web application indicates that the
transaction was not processed. However rather than assuming that this
is going to always be the case, I really want to have some kind of
automatic stale connection checking done before my request is sent.

Googling the list archives and examination of the HttpClient docs seem
to indicate that the
httpClient.getHttpConnectionManager().getParams().isStaleCheckingEnabl ed
() being TRUE may not be effective for SSL connections.


Bottom line, is there anyway to have SSL connections checked reliably
by the connection manager (I'm using the
MultiThreadedHttpConnectionManager subclass) before it commits to
sending a request on a previously used SSL connection that it has in
its pool?

The exception stacktrace looks like this:

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at com.sun.net.ssl.internal.ssl.InputRecord.a(DashoA12275)
at com.sun.net.ssl.internal.ssl.InputRecord.read(DashoA12275)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(DashoA12275)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
at java.io.BufferedInputStream.read(BufferedInputStream.java:201)
at
org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:
77)
at
org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105)
at
org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.j av
a:1110)
at
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpC on
nectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1391)
at
org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethod Ba
se.java:1824)
at
org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBa se
.java:1584)
at
org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.ja va
:995)
at
org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Http Me
thodDirector.java:393)
at
org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMet ho
dDirector.java:168)
at
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java :
393)
at
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java :
324)
at
ViaklixTransaction$TerminalTransactionProcess.run(ViaklixTransaction.j av
a:490)
at java.lang.Thread.run(Thread.java:552)



Regards, Kieran


---------------------------------------------------------------------
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]




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



Reply via email to