[ 
https://issues.apache.org/jira/browse/CXF-6833?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15263891#comment-15263891
 ] 

Andrei Ivanov commented on CXF-6833:
------------------------------------

On other standard web projects I used to create a separate module with the REST 
API (service interfaces and model classes) which would be shared by the server 
and client modules.

Now I'm actually trying to use the RxJava / Retrofit combination on Android and 
tried to use the same approach, but now it seems I have to use either the 
Retrofit {{Call}}, which I don't really want since it's very specific to it, or 
use call adapters as the standard JDK {{CompletableFuture}} or RxJava's 
{{Observable}}.

As I would like to try to use RxJava for other things 
(http://blog.danlew.net/2014/10/08/grokking-rxjava-part-4/), {{Observable}} 
seems to be a nice choice.
Now I have the problem with the server side.
Is there a quick way to make CXF work with this, even in a synchronous way? 
Maybe just handle result conversion somehow?

> support RxJava Observable<T> in return values as a more composeable 
> alternative to Future<T>
> --------------------------------------------------------------------------------------------
>
>                 Key: CXF-6833
>                 URL: https://issues.apache.org/jira/browse/CXF-6833
>             Project: CXF
>          Issue Type: Sub-task
>          Components: JAX-RS
>            Reporter: james strachan
>             Fix For: 3.2.0
>
>
> when invoking multiple REST services concurrently in a microservice kinda 
> world it can be really helpful to use RxJava's Observable<T> so that you can 
> easily compose concurrent asynchronous requests together.
> e.g. see this blog:
> http://joluet.github.io/blog/2014/07/07/rxjava-retrofit/
> Its basically about using RxJava's Observable<T> as the result type; which is 
> a little like a Future<T> but can handle streams of values and is composable.
> It would be great to do this both on the client and server side; as a server 
> may invoke multiple asynchronous back ends and return a composition of 
> results etc.
> e.g.
> {code}
> @GET("/session.json")
> Observable<LoginResponse> login();
> @GET("/user.json")
> Observable<UserState> getUserState();
> {code}
> you can then use the Observable<T> composition methods to join / flatMap  to 
> compose multiple requests across different microservice invocations together 
> with timeouts etc e.g. to compose the latest from 2 calls:
> {code}
> Observable.combineLatest(api.fetchUserProfile(), api.getUserState(),
> (user, userStatus) -> new Pair<>(user, userStatus));
> {code}
> and you're done! There's support for timeouts and other kinds of composition 
> mechanisms too.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to