You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Aruna Kalagnanam <ka...@gmail.com> on 2017/03/12 06:37:10 UTC

Singleton JAX-RS resource

Hello

I'm using Apache CXF 3.1.9 with Tomcat 7. I have written a JAX-RS
application with a JAX-RS resource and subclassed Application class. I
realized that the JAX-RS resource is per-request scoped by default. I would
like to make it application scoped. Using @Singleton doesnt work.

I could override the getSingletons() method of my Application subclass, but
doing that turns off auto scanning of @Provider classes. Auto scanning is
important for my application because I'm using a library which has filters
that have to be included automatically by scanning.

How can I create a singleton JAX-RS resource and still use auto scanning of
@Provider capability.

Thanks,
Aruna.

Re: Singleton JAX-RS resource

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Aruna

Thanks for testing it. To be honest I don't remember a CXF JAX-RS 
frontend ever having a @Singleton annotation, I found
https://issues.apache.org/jira/browse/CXF-2196

but it was marked as Invalid in the end.

At this stage I'd rather consider trying to find some time to get 
javax.inject.Singleton supported, etc.

Can you clarify please which CXF version did you see @Singleton in ?

CXF 3.1.11 will be likely released quite soon, in a couple of weeks may be

Sergey
On 14/03/17 08:54, Aruna Kalagnanam wrote:
> Hi Sergey
>
> It is working, the JAX-RS resource is now treated as singleton. I also see
> that @Singleton is no longer available as part of the cxf frontend rs
> module.
> Will you be releasing the 3.1.11 version soon ?
>
> Thanks for your help,
> Aruna.
>
>
> On Mon, Mar 13, 2017 at 8:43 PM, Sergey Beryozkin <sb...@gmail.com>
> wrote:
>
>> I deployed the related CXF 3.1.11-SNAPSHOT modules, so please try when you
>> get a chance...
>>
>> Cheers, Sergey
>>
>> On 13/03/17 15:11, Sergey Beryozkin wrote:
>>
>>> Hi
>>>
>>> We did some work on the master (3.2.0-SNAPSHOT) for overriding the
>>> default lifecycle of Application.getClasses, using the existing
>>> jaxrs.scope servlet parameter, as part of the SSE work, and I pushed
>>> most of those updated to 3.1.11-SNAPSHOT.
>>> However that is not enough in your case, so I just tweaked a code a bit
>>> more, if you have an empty Application with its getProperties() method
>>> returning "jaxrs.scope"="singleton" then the (auto-discovered)
>>> Application.getClasses will be treated as singletons even if they are
>>> not providers but the resource classes.
>>>
>>> I could've also added a CXF specific @Singleton annotation but the
>>> Application.getProperties() is less intrusive and is portable (this
>>> property will simply be ignored with other implementations), while we
>>> also plan with Andriy to introduce a proper support for the alternative
>>> injection strategies (so as to cover for ex CDI Singleton, etc)
>>>
>>> Cheers, Sergey
>>>
>>> On 13/03/17 11:21, Aruna Kalagnanam wrote:
>>>
>>>> Hi Sergey
>>>>
>>>> Yes, I'm using the cxf http-sci module and no web.xml.
>>>>
>>>> Thanks,
>>>> Aruna.
>>>>
>>>> On Mar 13, 2017 16:23, "Sergey Beryozkin" <sb...@gmail.com> wrote:
>>>>
>>>> Hi
>>>>>
>>>>> On 12/03/17 06:37, Aruna Kalagnanam wrote:
>>>>>
>>>>> Hello
>>>>>>
>>>>>> I'm using Apache CXF 3.1.9 with Tomcat 7. I have written a JAX-RS
>>>>>> application with a JAX-RS resource and subclassed Application class. I
>>>>>> realized that the JAX-RS resource is per-request scoped by default. I
>>>>>> would
>>>>>> like to make it application scoped. Using @Singleton doesnt work.
>>>>>>
>>>>>> I could override the getSingletons() method of my Application subclass,
>>>>>> but
>>>>>> doing that turns off auto scanning of @Provider classes. Auto
>>>>>> scanning is
>>>>>> important for my application because I'm using a library which has
>>>>>> filters
>>>>>> that have to be included automatically by scanning.
>>>>>>
>>>>>> How can I create a singleton JAX-RS resource and still use auto
>>>>>> scanning
>>>>>> of
>>>>>> @Provider capability.
>>>>>>
>>>>>>
>>>>> Can you explain please, how is this Application registered, do you use a
>>>>> cxf-rt-rs-http-sci module which ships ServletContextInitializer ?
>>>>>
>>>>> Thanks, Sergey
>>>>>
>>>>>
>>>>>> Thanks,
>>>>>> Aruna.
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>> --
>> Sergey Beryozkin
>>
>> Talend Community Coders
>> http://coders.talend.com/
>>
>


