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