users@jax-rs-spec.java.net

[jax-rs-spec users] Re: [PLEASE REVIEW] JAX-RS Client Reactive API -- updated

From: Sergey Beryozkin <sberyozkin_at_talend.com>
Date: Fri, 20 Jan 2017 17:00:53 +0000

We still have rx() for those who would like to get a default, they do not have to even use this provider.
'Java8' actually looks strange to me, the argument about the 'beginners' does not work IMHO, we are talking about the sophisticated developers here knowing what they do, what Rx is, etc...

Pavel is it right, we still have rx() ?
I.e. CompletionStageRxInvokerProvider does have to be effectively pre-registered

Sergey
On 20/01/17 16:49, Markus KARG wrote:
Pavel,

thank you for considering the critics and proposals discussed this week! It is great that you picked up the ideas.

As ugly as the API finally looks, I do not see an way to make it even better. :-( So for me, this new proposal is acceptable, given the fact that the majority in this EG apparently wants to support multiple RX implementations.

But there is only one thing I would really ask for: Can we rename "CompletionStageRxInvokerProvider" to e. g. "Java8" or something nice like that (so it could be similar to other providers named like "RxJava")? I mean, that name is certainly technically correct, but totally ugly to write and understand for beginners! :-)

Thanks
-Markus


From: Pavel Bucek [mailto:pavel.bucek_at_oracle.com]
Sent: Freitag, 20. Januar 2017 15:12
To: jsr370-experts_at_jax-rs-spec.java.net<mailto:jsr370-experts_at_jax-rs-spec.java.net>
Subject: [PLEASE REVIEW] JAX-RS Client Reactive API -- updated

Dear experts,

thanks for your feedback!

Last suggestion by Santiago (doing lookup by the RxInvoker subclass) is implementable and I believe it is the best one we do have.

Code example (extensibility support):

Client rxClient = client.register(CompletionStageRxInvokerProvider.class, RxInvokerProvider.class);



CompletionStage<List<String>> cs =

        rxClient.target("remote/forecast/{destination}")

                .resolveTemplate("destination", "mars")

                .request()

                .header("Rx-User", "Java8")

                .rx(CompletionStageRxInvoker.class)

                .get(new GenericType<List<String>>() {

                });



cs.thenAccept(System.out::println);
Corresponding pull request: https://github.com/jax-rs/api/pull/3
Please review the pull request and provide your comments and suggestions.

Thanks and have a nice weekend,
Pavel


On 19/01/2017 16:54, Santiago Pericasgeertsen wrote:
Hi Pavel,

 Just catching up with this issue. I guess the two levels of indirection has led us into a generic wall :)


Client rxClient = client.register(CompletionStageRxInvokerProvider.class);

CompletionStage<UserPojo> cs =

        rxClient.target("http://foo.bar"<http://foo.bar/>)

                .request()

                .rx(CompletionStage.class)

                .get(UserPojo.class);
 So what if we reduce indirection and write:

   .rx(CompletionStageRxInvoker.class)

 as before, still keeping the provider for it? Less ideal of course.

- Santiago