Just to clarify, when I say it does not work, I mean that the injected service 
is not the correct one matching the filter expression.

Best regards,
Alex soto




> On Mar 12, 2020, at 9:24 AM, Jean-Baptiste Onofre <[email protected]> wrote:
> 
> Hi,
> 
> Let me check, but AFAIR, I have a test about that and it seems to work.
> 
> I will create a Jira to double check.
> 
> Regards
> JB
> 
>> Le 12 mars 2020 à 14:23, Alex Soto <[email protected] 
>> <mailto:[email protected]>> a écrit :
>> 
>> I see, but it is not working for me…
>> 
>> The PR  does not update 
>> org.apache.karaf.shell.impl.action.command.ManagerImpl#instantiate, 
>> shouldn’t this method be updated also to inject the appropriate service when 
>> the command is instantiated? (See code fragment I pasted earlier)
>> 
>> 
>> Best regards,
>> Alex soto
>> 
>> 
>> 
>> 
>>> On Mar 12, 2020, at 9:07 AM, Jean-Baptiste Onofre <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> Hi Alex,
>>> 
>>> You can find the change I did about that here:
>>> 
>>> https://github.com/apache/karaf/pull/992 
>>> <https://github.com/apache/karaf/pull/992>
>>> 
>>> Regards
>>> JB
>>> 
>>>> Le 12 mars 2020 à 14:02, Alex Soto <[email protected] 
>>>> <mailto:[email protected]>> a écrit :
>>>> 
>>>> Thanks, JB
>>>> 
>>>> But it doesn’t seem to work for Karaf 4.2.8.
>>>> I am not  familiar with the internals of Karaf code, but I spotted the 
>>>> following in 
>>>> org.apache.karaf.shell.impl.action.command.ManagerImpl.instantiate of  
>>>> org.apache.karaf.shell.core-4.2.8.jar:
>>>> 
>>>>            Reference ref = field.getAnnotation(Reference.class);
>>>>                 if (ref != null) {
>>>>                     GenericType type = new 
>>>> GenericType(field.getGenericType());
>>>>                     Object value;
>>>>                     if (type.getRawClass() == List.class) {
>>>>                         Set<Object> set = new HashSet<>();
>>>>                         
>>>> set.addAll(registry.getServices(type.getActualTypeArgument(0).getRawClass()));
>>>>                         if (registry != this.dependencies) {
>>>>                             
>>>> set.addAll(this.dependencies.getServices(type.getActualTypeArgument(0).getRawClass()));
>>>>                         }
>>>>                         value = new ArrayList<>(set);
>>>>                     } else {
>>>>                         value = registry.getService(type.getRawClass());
>>>>                         if (value == null && registry != 
>>>> this.dependencies) {
>>>>                             value = 
>>>> this.dependencies.getService(type.getRawClass());
>>>>                         }
>>>>                     }
>>>>                     if (!allowCustomServices && value == null && 
>>>> !ref.optional()) {
>>>>                         throw new IllegalStateException("No service 
>>>> matching " + field.getType().getName());
>>>>                     }
>>>>                     field.setAccessible(true);
>>>>                     field.set(instance, value);
>>>>                 }
>>>> 
>>>> Maybe this is not the relevant piece of code, but I do not see that the 
>>>> filter attribute is being used to look up the service.
>>>> 
>>>> 
>>>> Best regards,
>>>> Alex soto
>>>> 
>>>> 
>>>> 
>>>> 
>>>>> On Mar 12, 2020, at 12:50 AM, Jean-Baptiste Onofre <[email protected] 
>>>>> <mailto:[email protected]>> wrote:
>>>>> 
>>>>> Hi,
>>>>> 
>>>>> Yes, it’s to "select" the service you want to use.
>>>>> 
>>>>> I did the change because previously it wasn’t possible to select, meaning 
>>>>> that if you had several services (with the same interface) available, it 
>>>>> took the first one.
>>>>> 
>>>>> Now, you can specify the LDIF filter to select the exact service you want 
>>>>> to inject.
>>>>> 
>>>>> Regards
>>>>> JB
>>>>> 
>>>>>> Le 11 mars 2020 à 20:03, Alex Soto <[email protected] 
>>>>>> <mailto:[email protected]>> a écrit :
>>>>>> 
>>>>>> Is the filter attribute in annotation 
>>>>>> org.apache.karaf.shell.api.action.lifecycle.Reference used to filter the 
>>>>>> injected service on Service attributes?
>>>>>> 
>>>>>> Best regards,
>>>>>> Alex soto
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to