[concurrency-interest] Layered exception handling with CompletableFuture

√iktor Ҡlang viktor.klang at gmail.com
Wed Aug 27 05:07:18 EDT 2014


I -always- use "sneakyThrows" to turn checked exceptions into unchecked
ones—there's 0 value in checked exceptions. (Checked exceptions is a Java
language feature, not a JVM feature)

http://www.jayway.com/2010/01/29/sneaky-throw/

The only rough edge I've found is with dynamic Proxies, which encode this
language feature into a runtime feature:
http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/UndeclaredThrowableException.html


On Wed, Aug 27, 2014 at 10:39 AM, Millies, Sebastian <
Sebastian.Millies at softwareag.com> wrote:

>  Hi,
>
>
>
> thank you for the helpful response.
>
>
>
> It made me remember dimly some discussion of exception transparency on
> lambda-dev, and how it finally wasn’t possible to make it work. I do not
> believe this will ever be solved on the language level, and I regret that.
> In the same vein CompletableFuture.suppyAsync() does not accept a Callable,
> only a Supplier. In my situation there’s a bunch of pre-existing, exception
> throwing application methods (not to mention the Java library methods) that
> I now have a new requirement to combine asynchronously. So I find myself
> wrapping all the Callables, and tunneling the exceptions with
> RuntimeException, as Doug Lea recommends.
>
>
>
> I have looked at your suggestion, and I’m sorry to say I do not see how it
> would help, unless I rewrite everything from scratch or use bayou (would
> need something like your Async interface).
>
> And it also does not seem to address the one-stop exception-handling
> concern, because guess I would somehow need to call
> CompletableFuture#handle() and that can’t throw. Even in bayou, from a
> cursory look at Async.java, it seems that catch_() doesn’t rethrow the
> exception if it is not of the appropriate class.
>
>
>
> Best,
>
> Sebastian
>
>
>
> *From:* Zhong Yu [mailto:zhong.j.yu at gmail.com]
> *Sent:* Wednesday, August 27, 2014 2:02 AM
> *To:* Millies, Sebastian
> *Cc:* concurrency-interest at cs.oswego.edu
> *Subject:* Re: [concurrency-interest] Layered exception handling with
> CompletableFuture
>
>
>
> [OP snipped]
>
> Apparently, CompletableFuture does not  take too kindly to checked
> exceptions [1].
>
> A lot of people even consider checked exceptions a design mistake on the
> language level. Nevertheless, most Java programmers and APIs do use checked
> exceptions, for returning alternative results, and for flow controls.
>
> A workaround is to create your own helper method like
>
>     static <T,X> CF<T> catch_(CF<T> cf, Class<X> exceptionType, FuncE<X,T>
> exceptionHandler) { ... }
>
> where FuncE is similar to Function, except the apply() method throws
> `Exception`
>
>
>
> Then you can use it like
>
>     catch_( future, SomeException.class, ex->someValue )
>
>     catch_( future, SomeExcpetion.class, ex->throw new AnotherException() )
>
> That is what we did in bayou Async API [2]. The problem you posted early
> can be solved in bayou as
>
>     Async.execute(...)
>               .timeout(...)
>               .catch_(TimeoutException.class, ex->defaultValue);
>
>
> [1]
> http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010486.html
> [2]
> http://bayou.io/release/0.9/docs/async/Async_Programming.html#Sequential_Actions
>
>
>   Zhong Yu
>
> bayou.io
>
>    Software AG – Sitz/Registered office: Uhlandstraße 12, 64297
> Darmstadt, Germany – Registergericht/Commercial register: Darmstadt HRB
> 1562 - Vorstand/Management Board: Karl-Heinz Streibich
> (Vorsitzender/Chairman), Dr. Wolfram Jost, Arnd Zinnhardt; -
> Aufsichtsratsvorsitzender/Chairman of the Supervisory Board: Dr. Andreas
> Bereczky - *http://www.softwareag.com* <http://www.softwareag.com>
>
> _______________________________________________
> Concurrency-interest mailing list
> Concurrency-interest at cs.oswego.edu
> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>
>


-- 
Cheers,
√
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20140827/6dd042e6/attachment.html>


More information about the Concurrency-interest mailing list