You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Sergey Beryozkin <sb...@gmail.com> on 2014/11/03 15:05:26 UTC
Re: JaxRs: reuse of WebTarget can cause OOM
This should cover it:
http://git-wip-us.apache.org/repos/asf/cxf/commit/61c7b99b
Thanks, Sergey
On 31/10/14 21:18, Sergey Beryozkin wrote:
> Hi Hartmut,
> On 31/10/14 20:08, Hartmut Lang wrote:
>> Hi Sergey,
>> thanks for looking into this.
>> I will do some checks.
>> But just on looking at the change you did let me ask this:
>> now using the weak-reference the close will only be called on some of the
>> WebClients (those which are not yet GCed), right? Does this make sense?
>>
> You are right. WebTarget delegates to a CXF specific WebClient, every
> WebClient operates on the instance of CXF HttpConduit. I think not
> having all of WebTargets being closed pro-actively is not a major problem.
> The only problem I can imagine is that when WebTarget is closed via a
> Client.close(), the underlying WebClient would also notify various
> listeners, etc...
> It might make sense to have WebTarget finalize() implemented carefully
> to ensure the underlying WebClient.close() is called...
> I'll think about it and update you when I'm done...
>
> Cheers, Sergey
>
>> Hartmut
>>
>> 2014-10-28 13:46 GMT+01:00 Sergey Beryozkin <sb...@gmail.com>:
>>
>>> Hi
>>>
>>> I updated ClientImpl to use WeakHashMap, see
>>>
>>> https://issues.apache.org/jira/browse/CXF-6066
>>> and
>>> http://git-wip-us.apache.org/repos/asf/cxf/commit/c9e85e76
>>>
>>> Can you please experiment with 3.0.3-SNAPSHOT a bit later on just to
>>> confirm the issue has gone away ?
>>>
>>> Thanks, Sergey
>>>
>>> On 28/10/14 11:22, Sergey Beryozkin wrote:
>>>
>>>> Hi
>>>>
>>>> I left right after I replied, sorry for a delay...
>>>> I'm going to deal with this issue right now
>>>>
>>>> Thanks, Sergey
>>>> On 23/10/14 11:26, Hartmut Lang wrote:
>>>>
>>>>> Hi,
>>>>> thanks for your response.
>>>>> Should i open an issue for this?
>>>>>
>>>>> Hartmut
>>>>>
>>>>> 2014-10-23 10:43 GMT+02:00 Sergey Beryozkin <sb...@gmail.com>:
>>>>>
>>>>> Hi
>>>>>> On 23/10/14 08:41, Hartmut Lang wrote:
>>>>>>
>>>>>> Hi,
>>>>>>>
>>>>>>> my question is how i can reuse (or not) the WebTarget of a JaxRs
>>>>>>> Client
>>>>>>> with CXF 3.0.2.
>>>>>>>
>>>>>>> My scenario is roughly like this:
>>>>>>>
>>>>>>> Init:
>>>>>>> Client client = ClientBuilder.newBuilder().
>>>>>>> register(JacksonJsonProvider.class).
>>>>>>> build();
>>>>>>> WebTarget target = client.target(baseUrl).path("
>>>>>>> lights/{lightNum}/{state}");
>>>>>>>
>>>>>>>
>>>>>>> Then i issue several (thousands) requests like this:
>>>>>>>
>>>>>>> Invocation.Builder builder = target.
>>>>>>> resolveTemplate("lightNum", lightNum).
>>>>>>> resolveTemplate("state", state).
>>>>>>> request();
>>>>>>> Response response = builder.put(null);
>>>>>>> response.close();
>>>>>>>
>>>>>>> What i see is, that for every request a new WebClient-Object is
>>>>>>> created
>>>>>>> and
>>>>>>> added to
>>>>>>> ClientImpl.baseClients-HashMap.
>>>>>>> And finally i can run into OOM-issues.
>>>>>>>
>>>>>>> Right, that was the quick implementation to support the
>>>>>>> Client.close()
>>>>>> docs saying:
>>>>>>
>>>>>> "Calling this method effectively invalidates all resource targets
>>>>>> produced
>>>>>> by the client instance. Invoking any method on such targets once the
>>>>>> client
>>>>>> is closed would result in an IllegalStateException being thrown."
>>>>>>
>>>>>> To be honest the fact most of WebTarget methods create new WebTargets
>>>>>> may
>>>>>> indeed lead to some unexpected results, though in this case the bug
>>>>>> is in
>>>>>> the CXF code, i.e, I guess it has to be a WeakHashMap, I'll take care
>>>>>> of it
>>>>>> next week as I'm off shortly...
>>>>>>
>>>>>>
>>>>>>> My question:
>>>>>>> - is it ok to reuse the WebTarget for several requests?
>>>>>>>
>>>>>>>
>>>>>> I guess for now it is better to reuse for a small number of requests
>>>>>>
>>>>>> - if i close the client and create a new one, this solves this
>>>>>> issue. Is
>>>>>>
>>>>>>> this the intended live-cycle of Client/WebTarget?
>>>>>>>
>>>>>>>
>>>>>> yes, this is my understanding.
>>>>>>
>>>>>> Thanks, Sergey
>>>>>>
>>>>>>
>>>>>>> Thanks,
>>>>>>> Hartmut
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>> --
>>> Sergey Beryozkin
>>>
>>> Talend Community Coders
>>> http://coders.talend.com/
>>>
>>> Blog: http://sberyozkin.blogspot.com
>>>
>>
>