On Jun 26, 2014, at 12:50 PM, Sergey Beryozkin <[email protected]> wrote:
> On 26/06/14 17:28, Sergey Beryozkin wrote: >> Hi >> On 26/06/14 13:11, [email protected] wrote: >>> Hi Sergey, >>> >>> thanks for your prompt response. You are right, what I saw in the heap >>> dump >>> were links to the provider class, which prevented the classloader from >>> being garbage collected. >>> >>> The provider in question is registered via the standard JAX-RS means, in >>> the getSingletons method of javax.ws.rs.core.Application. This is done >>> this >>> way because we need to configure the JacksonJaxbJsonProvider. >>> >> >> I've confirmed that the context info JAX-RS provider stored on the Bus >> contains the actual provider classes - this needs to be fixed. >> I'll look into it > This is ok in itself but due to Tomee having a default bus shared between the > endpoints it becomes a problem after redeployments. > > Hmm... I'll need to think how to overcome it… Personally, I think that’s a bug in Tomee. They shouldn’t have a Bus that’s shared across everything. There’s lots of various things (like token/nonce caches) and such that are sometimes cached on the Bus. Dan > > Cheers, Sergey > > >> >> Thanks, Sergey >> >>> I'll check with the Tomee team to see if endpoint specific buses are >>> possible. >>> >>> Thanks a lot. >>> >>> >>> On 26 June 2014 07:10, Sergey Beryozkin <[email protected]> wrote: >>> >>>> Hi >>>> >>>> On 26/06/14 04:32, [email protected] wrote: >>>> >>>>> Hi All, >>>>> >>>>> hope you are doing well. We've been using Tomee as our application >>>>> server >>>>> lately (we have some basic JAX-RS APIs), and after several >>>>> redeployments >>>>> we >>>>> get a PermGen space error. I've been digging into the heap dump, and >>>>> from >>>>> what I see our custom JAX-RS provider (JacksonJaxbJsonProvider) is >>>>> being >>>>> referenced inside ExtensionManagerBus's properties and never >>>>> unregistered. >>>>> >>>>> I'm pretty sure it's Tomee's fault, because it should be doing due >>>>> cleanup >>>>> on undeployment, but I was wondering whether the ExtensionManagerBus >>>>> has >>>>> any way of removing the registered providers. >>>>> >>>>> CXF JAX-RS checks provider context properties when it registers >>>> providers and stores reflection-specific information and proxies on the >>>> bus, it does not store the actual providers. >>>> >>>> Do you have some more info how Bus ends up linking to the provider ? >>>> We have a feature allowing providers registered directly on the bus via >>>> bus properties, is it what is being done in your case ? >>>> >>>> If not then I'm not sure. ProviderFactory holding providers is >>>> registered >>>> on the endpoint but I'm not seeing the code where the endpoint is >>>> registered on the bus. >>>> >>>> Either way, the problem appears to be originating from the fact that a >>>> single shared bus is used between multiple endpoints in Tomee. Is it >>>> possible in Tomee endpoint descriptors set up an endpoint specific bus ? >>>> For example, in Spring/Blueprint descriptors which can declare a new CXF >>>> Bus and have jaxrs/jaxws endpoints linking to it and this bus would be >>>> recycled on the redeployment. >>>> >>>> So, please let me know: >>>> - if you have more info about the link from Bus to providers >>>> - check if providers are registered directly on the bus (check its >>>> properties like "javax.ws.rs.ext.MessageBodyReader") >>>> - check if Tomee allows creating endpoint specific buses >>>> >>>> Lets us know please how it goes >>>> >>>> Thanks, Sergey >>>> >>>> >>>> >>>> >>>> Any help would be appreaciated >>>>> Thanks in advance. -- Daniel Kulp [email protected] - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
