Hi Pavel,

Looks fine.

WebSocket.java:
- line 82: I'd replace 'never' with 'does not'; it is more like a statement for fact and less a guarantee.

- LIne 54: The notation "{@code .onX}" seems unnecessary, is quite cryptic, and can be removed.

Are there any tests that would be updated to go along with the change to CF<WebSocket>.

Regards, Roger


On 6/7/2016 11:48 AM, Pavel Rappo wrote:
Hi,

Could you please review the following change for JDK-8156693?

http://cr.openjdk.java.net/~prappo/8156693/webrev.01/

This change addresses some WebSocket API refinements and enhancements from [1].

WebSocket returns `CompletableFuture` from some of its methods. CFs are used by
an implementation to signal when the operation has completed.

Currently, there is a number of known issues with how it's done. These issues
reduce usability of the feature.

1. Change methods that return `CompletableFuture<Void>` to return
`CompletableFuture<WebSocket>`.

The design was based on a false assumption that `WebSocket` (possibly needed to
continue asynchronous operation) is always accessible in the same scope where
the returned CF is used.

Before:

     CompletableFuture<WebSocket> wsf = webSocketBuilder.buildAsync();
     wsf.thenCompose(ws -> ws.sendText("Hi ", false))
        .thenCompose((v) -> wsf.join().sendText("there", false)).join();

After:

     CompletableFuture<WebSocket> wsf = webSocketBuilder.buildAsync();
     wsf.thenCompose(ws -> ws.sendText("Hi ", false))
        .thenCompose(ws -> ws.sendText("there", false)).join();

2. Remove stipulation that `CompletableFuture` is returned immediately.

This is needlessly restrictive for an implementation. It might also give a false
impression that the method *always* dispatches to another thread and returns
immediately.

3. Make methods that return `CompletableFuture` to relay (as mush as possible)
recoverable or non-programming exceptions through returned CF.

There's some evidence [2], [3] that this aspect actually makes it harder to use
such methods in completely async computations.

Thanks,
-Pavel

--------------------------------------------------------------------------------
[1] https://bugs.openjdk.java.net/browse/JDK-8155621
[2] http://mail.openjdk.java.net/pipermail/net-dev/2016-April/009638.html
[3] http://cs.oswego.edu/pipermail/concurrency-interest/2016-May/015125.html


Reply via email to