[ 
https://issues.apache.org/jira/browse/FELIX-4802?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14329058#comment-14329058
 ] 

Pierre Bourret commented on FELIX-4802:
---------------------------------------

Hi,

I think you should use the dynamic-priority binding policy for your dependency:
{code:java}
@Requires(policy=BindingPolicy.DYNAMIC_PRIORITY)
private Hello m_hellos[]; // Array => Aggregate
{code}

The iPOJO documentation is quite clear : 
[http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/service-requirement-handler.html#managing-resilience-to-dynamism-binding-policies]

{quote}
* Dynamic policy (default): the binding are managed dynamically. At each 
injection, the same provider is injected if the provider is always available. 
Else a new one is chosen. For aggregate dependency, *the array order does not 
change*; new providers are placed at the end of the array.
[…]
* Dynamic-priority policy: the binding is managed dynamically but the injected 
provider is selected by using a ranking policy. Two injections can return two 
different providers, is a new provider is 'better' than the previous one, 
despite the first one is always available. For aggregate dependency, *the array 
is sorted*.
{quote}

If you want to always keep your array sorted, use the dynamic priority policy.

> Aggregate Dependency with Field Injection does not respect SERVICE_RANKING
> --------------------------------------------------------------------------
>
>                 Key: FELIX-4802
>                 URL: https://issues.apache.org/jira/browse/FELIX-4802
>             Project: Felix
>          Issue Type: Bug
>          Components: iPOJO
>    Affects Versions: ipojo-runtime-1.12.1
>         Environment: I found this using Apache Karaf 3.0.3
>            Reporter: Andy Phillips
>
> I found an issue with the Aggregate Dependency with Field Injection where i 
> have a list of "services" that i would like to maintain with a manager.   The 
> order of the services is important. 
> I noticed that the field injection, say:
> @Component
> public class HelloConsumer {
>      @Requires
>      private Hello m_hellos[]; // Array => Aggregate
>      public doSomething() {
>              for(int I = 0; I < m_hellos.length; i++) { 
>                  System.out.println(m_hellos[i].getMessage());
>              }
>        }
> }
> The initial list when the instance is "created" appears to respect the 
> SERVICE_RANKING, but subequent modifications (say you install a new bundle 
> with an additional "hello") does not respect the SERVICE_RANKING in the 
> order.   I will have to end up do my own sorting on the list prior to using 
> the field.  
> Is this normal?  I feel that the SERVICE_RANKING should always be respected 
> on the list of m_hellos[]s....



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to