Hi Alexis,
I suppose there is a miscommunication here. We have so many use-cases in our
heads. And this thread is becoming so long :).

I suppose you are talking about the use case when the
"HTTPConstants.REUSE_HTTP_CLIENT" property is *NOT* set to "true", so there
is no HttpClient reuse from one client's invocation to another? If this is
the case, I can fully agree with you.

The lines of code we are talking about are part of
AbstractHTTPSender#getHttpClient. Here is the code excerpt (the else part of
the if) when "HTTPConstants.REUSE_HTTP_CLIENT" property is *NOT* set to
"true":

else {
            HttpConnectionManager connManager =
                    (HttpConnectionManager) msgContext.getProperty(

HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
            if (connManager == null) {
                connManager =
                        (HttpConnectionManager) msgContext.getProperty(

HTTPConstants.MUTTITHREAD_HTTP_CONNECTION_MANAGER);
            }
            if(connManager != null){
                httpClient = new HttpClient(connManager);
            } else {
                //Multi threaded http connection manager has set as the
default
--------->>   connManager = new MultiThreadedHttpConnectionManager();
                httpClient = new HttpClient(connManager);
            }
        }

Thanks,
Dobri

On Wed, Mar 25, 2009 at 6:16 PM, Alexis Midon <mi...@intalio.com> wrote:

> No sure I'm getting what you're saying.
> By default Axis2 creates a new HttpClient instance and a new
> HttpConnectionManager instance on every invocations. So multiple invocations
> should have step on each other in the default case. That's why I said
> MultiThreadedHttpConnectionManager seems overkill to me.
>
>>
> Alexis
>
>
>
> On Wed, Mar 25, 2009 at 3:11 AM, Dobri Kitipov <
> kdobrik.ax...@googlemail.com> wrote:
>
>> Hi everybody,
>> I am not sure that the default ConnectionManager should be changed from
>> MultiThreadedHttpConnectionManager to SimpleHttpConnectionManager. What
>> about asynchronous MEPs? I have not tested this, but I suppose that if a
>> given async client does several invocations then if *NO*
>> MultiThreadedHttpConnectionManager is in use (i.e. there is no connection
>> pool) then the NON-blocking mechanism will be corrupted?
>>
>> Dobri
>>
>>
>> On Tue, Mar 24, 2009 at 6:40 PM, Alexis Midon <mi...@intalio.com> wrote:
>>
>>> +1 on this. I'm fine with the current behavior regarding HttpClient
>>> management.
>>> My only request would be to not instanciate a
>>> MultiThreadedHttpConnectionManager in the default case. A
>>> SimpleHttpConnectionManager would be good enough. I agree it's close to be a
>>> detail but still.
>>>
>>> Alexis
>>>
>>>
>>>
>>> On Mon, Mar 23, 2009 at 9:20 PM, Amila Suriarachchi <
>>> amilasuriarach...@gmail.com> wrote:
>>>
>>>>
>>>>
>>>> On Tue, Mar 24, 2009 at 4:16 AM, Alexis Midon <mi...@intalio.com>wrote:
>>>>
>>>>>
>>>>> It's already possible to reuse the HttpClient and with your own
>>>>> HttpConnectionManager. What you have to do is create the HttpClient by
>>>>> yourself with your connection manager and push it in the MessageContext.
>>>>
>>>>
>>>> I think this is a good point.
>>>> So if we set both HTTPConstants.REUSE_HTTP_CLIENT,
>>>> HTTPConstants.CACHED_HTTP_CLIENT then ultimately transport sender use that
>>>> client.
>>>> This means users can manage the way they need to use the httpClient at
>>>> application level. either they can use one httpClient for all the messages
>>>> or kept the HttpState at thread local.
>>>> So IMHO since this is a performance fine tuning,  it is ok to keep it in
>>>> this way and let users to mange it in the way they need at application
>>>> level.
>>>>
>>>> thanks,
>>>> Amila.
>>>>
>>>>>
>>>>>
>>>>> Alexis
>>>>>
>>>>>
>>>>>
>>>>> On Sun, Mar 22, 2009 at 3:52 AM, Amila Suriarachchi <
>>>>> amilasuriarach...@gmail.com> wrote:
>>>>>
>>>>>> hi all,
>>>>>>
>>>>>> recently I came across this link and according to this[1] creating new
>>>>>> http client for every request is not good
>>>>>> in performance wise.
>>>>>>
>>>>>> Current get Http client method looks like this
>>>>>>
>>>>>> protected HttpClient getHttpClient(MessageContext msgContext) {
>>>>>>         HttpClient httpClient;
>>>>>>         Object reuse =
>>>>>> msgContext.getOptions().getProperty(HTTPConstants.REUSE_HTTP_CLIENT);
>>>>>>         if (reuse == null) {
>>>>>>             reuse =
>>>>>> msgContext.getConfigurationContext().getProperty(HTTPConstants.REUSE_HTTP_CLIENT);
>>>>>>         }
>>>>>>         if (reuse != null && JavaUtils.isTrueExplicitly(reuse)) {
>>>>>>             httpClient = (HttpClient)
>>>>>> msgContext.getOptions().getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
>>>>>>             if (httpClient == null) {
>>>>>>                 httpClient = (HttpClient)
>>>>>> msgContext.getConfigurationContext()
>>>>>>
>>>>>> .getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
>>>>>>             }
>>>>>>             if (httpClient != null)
>>>>>>                 return httpClient;
>>>>>>             MultiThreadedHttpConnectionManager connectionManager =
>>>>>>                 new MultiThreadedHttpConnectionManager();
>>>>>>             httpClient = new HttpClient(connectionManager);
>>>>>>             msgContext.getConfigurationContext()
>>>>>>                 .setProperty(HTTPConstants.CACHED_HTTP_CLIENT,
>>>>>> httpClient);
>>>>>>         } else {
>>>>>>             HttpConnectionManager connManager =
>>>>>>                     (HttpConnectionManager) msgContext.getProperty(
>>>>>>
>>>>>> HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
>>>>>>             if (connManager == null) {
>>>>>>                 connManager =
>>>>>>                         (HttpConnectionManager)
>>>>>> msgContext.getProperty(
>>>>>>
>>>>>> HTTPConstants.MUTTITHREAD_HTTP_CONNECTION_MANAGER);
>>>>>>             }
>>>>>>             if(connManager != null){
>>>>>>                 httpClient = new HttpClient(connManager);
>>>>>>             } else {
>>>>>>                 //Multi threaded http connection manager has set as
>>>>>> the default
>>>>>>                 connManager = new
>>>>>> MultiThreadedHttpConnectionManager();
>>>>>>                 httpClient = new HttpClient(connManager);
>>>>>>             }
>>>>>>         }
>>>>>>
>>>>>>         // Get the timeout values set in the runtime
>>>>>>         initializeTimeouts(msgContext, httpClient);
>>>>>>         return httpClient;
>>>>>>     }
>>>>>>
>>>>>> According to the above article creating many http client instances are
>>>>>> not efficient. But if a user switch on the
>>>>>> HTTPConstants.REUSE_HTTP_CLIENT then he can not give an
>>>>>> MultiThreadedHttpConnectionManager object where users can define maximum
>>>>>> pool size, host configurations etc...
>>>>>>
>>>>>> Therefore I think it is better to have these features,
>>>>>>
>>>>>> 1. Let users to create the MultiThreadedHttpConnectionManager with its
>>>>>> own even when reusing http client.
>>>>>> 2. Does Http Client thread safe? if not we need to keep the cache copy
>>>>>> of the httpClient in a thread local variable.
>>>>>>
>>>>>> Does any one knows how to switch on the keep alive and will it make
>>>>>> any performance improvement?
>>>>>>
>>>>>> Anyway I still believe releasing connections  should be done at the
>>>>>> user level since it degradates the performance.
>>>>>>
>>>>>> thanks,
>>>>>> Amila.
>>>>>>
>>>>>>
>>>>>> [1] http://hc.apache.org/httpclient-3.x/performance.html
>>>>>>
>>>>>>
>>>>>> On Tue, Mar 10, 2009 at 2:26 AM, Andreas Veithen <
>>>>>> andreas.veit...@gmail.com> wrote:
>>>>>>
>>>>>>> I agree that we also need to consider OperationClient and the
>>>>>>> non-blocking methods. I think that the first step towards a solid
>>>>>>> solution is actually to write a couple of test cases that provide
>>>>>>> evidence for these issues and that we can later use for regression
>>>>>>> testing, but I will have to review the existing unit tests we have.
>>>>>>>
>>>>>>> Andreas
>>>>>>>
>>>>>>> On Wed, Mar 4, 2009 at 01:21, Alexis Midon <mi...@intalio.com>
>>>>>>> wrote:
>>>>>>> > Another case where "Options#setCallTransportCleanup for
>>>>>>> OperationClient" is
>>>>>>> > obvious is when you call OperationClient#execute in a non-blocking
>>>>>>> way.
>>>>>>> > The caller cannot clean up the transport safely, because the
>>>>>>> execution might
>>>>>>> > still be in progress. In that case it's OperationClient
>>>>>>> responsability to
>>>>>>> > clean up the transport.
>>>>>>> >
>>>>>>> > Alexis
>>>>>>> >
>>>>>>> >
>>>>>>> > On Mon, Mar 2, 2009 at 10:11 AM, Alexis Midon <mi...@intalio.com>
>>>>>>> wrote:
>>>>>>> >>
>>>>>>> >> There is still some inconsistencies between how
>>>>>>> ServiceClient#sendReceive
>>>>>>> >> and Operation#execute use Options#getCallTransportCleanup.
>>>>>>> >>
>>>>>>> >> And I think that would help a lot if the related jira issues get
>>>>>>> cleaned
>>>>>>> >> up a little bit.
>>>>>>> >>
>>>>>>> >> Thanks for your time and feedback.
>>>>>>> >>
>>>>>>> >> Alexis
>>>>>>> >>
>>>>>>> >>
>>>>>>> >> On Sun, Mar 1, 2009 at 9:02 PM, Amila Suriarachchi
>>>>>>> >> <amilasuriarach...@gmail.com> wrote:
>>>>>>> >>>
>>>>>>> >>> hi all,
>>>>>>> >>>
>>>>>>> >>> On Fri, Feb 27, 2009 at 6:35 PM, Andreas Veithen
>>>>>>> >>> <andreas.veit...@gmail.com> wrote:
>>>>>>> >>>>
>>>>>>> >>>> I think that callTransportCleanup should never be turned on by
>>>>>>> default
>>>>>>> >>>> because it would disable deferred parsing of the response. What
>>>>>>> needs
>>>>>>> >>>> to be done urgently is to improve the documentation of the
>>>>>>> >>>> ServiceClient class to make it clear that it is mandatory to
>>>>>>> either
>>>>>>> >>>> call cleanupTransport explicitly or to set callTransportCleanup
>>>>>>> to
>>>>>>> >>>> true. Also the cleanupTransport method itself doesn't have any
>>>>>>> >>>> Javadoc.
>>>>>>> >>>
>>>>>>> >>> thanks for in-depth analysing  of this issue. If the issue is not
>>>>>>> calling
>>>>>>> >>> to transport clean up then I clearly agree with what Andreas.
>>>>>>> >>>
>>>>>>> >>> Axis2 uses deffered building. There when the user gets the
>>>>>>> response
>>>>>>> >>> OMElement it has not build and Axis2 does not know when he going
>>>>>>> to finish
>>>>>>> >>> with it. So it is responsibility of the user to call the
>>>>>>> transport clean up
>>>>>>> >>> once they have done with the OMElement.
>>>>>>> >>>
>>>>>>> >>> But this problem does not occur with the generated data bind
>>>>>>> code. There
>>>>>>> >>> before returning from the stub method it generates the all the
>>>>>>> databinding
>>>>>>> >>> classes. In the generated code finally method calls
>>>>>>> >>>
>>>>>>> _messageContext.getTransportOut().getSender().cleanup(_messageContext);
>>>>>>> >>>
>>>>>>> >>> to clean up the transport.
>>>>>>> >>>
>>>>>>> >>> thanks,
>>>>>>> >>> Amila.
>>>>>>> >>>>
>>>>>>> >>>> Andreas
>>>>>>> >>>>
>>>>>>> >>>> On Fri, Feb 27, 2009 at 12:19, Dobri Kitipov
>>>>>>> >>>> <kdobrik.ax...@googlemail.com> wrote:
>>>>>>> >>>> > Hi Andreas,
>>>>>>> >>>> > thank you for the comment. I think you get the question.
>>>>>>> >>>> > Quick test shows that setting the following line of code into
>>>>>>> the
>>>>>>> >>>> > client:
>>>>>>> >>>> >
>>>>>>> >>>> > options.setCallTransportCleanup(true);
>>>>>>> >>>> >
>>>>>>> >>>> > forces the closure of the http connection. It seems it is not
>>>>>>> the
>>>>>>> >>>> > default
>>>>>>> >>>> > behavior. This is a good and fast solution. I was a little bit
>>>>>>> more
>>>>>>> >>>> > focused
>>>>>>> >>>> > on wondering why I have such a difference b/n using SOAP and
>>>>>>> MIME
>>>>>>> >>>> > builder.
>>>>>>> >>>> >
>>>>>>> >>>> > I need to think about some use cases when we need to have
>>>>>>> >>>> > options.setCallTransportCleanup(false). Can we have this by
>>>>>>> default in
>>>>>>> >>>> > some
>>>>>>> >>>> > cases?
>>>>>>> >>>> >
>>>>>>> >>>> > Anyway, it will be worth having a further analysis of the
>>>>>>> issue we
>>>>>>> >>>> > have with
>>>>>>> >>>> > SOAPBuilder behavior.
>>>>>>> >>>> >
>>>>>>> >>>> > Thank you,
>>>>>>> >>>> > Dobri
>>>>>>> >>>> >
>>>>>>> >>>> >
>>>>>>> >>>> > On Fri, Feb 27, 2009 at 12:46 PM, Andreas Veithen
>>>>>>> >>>> > <andreas.veit...@gmail.com> wrote:
>>>>>>> >>>> >>
>>>>>>> >>>> >> If I understand correctly, Dobri's findings can be summarized
>>>>>>> as
>>>>>>> >>>> >> follows:
>>>>>>> >>>> >> 1. Once the InputStream is consumed, commons-httpclient
>>>>>>> automatically
>>>>>>> >>>> >> releases the connection.
>>>>>>> >>>> >> 2. SOAPBuilder never completely consumes the InputStream.
>>>>>>> >>>> >>
>>>>>>> >>>> >> The SOAPBuilder behavior is indeed somewhat questionable, but
>>>>>>> it is
>>>>>>> >>>> >> important to understand that because of the deferred parsing
>>>>>>> model
>>>>>>> >>>> >> used by Axiom, there is never a guarantee that the
>>>>>>> InputStream will
>>>>>>> >>>> >> be
>>>>>>> >>>> >> completely consumed. Normally releasing the connection is the
>>>>>>> >>>> >> responsibility of the CommonsHTTPTransportSender#cleanup
>>>>>>> method which
>>>>>>> >>>> >> should be called by ServiceClient#cleanupTransport. It would
>>>>>>> be
>>>>>>> >>>> >> interesting to know if that method is called, and if it is,
>>>>>>> why it
>>>>>>> >>>> >> fails to release the connection.
>>>>>>> >>>> >>
>>>>>>> >>>> >> Andreas
>>>>>>> >>>> >>
>>>>>>> >>>> >> On Fri, Feb 27, 2009 at 10:10, Dobri Kitipov
>>>>>>> >>>> >> <kdobrik.ax...@googlemail.com> wrote:
>>>>>>> >>>> >> > Hi all,
>>>>>>> >>>> >> > I have observed absolutely the same thing these days. I
>>>>>>> need some
>>>>>>> >>>> >> > more
>>>>>>> >>>> >> > time
>>>>>>> >>>> >> > to analyze the whole picture, but here is my current
>>>>>>> synthesis of
>>>>>>> >>>> >> > the
>>>>>>> >>>> >> > issue.
>>>>>>> >>>> >> >
>>>>>>> >>>> >> > It seems that http connection release is tightly coupled
>>>>>>> with the
>>>>>>> >>>> >> > Axis2
>>>>>>> >>>> >> > builder used to handle and process the response body and
>>>>>>> the
>>>>>>> >>>> >> > corresponding
>>>>>>> >>>> >> > input streams used. The builder and the InputStream used
>>>>>>> are based
>>>>>>> >>>> >> > on
>>>>>>> >>>> >> > the
>>>>>>> >>>> >> > HTTP headers fields like "Content-Type" and
>>>>>>> "Transfer-Encoding"
>>>>>>> >>>> >> > (e.g.
>>>>>>> >>>> >> > Content-Type: text/xml; charset=UTF-8  Transfer-Encoding:
>>>>>>> chunked).
>>>>>>> >>>> >> > So
>>>>>>> >>>> >> > if we
>>>>>>> >>>> >> > have Content-Type: text/xml; then SOAPBuilder class will be
>>>>>>> used.
>>>>>>> >>>> >> > If we
>>>>>>> >>>> >> > have  type="application/xop+xml" then MIMEBuilder will be
>>>>>>> used.
>>>>>>> >>>> >> >
>>>>>>> >>>> >> > The successfull story when we have MIMIBuilder:
>>>>>>> >>>> >> >
>>>>>>> >>>> >> > When MIMEBuilder is used then the response Buffered
>>>>>>> InputStream
>>>>>>> >>>> >> > (IS) is
>>>>>>> >>>> >> > wrrapped (I will use "->" sign as substitution for
>>>>>>> wrrapped)
>>>>>>> >>>> >> > ChunkedIS
>>>>>>> >>>> >> > ->
>>>>>>> >>>> >> > AutoCloseIS (this has a responseConsumed() method notified
>>>>>>> when
>>>>>>> >>>> >> > IS.read()
>>>>>>> >>>> >> > returns -1, which means that the response IS has been
>>>>>>> completely
>>>>>>> >>>> >> > read)
>>>>>>> >>>> >> > ->
>>>>>>> >>>> >> > PushBackIS ->BounderyPushBackIS. The BounderyPushBackIS
>>>>>>> reads the
>>>>>>> >>>> >> > response
>>>>>>> >>>> >> > stream (see readFromStream(....)) in a cycle till it
>>>>>>> reaches its
>>>>>>> >>>> >> > end. At
>>>>>>> >>>> >> > every iteration of this cycle a AutoCloseIS checkClose(l)
>>>>>>> is
>>>>>>> >>>> >> > invoked. So
>>>>>>> >>>> >> > when the end is reached (-1 is returned) then this check
>>>>>>> causes the
>>>>>>> >>>> >> > invokation of the AutoCloseIS checkClose(...)  method. This
>>>>>>> method
>>>>>>> >>>> >> > invokes
>>>>>>> >>>> >> > notifyWatcher() that in turn invokes responseBodyConsumed()
>>>>>>> method
>>>>>>> >>>> >> > of
>>>>>>> >>>> >> > the
>>>>>>> >>>> >> > HttpMethodBase class. This causes the release of the http
>>>>>>> >>>> >> > connection
>>>>>>> >>>> >> > which
>>>>>>> >>>> >> > is returned back to the connection pool. So here we have no
>>>>>>> problem
>>>>>>> >>>> >> > with
>>>>>>> >>>> >> > connection reuse.
>>>>>>> >>>> >> >
>>>>>>> >>>> >> > The bad story we have with SOAPBuilder:
>>>>>>> >>>> >> >
>>>>>>> >>>> >> > When SOAPBuilder is used then the response Buffered
>>>>>>> InputStream is
>>>>>>> >>>> >> > wrrapped
>>>>>>> >>>> >> > in a ChunkedIS -> AutoCloseIS -> PushBackIS. May be you has
>>>>>>> noticed
>>>>>>> >>>> >> > that
>>>>>>> >>>> >> > BounderyPushBackIS is not used. As a result the respose IS
>>>>>>> is not
>>>>>>> >>>> >> > completely
>>>>>>> >>>> >> > read (in fact this is not really correct, it could be read
>>>>>>> but the
>>>>>>> >>>> >> > invokation of the PushBackIS unread(...) method causes the
>>>>>>> >>>> >> > AutoCloseIS
>>>>>>> >>>> >> > checkClose() method never to return -1). As a result the
>>>>>>> http
>>>>>>> >>>> >> > connection
>>>>>>> >>>> >> > is
>>>>>>> >>>> >> > not released. And since there is a limit to have 2
>>>>>>> connection per
>>>>>>> >>>> >> > host
>>>>>>> >>>> >> > then after the second invokation of the WS client the
>>>>>>> thread hangs
>>>>>>> >>>> >> > waiting
>>>>>>> >>>> >> > for a free connection.
>>>>>>> >>>> >> >
>>>>>>> >>>> >> > Please, provide us with your comments on this issue.
>>>>>>> >>>> >> >
>>>>>>> >>>> >> > Thank you in advance.
>>>>>>> >>>> >> >
>>>>>>> >>>> >> > Regards,
>>>>>>> >>>> >> > Dobri
>>>>>>> >>>> >> >
>>>>>>> >>>> >> > On Fri, Feb 27, 2009 at 3:54 AM, Alexis Midon <
>>>>>>> mi...@intalio.com>
>>>>>>> >>>> >> > wrote:
>>>>>>> >>>> >> >>
>>>>>>> >>>> >> >> no taker for an easy patch?
>>>>>>> >>>> >> >>
>>>>>>> >>>> >> >> Alexis
>>>>>>> >>>> >> >>
>>>>>>> >>>> >> >>
>>>>>>> >>>> >> >> On Wed, Feb 25, 2009 at 6:45 PM, Alexis Midon <
>>>>>>> mi...@intalio.com>
>>>>>>> >>>> >> >> wrote:
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>> Hi everyone,
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>> All the issues relatives to AXIS2-935 are really messy,
>>>>>>> some of
>>>>>>> >>>> >> >>> them
>>>>>>> >>>> >> >>> are
>>>>>>> >>>> >> >>> closed but their clones are not. Some are flagged as
>>>>>>> fixed but
>>>>>>> >>>> >> >>> are
>>>>>>> >>>> >> >>> obviously
>>>>>>> >>>> >> >>> not. All these issues are really old, so I'd like to take
>>>>>>> a
>>>>>>> >>>> >> >>> chance to
>>>>>>> >>>> >> >>> bring
>>>>>>> >>>> >> >>> them back to your attention, especially before releasing
>>>>>>> 1.5.
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>> I'll post a description of the issue in this email as a
>>>>>>> summary
>>>>>>> >>>> >> >>> all
>>>>>>> >>>> >> >>> the
>>>>>>> >>>> >> >>> jiras.
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>> By default, ServiceClient uses one HttpConnectionManager
>>>>>>> per
>>>>>>> >>>> >> >>> invocation
>>>>>>> >>>> >> >>> [2]. This connection manager will create and provide one
>>>>>>> >>>> >> >>> connection to
>>>>>>> >>>> >> >>> HTTPSender. The first issue is that by default this
>>>>>>> connection is
>>>>>>> >>>> >> >>> never
>>>>>>> >>>> >> >>> released to the pool [3]. if you do zillions of
>>>>>>> invocations, this
>>>>>>> >>>> >> >>> leak
>>>>>>> >>>> >> >>> will
>>>>>>> >>>> >> >>> max out your number of file descriptors.
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>> Your investigations in Axis2 options quickly lead you to
>>>>>>> the
>>>>>>> >>>> >> >>> REUSE_HTTP_CLIENT option. But this first issue has some
>>>>>>> >>>> >> >>> unfortunate
>>>>>>> >>>> >> >>> consequences if you activate it. Actually if you do so, a
>>>>>>> single
>>>>>>> >>>> >> >>> connection
>>>>>>> >>>> >> >>> manager is shared across all invocations. But because
>>>>>>> connections
>>>>>>> >>>> >> >>> are
>>>>>>> >>>> >> >>> not
>>>>>>> >>>> >> >>> release, the pool is starved after two invocations, and
>>>>>>> the third
>>>>>>> >>>> >> >>> invocation
>>>>>>> >>>> >> >>> hangs out indefinitely. :(
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>> If you keep digging you will find the
>>>>>>> AUTO_RELEASE_CONNECTION
>>>>>>> >>>> >> >>> option.
>>>>>>> >>>> >> >>> Its
>>>>>>> >>>> >> >>> sounds like a good lead! Let's try it. If you activate
>>>>>>> this
>>>>>>> >>>> >> >>> option the
>>>>>>> >>>> >> >>> connection is properly released -Yahoooo! the leak is
>>>>>>> fixed - but
>>>>>>> >>>> >> >>> unfortunately a new issue shows up (issue #2, aka
>>>>>>> AXIS2-3478).
>>>>>>> >>>> >> >>> AbstractHTTPSender passes the stream of the connection to
>>>>>>> the
>>>>>>> >>>> >> >>> message
>>>>>>> >>>> >> >>> context [4] , but that the connection is now properly
>>>>>>> released,
>>>>>>> >>>> >> >>> so
>>>>>>> >>>> >> >>> this
>>>>>>> >>>> >> >>> stream is closed before the SOAPBuilder gets a chance to
>>>>>>> read the
>>>>>>> >>>> >> >>> response
>>>>>>> >>>> >> >>> body.
>>>>>>> >>>> >> >>> Boom! "IOException: Attempted read on closed stream"
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>> These issues are easily reproducible in versions 1.3,
>>>>>>> 1.4, 1.5.
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>> I submitted and documented a fix in AXIS2-2931 [5], if
>>>>>>> you had a
>>>>>>> >>>> >> >>> chance
>>>>>>> >>>> >> >>> to look at it that would be much appreciate.
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>> Alexis
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>> [1]
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>>
>>>>>>> https://issues.apache.org/jira/browse/AXIS2-935?focusedCommentId=12513543#action_12513543
>>>>>>> >>>> >> >>> [2] see method getHttpClient in
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>>
>>>>>>> https://svn.apache.org/repos/asf/webservices/commons/trunk/modules/transport/modules/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java
>>>>>>> >>>> >> >>> [3] see method cleanup in
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>>
>>>>>>> https://svn.apache.org/repos/asf/webservices/commons/trunk/modules/transport/modules/http/src/org/apache/axis2/transport/http/HTTPSender.java
>>>>>>> >>>> >> >>> [4] see method processResponse in AbstractHTTPSender.java
>>>>>>> >>>> >> >>> [5]
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>>
>>>>>>> >>>> >> >>>
>>>>>>> https://issues.apache.org/jira/browse/AXIS2-2931?focusedCommentId=12676837#action_12676837
>>>>>>> >>>> >> >>
>>>>>>> >>>> >> >
>>>>>>> >>>> >> >
>>>>>>> >>>> >
>>>>>>> >>>> >
>>>>>>> >>>
>>>>>>> >>>
>>>>>>> >>>
>>>>>>> >>> --
>>>>>>> >>> Amila Suriarachchi
>>>>>>> >>> WSO2 Inc.
>>>>>>> >>> blog: http://amilachinthaka.blogspot.com/
>>>>>>> >>
>>>>>>> >
>>>>>>> >
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Amila Suriarachchi
>>>>>> WSO2 Inc.
>>>>>> blog: http://amilachinthaka.blogspot.com/
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Amila Suriarachchi
>>>> WSO2 Inc.
>>>> blog: http://amilachinthaka.blogspot.com/
>>>>
>>>
>>>
>>
>

Reply via email to