Re: Singleton JAX-RS resource

Posted by Aruna Kalagnanam <ka...@gmail.com>.
Hi Sergey

It is working, the JAX-RS resource is now treated as singleton. I also see
that @Singleton is no longer available as part of the cxf frontend rs
module.
Will you be releasing the 3.1.11 version soon ?

Thanks for your help,
Aruna.


On Mon, Mar 13, 2017 at 8:43 PM, Sergey Beryozkin <sb...@gmail.com>
wrote:

> I deployed the related CXF 3.1.11-SNAPSHOT modules, so please try when you
> get a chance...
>
> Cheers, Sergey
>
> On 13/03/17 15:11, Sergey Beryozkin wrote:
>
>> Hi
>>
>> We did some work on the master (3.2.0-SNAPSHOT) for overriding the
>> default lifecycle of Application.getClasses, using the existing
>> jaxrs.scope servlet parameter, as part of the SSE work, and I pushed
>> most of those updated to 3.1.11-SNAPSHOT.
>> However that is not enough in your case, so I just tweaked a code a bit
>> more, if you have an empty Application with its getProperties() method
>> returning "jaxrs.scope"="singleton" then the (auto-discovered)
>> Application.getClasses will be treated as singletons even if they are
>> not providers but the resource classes.
>>
>> I could've also added a CXF specific @Singleton annotation but the
>> Application.getProperties() is less intrusive and is portable (this
>> property will simply be ignored with other implementations), while we
>> also plan with Andriy to introduce a proper support for the alternative
>> injection strategies (so as to cover for ex CDI Singleton, etc)
>>
>> Cheers, Sergey
>>
>> On 13/03/17 11:21, Aruna Kalagnanam wrote:
>>
>>> Hi Sergey
>>>
>>> Yes, I'm using the cxf http-sci module and no web.xml.
>>>
>>> Thanks,
>>> Aruna.
>>>
>>> On Mar 13, 2017 16:23, "Sergey Beryozkin" <sb...@gmail.com> wrote:
>>>
>>> Hi
>>>>
>>>> On 12/03/17 06:37, Aruna Kalagnanam wrote:
>>>>
>>>> Hello
>>>>>
>>>>> I'm using Apache CXF 3.1.9 with Tomcat 7. I have written a JAX-RS
>>>>> application with a JAX-RS resource and subclassed Application class. I
>>>>> realized that the JAX-RS resource is per-request scoped by default. I
>>>>> would
>>>>> like to make it application scoped. Using @Singleton doesnt work.
>>>>>
>>>>> I could override the getSingletons() method of my Application subclass,
>>>>> but
>>>>> doing that turns off auto scanning of @Provider classes. Auto
>>>>> scanning is
>>>>> important for my application because I'm using a library which has
>>>>> filters
>>>>> that have to be included automatically by scanning.
>>>>>
>>>>> How can I create a singleton JAX-RS resource and still use auto
>>>>> scanning
>>>>> of
>>>>> @Provider capability.
>>>>>
>>>>>
>>>> Can you explain please, how is this Application registered, do you use a
>>>> cxf-rt-rs-http-sci module which ships ServletContextInitializer ?
>>>>
>>>> Thanks, Sergey
>>>>
>>>>
>>>>> Thanks,
>>>>> Aruna.
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>>
>
> --
> Sergey Beryozkin
>
> Talend Community Coders
> http://coders.talend.com/
>

