I'd also suggest that blocking the thread either by polling in a loop or
using a dedicated timeout method is somewhat antithetical to the point of
an asynchronous call. Better usually to do something like resolve a promise
either with the service result or an exception after a threshold. This
allows you to chain promises together nicely without blocking but also
keeps things ticking along. It seems a shame that OSGi promises don't
support a notion of cancellation (which is helpful when racing a long
running call with a timeout).

Can't have everything I guess.

Ben

On Fri, 25 Jan 2019, 2:58 pm Raymond Auge, <raymond.a...@liferay.com> wrote:

> I'm not sure if Aries Async uses the Promise API in a substitutable way,
> but the latest version of the Promise API has timeout methods [1].
>
> Perhaps Tim Ward could shed some light on this?
> One option is simply to try to use the lastest Promise API along with
> Aries Async.
>
> Sincerely,
> - Ray
>
> [1]
> https://osgi.org/specification/osgi.cmpn/7.0.0/util.promise.html#util.promise-timing.methods
>
> On Fri, Jan 25, 2019 at 7:07 AM Lorr, Sebastian <
> sebastian.l...@its-digital.de> wrote:
>
>> Hi there,
>>
>>
>>
>> I want to call a Service and wait for a given time for a response.
>>
>> So I did a async servicecall like this:
>>
>>
>>
>> // Create mediator, to call service asynchronously
>>
>> IMyService mediated = asyncService.mediate(myService, IMyService.class);
>>
>>
>>
>> // Call service and await promise to be fulfilled
>>
>> Promise<Result> promise = asyncService.call(mediated.process());
>>
>> boolean timeoutExceeded = false;
>>
>> long startTime = Calendar.getInstance().getTimeInMillis();
>>
>>
>>
>> serviceTimeoutMillis = 100;
>>
>> // Wait until timeout for promise to be done
>>
>> while (!promise.isDone()) {
>>
>>                 Thread.sleep(10);
>>
>>                 if (Calendar.getInstance().getTimeInMillis() > startTime
>> + serviceTimeoutMillis) {
>>
>>                                timeoutExceeded = true;
>>
>>                                break;
>>
>>                 }
>>
>> }
>>
>> if (timeoutExceeded) {
>>     throw new TimeoutException("Timeout exceeded");
>> }
>>
>>
>> Now the question: is there a better way for waiting for promise-resolve
>> until a given timeout?
>>
>> Maybe some feature of Async that i missed?
>>
>>
>>
>>
>>
>> Thanks in advance,
>>
>>
>>
>> Sebastian
>>
>>
>> ----------------------------------------------------------------
>> Sebastian Lorr
>> ITS Digital Solutions GmbH
>> Dillenburger Str. 77
>> <https://maps.google.com/?q=Dillenburger+Str.+77+%0D%0A+D-51105+K%C3%B6ln&entry=gmail&source=g>
>>
>> <https://maps.google.com/?q=Dillenburger+Str.+77+%0D%0A+D-51105+K%C3%B6ln&entry=gmail&source=g>
>> D-51105 Köln
>> <https://maps.google.com/?q=Dillenburger+Str.+77+%0D%0A+D-51105+K%C3%B6ln&entry=gmail&source=g>
>> Tel.: +49 (0)221 820 07 0
>> Fax : +49 (0)221 820 07 22 <%2B49%20%280%29221%20820%2007%2022>
>> Mail: i...@its-telco.de
>> Web : http://www.its-telco.de
>> ----------------------------------------------------------------
>> Sitz der Gesellschaft: Dortmund
>> Amtsgericht Dortmund, HRB 28563
>> Geschäftsführer: Gunnar Haack, Ludger Schulte, Heinrich Toben, Raimund
>> Schipp, Ralf Petersilka
>> ----------------------------------------------------------------
>>
>> Diese E-Mail enthält vertrauliche Informationen. Wenn Sie nicht der
>> richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben,
>> informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail.
>> Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail ist
>> nicht gestattet.
>>
>> This e-mail may contain confidential information. If you are not the
>> intended recipient (or have received this e-mail in error) please notify
>> the sender immediately and destroy this e-mail. Any unauthorised copying,
>> disclosure or distribution of the material in this e-mail is strictly
>> forbidden.
>>
>>
>
> --
> *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile>
>  (@rotty3000)
> Senior Software Architect *Liferay, Inc.* <http://www.liferay.com>
>  (@Liferay)
> Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org>
> (@OSGiAlliance)
>

Reply via email to