Jaap,
I suggest placing the PersonService in a separate bundle.

Paul Spencer


> On Jan 25, 2023, at 3:57 PM, Jaap Gordijn <[email protected]> wrote:
> 
> Paul,
> 
> The Rest class and the PersonService are in the same bundle.
> 
> Do you know if there are any examples out there that show 
> @JaxrsApplicationSelect in combination with DS?
> It seems now that Application/@JaxrsApplicationBase ignores DS.
> 
> -- Jaap
> 
>> -----Original Message-----
>> From: Paul Spencer <[email protected]>
>> Sent: dinsdag 24 januari 2023 01:41
>> To: [email protected]
>> Subject: Re: aries-jax-rs-whiteboard with @JaxrsApplicationSelect works not
>> with DS
>> 
>> - Does bundle:headers for the REST bundle have a required capability to the
>> Person Service, foo.bar.PersonService in the example below.
>> 
>> karaf@root> bundle:headers <REST_bundle_id> ...
>> Require-Capability =
>>      osgi.service;effective:=active;filter:=(objectClass=foo.bar.PersonSer
>> vice),
>> ...
>> 
>> karaf@root>
>> 
>> 
>> My assumption is the requirement is missing, meaning the requirement in
>> the REST bundle is not defined correctly.
>> 
>> Paul Spencer
>> 
>> 
>>> On Jan 23, 2023, at 5:44 PM, Jaap Gordijn <[email protected]> wrote:
>>> 
>>> Paul,
>>> 
>>> - scr is installed and started
>>> - the person bundle started
>>> - diag does not produce any output
>>> 
>>> Best,
>>> 
>>> -- Jaap
>>> 
>>>> -----Original Message-----
>>>> From: Paul Spencer <[email protected]>
>>>> Sent: maandag 23 januari 2023 23:12
>>>> To: [email protected]
>>>> Subject: Re: aries-jax-rs-whiteboard with @JaxrsApplicationSelect
>>>> works not with DS
>>>> 
>>>> Jaap,
>>>> 1) What bundle provides PersonService and what is its state, as
>>>> reported by bundle:list?
>>>> 2) What is the state, as reported by bundle:list, of your REST bundle.
>>>> 
>>>> If any of the bundles are in a state of waiting, what does
>>>> bundle:diag <bundle_id> of the waiting bundle report?
>>>> 
>>>> Is the feature scr installed, if not install it.
>>>> 
>>>> Paul Spencer
>>>> 
>>>> 
>>>>> On Jan 23, 2023, at 3:38 PM, Jaap Gordijn <[email protected]> wrote:
>>>>> 
>>>>> Paul,
>>>>> 
>>>>> I have now minimized the code that I call via REST:
>>>>> 
>>>>>   @Reference(scope=ReferenceScope.PROTOTYPE_REQUIRED)
>>>>>   private PersonService personService;
>>>>> 
>>>>>   @GET
>>>>>   @Path("/test")
>>>>>   public String test() {
>>>>>           System.out.println("personService null" + (personService ==
>>>> null));
>>>>>           return "test";
>>>>>   }
>>>>> 
>>>>> The personService remains null, so no DI.
>>>>> 
>>>>> I enabled DEBUG in the log.
>>>>> 
>>>>> I only see DEBUG messages for " org.eclipse.jetty.util".
>>>>> Not for anything else.
>>>>> 
>>>>> Nevertheless, feature:list | grep jax Results in:
>>>>> 
>>>>> aries-jax-rs-whiteboard                 │ 2.0.2            │          │ 
>>>>> Started     │ aries-
>> jax-
>>>> rs-2.0.2                │
>>>>> aries-jax-rs-whiteboard-jackson         │ 2.0.2            │          │ 
>>>>> Started     │
>> aries-
>>>> jax-rs-2.0.2                │
>>>>> aries-jax-rs-whiteboard-jettison        │ 2.0.2            │          │ 
>>>>> Uninstalled │
>>>> aries-jax-rs-2.0.2                │
>>>>> aries-jax-rs-whiteboard-openapi         │ 2.0.2            │          │ 
>>>>> Uninstalled │
>>>> aries-jax-rs-2.0.2                │
>>>>> aries-jax-rs-whiteboard-rest-management │ 2.0.2            │          │
>> Uninstalled
>>>> │ aries-jax-rs-2.0.2                │
>>>>> aries-jax-rs-whiteboard-shiro           │ 2.0.2            │          │ 
>>>>> Uninstalled │
>> aries-
>>>> jax-rs-2.0.2                │
>>>>> jaxb                                    │ 2.3.2.3          │          │ 
>>>>> Uninstalled │ specs-4.4.3
>>>> │
>>>>> jaxrs                                   │ 2.1.0            │          │ 
>>>>> Uninstalled │ specs-4.4.3
>>>> │
>>>>> jaxws                                   │ 2.3.0            │          │ 
>>>>> Uninstalled │ specs-4.4.3
>>>> │
>>>>> jackson-jaxrs                           │ 2.14.1           │          │ 
>>>>> Uninstalled │ specs-4.4.3
>>>> │
>>>>> cxf-jaxb                                │ 3.5.5            │          │ 
>>>>> Uninstalled │ cxf-3.5.5
>>>> │
>>>>> cxf-jaxws                               │ 3.5.5            │          │ 
>>>>> Uninstalled │ cxf-3.5.5
>>>> │
>>>>> cxf-jaxrs                               │ 3.5.5            │          │ 
>>>>> Started     │ cxf-3.5.5
>>>> │
>>>>> cxf-databinding-jaxb                    │ 3.5.5            │          │ 
>>>>> Uninstalled │ cxf-
>> 3.5.5
>>>> │
>>>>> cxf-jaxrs-cdi                           │ 3.5.5            │          │ 
>>>>> Uninstalled │ cxf-3.5.5
>>>> │
>>>>> karaf@root()>
>>>>> 
>>>>> This gives me the impression that the whitenboard stuff is working.
>>>>> 
>>>>> -- Jaap
>>>>> 
>>>>>> -----Original Message-----
>>>>> 
>>>>> 
>>>>>> From: Paul Spencer <[email protected]>
>>>>>> Sent: maandag 23 januari 2023 21:19
>>>>>> To: [email protected]
>>>>>> Subject: Re: aries-jax-rs-whiteboard with @JaxrsApplicationSelect
>>>>>> works not with DS
>>>>>> 
>>>>>> Jaap,
>>>>>> Something is missing.  The @Referenece should prevent the
>> component
>>>>>> from becoming Active when a PeopleService does not exist.
>>>>>> Look in Karaf.log for clues.
>>>>>> 
>>>>>> Paul Spencer
>>>>>> 
>>>>>>> On Jan 23, 2023, at 3:14 PM, Jaap Gordijn <[email protected]> wrote:
>>>>>>> 
>>>>>>> Paul,
>>>>>>> 
>>>>>>> I tried also the @Reference annotation.
>>>>>>> This doesn't work, the variable remains null.
>>>>>>> No injection is happening.
>>>>>>> 
>>>>>>> -- Jaap
>>>>>>> 
>>>>>>>> -----Original Message-----
>>>>>>>> From: Paul Spencer <[email protected]>
>>>>>>>> Sent: maandag 23 januari 2023 21:09
>>>>>>>> To: [email protected]
>>>>>>>> Subject: Re: aries-jax-rs-whiteboard with @JaxrsApplicationSelect
>>>>>>>> works not with DS
>>>>>>>> 
>>>>>>>> Jaap,
>>>>>>>> In the code I posted, there was not constructor.  I moved the
>>>>>>>> injection of personService to an @Reference annotated field.  The
>>>>>>>> @Activator annotation is for a method, which you may not need
>>>>>>>> based on
>>>>>> your example.
>>>>>>>> 
>>>>>>>> Paul Spencer
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> On Jan 23, 2023, at 2:30 PM, Jaap Gordijn <[email protected]>
>> wrote:
>>>>>>>>> 
>>>>>>>>> Hi Paul,
>>>>>>>>> 
>>>>>>>>> That constructor is called, but only if I disable
>>>> @@JaxrsApplicationSelect.
>>>>>>>>> 
>>>>>>>>> If I enable it, only the default constructor is called (Rest() in my
>> case.
>>>>>>>>> And no DS.
>>>>>>>>> 
>>>>>>>>> -- Jaap
>>>>>>>>> 
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: Paul Spencer <[email protected]>
>>>>>>>>>> Sent: maandag 23 januari 2023 18:59
>>>>>>>>>> To: [email protected]
>>>>>>>>>> Subject: Re: aries-jax-rs-whiteboard with
>>>>>>>>>> @JaxrsApplicationSelect works not with DS
>>>>>>>>>> 
>>>>>>>>>> Jaap,
>>>>>>>>>> Your @Activate annotation is incorrect.
>>>>>>>>>> Try the following.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> …
>>>>>>>>>> public class Rest() {
>>>>>>>>>> 
>>>>>>>>>> @Reference
>>>>>>>>>> private PersonService personService;
>>>>>>>>>> 
>>>>>>>>>> @Activate
>>>>>>>>>> public void activate(Map <String,?> properties) {  ...
>>>>>>>>>> }
>>>>>>>>>> 
>>>>>>>>>> }
>>>>>>>>>> 
>>>>>>>>>> Paul Spencer
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>> On Jan 23, 2023, at 12:40 PM, Jaap Gordijn <[email protected]>
>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> Hi,
>>>>>>>>>>> 
>>>>>>>>>>> I use an Application object (with @JaxrsApplicationSelect),
>>>>>>>>>>> injection via DS does not work:
>>>>>>>>>>> 
>>>>>>>>>>> @Component(service = Rest.class, scope =
>>>> ServiceScope.PROTOTYPE)
>>>>>>>>>>> @JaxrsResource @JaxrsApplicationSelect("(" +
>>>>>>>>>>> JaxrsWhiteboardConstants.JAX_RS_NAME +
>>>>>>>>>>> "=MyApplication)")
>>>>>>>>>>> @JSONRequired
>>>>>>>>>>> @Produces(MediaType.APPLICATION_JSON)
>>>>>>>>>>> public class Rest {
>>>>>>>>>>> 
>>>>>>>>>>> private PersonService personService;
>>>>>>>>>>> 
>>>>>>>>>>> /*
>>>>>>>>>>> public Rest() {
>>>>>>>>>>> System.out.println("Constructing REST");  this.personService =
>>>>>>>>>>> new PersonServiceImpl();  } */
>>>>>>>>>>> 
>>>>>>>>>>> @Activate
>>>>>>>>>>> public Rest(final @Reference PersonService personService) {
>>>>>>>>>>> System.out.println("Constructing REST");  this.personService =
>>>>>>>>>>> personService;  }
>>>>>>>>>>> 
>>>>>>>>>>> @GET
>>>>>>>>>>> @Path("/person")
>>>>>>>>>>> public List<PersonDto> listPersons() {  return
>>>>>>>>>>> personService.select(); }
>>>>>>>>>>> 
>>>>>>>>>>> @GET
>>>>>>>>>>> @Path("/test")
>>>>>>>>>>> public String test() {
>>>>>>>>>>> return "test";
>>>>>>>>>>> }
>>>>>>>>>>> }
>>>>>>>>>>> 
>>>>>>>>>>> The @Activate constructor is not called. If I enable the
>>>>>>>>>>> Rest() constructor that one is called.
>>>>>>>>>>> if I disable @JaxrsApplicationSelect, the personService is
>> injected.
>>>>>>>>>>> 
>>>>>>>>>>> It seems that once an Application class is used (see below),
>>>>>>>>>>> DS is not working.
>>>>>>>>>>> This leads to the question what I have to set up for the
>>>>>>>>>>> Application
>>>>>>>> object:
>>>>>>>>>>> 
>>>>>>>>>>> @Component(service=Application.class, property =
>>>>>>>>>>> {"servlet.init.hide-service-list-page=true"} )
>>>>>>>>>>> @JaxrsApplicationBase("example")
>>>>>>>>>>> @JaxrsName("MyApplication")
>>>>>>>>>>> public class MyApplication extends Application {
>>>>>>>>>>> 
>>>>>>>>>>> public Set<Class<?>> getClasses() {  HashSet<Class<?>> set =
>>>>>>>>>>> new HashSet<Class<?>>();  set.add(Rest.class);  return set; }
>>>>>>>>>>> 
>>>>>>>>>>> }
>>>>>>>>>>> 
>>>>>>>>>>> Jax-rs-whiteboard 2.02
>>>>>>>>>>> Karaf 4.4.3
>>>>>>>>>>> 
>>>>>>>>>>> Thanks,
>>>>>>>>>>> 
>>>>>>>>>>> -- Jaap
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>> 
>>>>> 
>>> 
>>> 
> 
> 

Reply via email to