Re: [osgi-dev] Re : Service binding order

2018-07-17 Thread Dirk Fauth via osgi-dev
Hi,

A good whiteboard implementation even takes care that your executor could
come and go or an executor with a higher service ranking could come.
Therefore the best thing is to keep the references of your items and
process them once the executor comes.

You should not rely on the order and I would also not use @Activate here.
At least not if you want to take care of dynamics and use DS.

Greez,
Dirk


David Leangen via osgi-dev  schrieb am Mi., 18.
Juli 2018, 03:25:

>
> To answer my own question…
>
> It looks like it may be easier to just use a ServiceTracker, which gets
> instantiated in the @Activate method. That way there are no timing issues.
>
>
> Cheers,
> =David
>
>
>
> On Jul 18, 2018, at 9:33, David Leangen  wrote:
>
>
> Hi Clément,
>
> Thanks for your reply.
>
> The problem here is that the Items are dynamic, which means that they can
> come and go at any time, even before the MyExecutor. :-(
> This happens regardless of the order, and that is exactly my problem.
>
>
> Cheers,
> =David
>
>
>
> On Jul 18, 2018, at 7:59, Clément Delgrange via osgi-dev <
> osgi-dev@mail.osgi.org> wrote:
>
> Hi David,
>
> From the spec I read:
>
> > 112.5.10 Binding Services
> >
> > When binding services, the references are processed in the order in
> which they are specified in the component description. That is, target
> services from the first specified reference are bound before services from
> the next specified reference.
>
> So, I understand that if your executor comes before yours items reference
> in the component declaration you have the garantee that the executor will
> be bounded before your items.
>
> Cheers,
> Clément.
>
>
>
>
>  Message d'origine 
> On 18 juil. 2018 à 00:16, David Leangen via osgi-dev <
> osgi-dev@mail.osgi.org > a écrit :
>
>
>
> Hi!
>
> I have a component that acts a bit like a whiteboard provider. It looks
> something like this:
>
> public class MyWhiteboard
> {
> boolean isActive;
>
> @Reference MyExecutor executor; // Required service to execute on an Item
>
> @Reference(multiple/dynamic)
> void bindItem( Item item )
> {
> if (isActivated)
> // add the Item
> else
> // Store the item to be added once this component is activated
> }
>
> void unbindItem( Item item )
> {
> // Remove the item
> }
>
> @Activate
> void activate()
> {
> // execute non-processed Items
> isActivate = true;
> }
> }
>
> The MyExecutor must be present before an Item can be processed, but there
> is no guarantee as to the binding order. All I can think of doing is
> ensuring that the Component is Activated before processing.
>
> My question is: is there a more elegant / simpler / less error prone way
> of accomplishing this?
>
>
> Thanks!
> =David
>
>
> ___
> 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
> 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
___
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Re: [osgi-dev] Re : Service binding order

2018-07-17 Thread David Leangen via osgi-dev

To answer my own question…

It looks like it may be easier to just use a ServiceTracker, which gets 
instantiated in the @Activate method. That way there are no timing issues.


Cheers,
=David



> On Jul 18, 2018, at 9:33, David Leangen  wrote:
> 
> 
> Hi Clément,
> 
> Thanks for your reply.
> 
> The problem here is that the Items are dynamic, which means that they can 
> come and go at any time, even before the MyExecutor. :-(
> This happens regardless of the order, and that is exactly my problem.
> 
> 
> Cheers,
> =David
> 
> 
> 
>> On Jul 18, 2018, at 7:59, Clément Delgrange via osgi-dev 
>> mailto:osgi-dev@mail.osgi.org>> wrote:
>> 
>> Hi David, 
>> 
>> From the spec I read:
>> 
>> > 112.5.10 Binding Services
>> >
>> > When binding services, the references are processed in the order in which 
>> > they are specified in the component description. That is, target services 
>> > from the first specified reference are bound before services from the next 
>> > specified reference. 
>> 
>> So, I understand that if your executor comes before yours items reference in 
>> the component declaration you have the garantee that the executor will be 
>> bounded before your items. 
>> 
>> Cheers, 
>> Clément. 
>> 
>> 
>> 
>> 
>>  Message d'origine 
>> On 18 juil. 2018 à 00:16, David Leangen via osgi-dev < 
>> osgi-dev@mail.osgi.org  > a écrit :
>> 
>> 
>> Hi!
>> 
>> I have a component that acts a bit like a whiteboard provider. It looks 
>> something like this:
>> 
>> public class MyWhiteboard
>> {
>> boolean isActive;
>> 
>> @Reference MyExecutor executor; // Required service to execute on an Item
>> 
>> @Reference(multiple/dynamic)
>> void bindItem( Item item )
>> {
>> if (isActivated)
>> // add the Item
>> else
>> // Store the item to be added once this component is activated
>> }
>> 
>> void unbindItem( Item item )
>> {
>> // Remove the item
>> }
>> 
>> @Activate
>> void activate()
>> {
>> // execute non-processed Items
>> isActivate = true;
>> }
>> }
>> 
>> The MyExecutor must be present before an Item can be processed, but there is 
>> no guarantee as to the binding order. All I can think of doing is ensuring 
>> that the Component is Activated before processing.
>> 
>> My question is: is there a more elegant / simpler / less error prone way of 
>> accomplishing this?
>> 
>> 
>> Thanks!
>> =David
>> 
>> 
>> ___
>> 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
>> 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

Re: [osgi-dev] Re : Service binding order

2018-07-17 Thread David Leangen via osgi-dev

Hi Clément,

Thanks for your reply.

The problem here is that the Items are dynamic, which means that they can come 
and go at any time, even before the MyExecutor. :-(
This happens regardless of the order, and that is exactly my problem.


Cheers,
=David



> On Jul 18, 2018, at 7:59, Clément Delgrange via osgi-dev 
>  wrote:
> 
> Hi David, 
> 
> From the spec I read:
> 
> > 112.5.10 Binding Services
> >
> > When binding services, the references are processed in the order in which 
> > they are specified in the component description. That is, target services 
> > from the first specified reference are bound before services from the next 
> > specified reference. 
> 
> So, I understand that if your executor comes before yours items reference in 
> the component declaration you have the garantee that the executor will be 
> bounded before your items. 
> 
> Cheers, 
> Clément. 
> 
> 
> 
> 
>  Message d'origine 
> On 18 juil. 2018 à 00:16, David Leangen via osgi-dev < osgi-dev@mail.osgi.org 
> > a écrit :
> 
> 
> Hi!
> 
> I have a component that acts a bit like a whiteboard provider. It looks 
> something like this:
> 
> public class MyWhiteboard
> {
> boolean isActive;
> 
> @Reference MyExecutor executor; // Required service to execute on an Item
> 
> @Reference(multiple/dynamic)
> void bindItem( Item item )
> {
> if (isActivated)
> // add the Item
> else
> // Store the item to be added once this component is activated
> }
> 
> void unbindItem( Item item )
> {
> // Remove the item
> }
> 
> @Activate
> void activate()
> {
> // execute non-processed Items
> isActivate = true;
> }
> }
> 
> The MyExecutor must be present before an Item can be processed, but there is 
> no guarantee as to the binding order. All I can think of doing is ensuring 
> that the Component is Activated before processing.
> 
> My question is: is there a more elegant / simpler / less error prone way of 
> accomplishing this?
> 
> 
> Thanks!
> =David
> 
> 
> ___
> 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
> 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

[osgi-dev] Re : Service binding order

2018-07-17 Thread Clément Delgrange via osgi-dev
Hi David,

From the spec I read:

> 112.5.10 Binding Services
>
> When binding services, the references are processed in the order in which 
> they are specified in the component description. That is, target services 
> from the first specified reference are bound before services from the next 
> specified reference.

So, I understand that if your executor comes before yours items reference in 
the component declaration you have the garantee that the executor will be 
bounded before your items.

Cheers,
Clément.

 Message d'origine 
On 18 juil. 2018 à 00:16, David Leangen via osgi-dev a écrit :

> Hi!
>
> I have a component that acts a bit like a whiteboard provider. It looks 
> something like this:
>
> public class MyWhiteboard
> {
> boolean isActive;
>
> @Reference MyExecutor executor; // Required service to execute on an Item
>
> @Reference(multiple/dynamic)
> void bindItem( Item item )
> {
> if (isActivated)
> // add the Item
> else
> // Store the item to be added once this component is activated
> }
>
> void unbindItem( Item item )
> {
> // Remove the item
> }
>
> @Activate
> void activate()
> {
> // execute non-processed Items
> isActivate = true;
> }
> }
>
> The MyExecutor must be present before an Item can be processed, but there is 
> no guarantee as to the binding order. All I can think of doing is ensuring 
> that the Component is Activated before processing.
>
> My question is: is there a more elegant / simpler / less error prone way of 
> accomplishing this?
>
> Thanks!
> =David
>
> ___
> 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
https://mail.osgi.org/mailman/listinfo/osgi-dev