Re: Singleton JAX-RS resource

Posted by Sergey Beryozkin <sb...@gmail.com>.
I deployed the related CXF 3.1.11-SNAPSHOT modules, so please try when 
you get a chance...

Cheers, Sergey
On 13/03/17 15:11, Sergey Beryozkin wrote:
> Hi
>
> We did some work on the master (3.2.0-SNAPSHOT) for overriding the
> default lifecycle of Application.getClasses, using the existing
> jaxrs.scope servlet parameter, as part of the SSE work, and I pushed
> most of those updated to 3.1.11-SNAPSHOT.
> However that is not enough in your case, so I just tweaked a code a bit
> more, if you have an empty Application with its getProperties() method
> returning "jaxrs.scope"="singleton" then the (auto-discovered)
> Application.getClasses will be treated as singletons even if they are
> not providers but the resource classes.
>
> I could've also added a CXF specific @Singleton annotation but the
> Application.getProperties() is less intrusive and is portable (this
> property will simply be ignored with other implementations), while we
> also plan with Andriy to introduce a proper support for the alternative
> injection strategies (so as to cover for ex CDI Singleton, etc)
>
> Cheers, Sergey
>
> On 13/03/17 11:21, Aruna Kalagnanam wrote:
>> Hi Sergey
>>
>> Yes, I'm using the cxf http-sci module and no web.xml.
>>
>> Thanks,
>> Aruna.
>>
>> On Mar 13, 2017 16:23, "Sergey Beryozkin" <sb...@gmail.com> wrote:
>>
>>> Hi
>>>
>>> On 12/03/17 06:37, Aruna Kalagnanam wrote:
>>>
>>>> Hello
>>>>
>>>> I'm using Apache CXF 3.1.9 with Tomcat 7. I have written a JAX-RS
>>>> application with a JAX-RS resource and subclassed Application class. I
>>>> realized that the JAX-RS resource is per-request scoped by default. I
>>>> would
>>>> like to make it application scoped. Using @Singleton doesnt work.
>>>>
>>>> I could override the getSingletons() method of my Application subclass,
>>>> but
>>>> doing that turns off auto scanning of @Provider classes. Auto
>>>> scanning is
>>>> important for my application because I'm using a library which has
>>>> filters
>>>> that have to be included automatically by scanning.
>>>>
>>>> How can I create a singleton JAX-RS resource and still use auto
>>>> scanning
>>>> of
>>>> @Provider capability.
>>>>
>>>
>>> Can you explain please, how is this Application registered, do you use a
>>> cxf-rt-rs-http-sci module which ships ServletContextInitializer ?
>>>
>>> Thanks, Sergey
>>>
>>>>
>>>> Thanks,
>>>> Aruna.
>>>>
>>>>
>>>
>>
>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Re: Singleton JAX-RS resource

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi

We did some work on the master (3.2.0-SNAPSHOT) for overriding the 
default lifecycle of Application.getClasses, using the existing 
jaxrs.scope servlet parameter, as part of the SSE work, and I pushed 
most of those updated to 3.1.11-SNAPSHOT.
However that is not enough in your case, so I just tweaked a code a bit 
more, if you have an empty Application with its getProperties() method 
returning "jaxrs.scope"="singleton" then the (auto-discovered) 
Application.getClasses will be treated as singletons even if they are 
not providers but the resource classes.

I could've also added a CXF specific @Singleton annotation but the 
Application.getProperties() is less intrusive and is portable (this 
property will simply be ignored with other implementations), while we 
also plan with Andriy to introduce a proper support for the alternative 
injection strategies (so as to cover for ex CDI Singleton, etc)

Cheers, Sergey

On 13/03/17 11:21, Aruna Kalagnanam wrote:
> Hi Sergey
>
> Yes, I'm using the cxf http-sci module and no web.xml.
>
> Thanks,
> Aruna.
>
> On Mar 13, 2017 16:23, "Sergey Beryozkin" <sb...@gmail.com> wrote:
>
>> Hi
>>
>> On 12/03/17 06:37, Aruna Kalagnanam wrote:
>>
>>> Hello
>>>
>>> I'm using Apache CXF 3.1.9 with Tomcat 7. I have written a JAX-RS
>>> application with a JAX-RS resource and subclassed Application class. I
>>> realized that the JAX-RS resource is per-request scoped by default. I
>>> would
>>> like to make it application scoped. Using @Singleton doesnt work.
>>>
>>> I could override the getSingletons() method of my Application subclass,
>>> but
>>> doing that turns off auto scanning of @Provider classes. Auto scanning is
>>> important for my application because I'm using a library which has filters
>>> that have to be included automatically by scanning.
>>>
>>> How can I create a singleton JAX-RS resource and still use auto scanning
>>> of
>>> @Provider capability.
>>>
>>
>> Can you explain please, how is this Application registered, do you use a
>> cxf-rt-rs-http-sci module which ships ServletContextInitializer ?
>>
>> Thanks, Sergey
>>
>>>
>>> Thanks,
>>> Aruna.
>>>
>>>
>>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Re: Singleton JAX-RS resource

Posted by Aruna Kalagnanam <ka...@gmail.com>.
Hi Sergey

Yes, I'm using the cxf http-sci module and no web.xml.

Thanks,
Aruna.

On Mar 13, 2017 16:23, "Sergey Beryozkin" <sb...@gmail.com> wrote:

> Hi
>
> On 12/03/17 06:37, Aruna Kalagnanam wrote:
>
>> Hello
>>
>> I'm using Apache CXF 3.1.9 with Tomcat 7. I have written a JAX-RS
>> application with a JAX-RS resource and subclassed Application class. I
>> realized that the JAX-RS resource is per-request scoped by default. I
>> would
>> like to make it application scoped. Using @Singleton doesnt work.
>>
>> I could override the getSingletons() method of my Application subclass,
>> but
>> doing that turns off auto scanning of @Provider classes. Auto scanning is
>> important for my application because I'm using a library which has filters
>> that have to be included automatically by scanning.
>>
>> How can I create a singleton JAX-RS resource and still use auto scanning
>> of
>> @Provider capability.
>>
>
> Can you explain please, how is this Application registered, do you use a
> cxf-rt-rs-http-sci module which ships ServletContextInitializer ?
>
> Thanks, Sergey
>
>>
>> Thanks,
>> Aruna.
>>
>>
>

Re: Singleton JAX-RS resource

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi

On 12/03/17 06:37, Aruna Kalagnanam wrote:
> Hello
>
> I'm using Apache CXF 3.1.9 with Tomcat 7. I have written a JAX-RS
> application with a JAX-RS resource and subclassed Application class. I
> realized that the JAX-RS resource is per-request scoped by default. I would
> like to make it application scoped. Using @Singleton doesnt work.
>
> I could override the getSingletons() method of my Application subclass, but
> doing that turns off auto scanning of @Provider classes. Auto scanning is
> important for my application because I'm using a library which has filters
> that have to be included automatically by scanning.
>
> How can I create a singleton JAX-RS resource and still use auto scanning of
> @Provider capability.

Can you explain please, how is this Application registered, do you use a 
cxf-rt-rs-http-sci module which ships ServletContextInitializer ?

Thanks, Sergey
>
> Thanks,
> Aruna.
>