On 29/08/13 11:33, Thibaut Robert wrote:
On Wed, Aug 28, 2013 at 5:24 PM, Sergey Beryozkin <[email protected]> wrote:
Hi

On 28/08/13 10:44, Thibaut Robert wrote:

Hi,

I have some jax-rs service beans deployed via Spring. I use the
jaxrs:server tag with the beanNames attribute to specify my bean. My
beans are in a custom spring scope.

Everything works fine, except that I notice that both Spring and cxf
calls my @PostConstruct and @PreDestroy methods. I think this is a bit
confusing. As cxf SpringResourceFactory delegate the resource
lifecycle to spring, why is it calling itself the lifecycle methods ?

In my case, the @Postconstruct is called twice at the first request
(by spring then cxf). Then once per request (by cxf), whereas it is
using an already existing instance. I would prefer cxf doesn't call
the methods at all.

I think I added it in a 'copy-and-paste' kind of fashion, the runtime would
release a current service instance and if it is a per-request instance
explicitly managed by the runtime then it makes sense, but I can see now it
may cause side-effects, I'll make SpringResourceFactory calling lifecycle
methods only if requested by the user, in meantime, the workaround is to
register a custom SpringResourceFactory which will ignore release calls

I am just wondering if there is a use case where calling the lifecycle
method is usefull. Even a per request instance, if you put it in
request scope, the methods will be called by spring. Maybe if you use
prototype scope ? But in my view, the lifecycle has to be managed by
the container owning the bean, which is always spring with this
factory.

You are right, I've played a bit and see Spring factory duplicating what Spring does too, so I will disable it by default, will keep an optional flag there just in case


For the moment I will either use your workaround, or declare my
lifecycle methods in my spring xml file.

Sure, the latter option can be even simpler, at the moment it is not easy to block the post construct call, will fix that too

Thanks, Sergey



Thanks for kind support!
Thibaut

Cheers, Sergey

Regards,
Thibaut



Reply via email to