Ah, you wanted it to be the other way around (ActionListener -> Promise not Promise -> ActionListener)!
What you have looks good, although if you use Promises 1.1 then you can do some optimisation with the threads if you like. // The promises/deferreds produced by this factory will run callbacks by “borrowing" the thread that resolves the promise PromiseFactory pf = new PromiseFactory(PromiseFactory.inlineExecutor()); Deferred<R> d = pf.deferred(); Or, if you want to use your own thread pool then you can. // The promises/deferreds produced by this factory will run callbacks on the threads from the thread pool PromiseFactory pf = new PromiseFactory(Executors.newFixedThreadPool(8)); Deferred<R> d = pf.deferred(); Tim > On 19 Sep 2018, at 21:15, Alain Picard <pic...@castortech.com> wrote: > > Well I should have looked at this more closely. It's now working. > > I have: > ActionListenerPromise<UpdateResponse> promListener = new > ActionListenerPromise<>(); > client.updateAsync(request, RequestOptions.DEFAULT, promListener); //ES > call > return promListener.getPromise(); > > and my listener class: > public class ActionListenerPromise<R> implements ActionListener<R> { > private Deferred<R> deferred = new Deferred<>(); > > public ActionListenerPromise() { > this.deferred = new Deferred<>(); > } > > public Promise<R> getPromise() { > return deferred.getPromise(); > } > > @Override > public void onResponse(R response) { > deferred.resolve(response); > } > > @Override > public void onFailure(Exception e) { > deferred.fail(e); > } > } > > Alain > > > On Wed, Sep 19, 2018 at 12:16 PM Alain Picard <pic...@castortech.com > <mailto:pic...@castortech.com>> wrote: > Tim, > > I think the secret here is the getPromise() or how to get a promise > implementation from the ActionListener or one of its derivative static > methods. Normally we use a Deferred, but here my understanding is that ES > manages the async execution and we want to wrap its deferred handling into a > Promise which is not executed by our PromiseFactory. I guess that's where my > limited knowledge is hitting a wall. > > Cheers, > Alain > > > On Wed, Sep 19, 2018 at 11:13 AM Tim Ward <tim.w...@paremus.com > <mailto:tim.w...@paremus.com>> wrote: > It looks like it should be pretty simple… > > Promise<Response> myPromise = getPromise(); > > myPromise.onSuccess(listener::onResponse) > .onFailure(listener::onFailure); > > Best Regards, > > Tim > >> On 19 Sep 2018, at 15:16, Alain Picard via osgi-dev <osgi-dev@mail.osgi.org >> <mailto:osgi-dev@mail.osgi.org>> wrote: >> >> We are using ElasticSearch which provide an async mode that is heavily based >> on promises, They even provide BiConsumer to integrate with >> CompletableFuture. >> >> The interface is ActionListener >> (https://github.com/elastic/elasticsearch/blob/master/server/src/main/java/org/elasticsearch/action/ActionListener.java >> >> <https://github.com/elastic/elasticsearch/blob/master/server/src/main/java/org/elasticsearch/action/ActionListener.java>). >> >> What is the best way to tie this is to promises instead, so that we don't >> have to deal with different mode of handling asynchronous processing, and we >> are also envisioning the possibility of integrating push streams here as >> well. >> >> Thanks >> Alain >> >> _______________________________________________ >> 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