> On 7 Oct 2016, at 20:56, Benson Margulies <bimargul...@gmail.com> wrote:
> 
> On Fri, Oct 7, 2016 at 3:45 PM, Ferry Huberts <maili...@hupie.com 
> <mailto:maili...@hupie.com>> wrote:
>> 
>> 
>> On 07/10/16 21:04, Benson Margulies wrote:
>>> 
>>> I am trying to express the following idea using DS:
>>> 
>>>   "If service X is provisioned in this container, do not activate me
>>> until it is activated and injected into me. If service X is not
>>> provisioned in this container, go ahead and activate me without it."
>> 
>> 
>> how about making the dependency: static + greedy + optional.
> 
> So, in practical terms, how greedy is 'greedy'? What's the behavior?

Greedy means that if a service becomes available after your component is 
activated, then it will *always* be supplied to your component, even if that 
forces a restart of the component due to the reference having static policy.

(It’s worth contrasting this with its opposite, reluctant: if you have an 
optional, static, reluctant reference then your component will NOT be restarted 
in order to give it a service that arrives after it is activated. That is, the 
component will continue to be bound to nothing even when a valid candidate 
service is available. While this makes perfect sense if you take the time to 
think it through, OSGi newbies tend to find it counterintuitive).

By the way, with a greedy reference, you will also get re-bound when a service 
comes along that has a higher ranking than the one you are currently bound to. 
Again, this happens even if it requires restarting the component due to a 
static reference policy.

All this is in the R6 Compendium spec, Section 112.3.7 “Reference Policy 
Option”.

Regards,
Neil



> 
>> 
>> that way your component will get started always, and restarted once X
>> becomes available.
>> 
>>> 
>>> I fully appreciate that this concept is not compatible with the
>>> generally dynamic approach of OSGi in general, and declarative
>>> services in particular. However, I can think of a variation like:
>>> 
>>>  "I am willing to wait N seconds for service X. If it isn't there by
>>> then, activate me without it."
>>> 
>>> I am taking a risk here -- it's always possible that some phenomenon
>>> would result in a delay of longer than N. But in my case, the startup
>>> properties of the containing application are such that this would be a
>>> low risk.
>>> 
>>> Another possible approach would be to focus on provide/require
>>> capability. I don't know how I would get DS to pay attention, but it
>>> seems as if there's not enough information:
>>> 
>>> Provide-Capability: osgi.service;objectClass:List<String>="com.basiste
>>> ch.rosette.osgi.RosetteBundleWarmup,com.basistech.rosette.osgi.Rosett
>>> eComponentService"
>>> 
>>> Note that any properties are not represented here. So if the
>>> dependency is specific to some filter on properties, you can't use
>>> this data.
>>> 
>>> At the extreme, I could take very close control of start order, and
>>> then go ahead and use optional references. That's a lot of start order
>>> management.
>>> 
>>> Finally? I could use configuration admin, by setting the reference
>>> cardinality as part of provisioning. To do this cleanly, I think I'd
>>> want some sort of management layer that generated these 'minimum
>>> cardinality properties'; editing it in something like Karaf's cfg
>>> files would be quite messy.
>>> 
>>> Is there something I'm missing?
>>> _______________________________________________
>>> OSGi Developer Mail List
>>> osgi-dev@mail.osgi.org
>>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>> 
>> 
>> --
>> Ferry Huberts
>> _______________________________________________
>> OSGi Developer Mail List
>> osgi-dev@mail.osgi.org
>> https://mail.osgi.org/mailman/listinfo/osgi-dev
> _______________________________________________
> OSGi Developer Mail List
> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>
> https://mail.osgi.org/mailman/listinfo/osgi-dev 
> <https://mail.osgi.org/mailman/listinfo/osgi-dev>
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to