Right. Thanks, Tim!

Cheers,
=David



> On Jul 18, 2018, at 17:47, Tim Ward <tim.w...@paremus.com> wrote:
> 
> Promises are great, and should be used much more often! 
> 
> Note that if you want to have more control of the threading then you can 
> instantiate a PromiseFactory with the executor that should be used to run 
> callbacks. In this case, for example, you may wish to use an Immediate 
> executor (available as a static method on PromiseFactory) to ensure that the 
> callbacks are always run without a thread switch.
> 
> Best Regards,
> 
> Tim
> 
>> On 18 Jul 2018, at 07:50, David Leangen via osgi-dev <osgi-dev@mail.osgi.org 
>> <mailto:osgi-dev@mail.osgi.org>> wrote:
>> 
>> 
>> Brilliant! Thank you. :-)
>> 
>> 
>>> On Jul 18, 2018, at 14:46, Peter Kriens <peter.kri...@aqute.biz 
>>> <mailto:peter.kri...@aqute.biz>> wrote:
>>> 
>>> A really elegant solution to these problems is to use a Promise …
>>> 
>>> 1) Create a Deferrred
>>> 2) Execute your item code through the promise of the deferred
>>> 3) When the Executor reference is set, you resolve the deferred
>>> 
>>> 
>>>     @Component
>>>     public class Foo {
>>>             Deferred<Executor>              deferred = new Deferred<>();
>>> 
>>>             @Reference
>>>             void setExecutor( Executor e) { deferred.resolve(e); }
>>> 
>>>             @Reference( multiple/dynmaic) 
>>>             void addItem( Item item) {
>>>                     deferred.getPromise().thenAccept ( executor -> … )
>>>             }
>>>     }
>>>     
>>> This will automatically process your items after the executor is set. It 
>>> think it also easily extends to multiple dependencies but would have to 
>>> puzzle a bit. If you’re unfamiliar with Promises, I’ve written an app note, 
>>> ehh blog, recently about 1.1 Promises  
>>> http://aqute.biz/2018/06/28/Promises.html 
>>> <http://aqute.biz/2018/06/28/Promises.html>. They really shine in these 
>>> ordering issues.
>>> 
>>> Kind regards,
>>> 
>>>     Peter Kriens
>>> 
>>> 
>>> 
>>>> On 18 Jul 2018, at 00:16, David Leangen via osgi-dev 
>>>> <osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>> wrote:
>>>> 
>>>> 
>>>> 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 <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 <mailto: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

Reply via email to