Awesome, thanks!

Alain


On Thu, Sep 20, 2018 at 3:30 AM Tim Ward <tim.w...@paremus.com> wrote:

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