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> 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> 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> 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
>> ).
>>
>> 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
>> 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