Brilliant! Thank you. :-)
> On Jul 18, 2018, at 14:46, Peter Kriens <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 >
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev