[resteasy-dev] New dependency on reactive-contexts

Ron Sigal rsigal at redhat.com
Mon Jun 18 19:27:56 EDT 2018


Very nice!! Much better. Hats off to Professeur Fromage!!


On 06/18/2018 10:21 AM, Stephane Epardaud wrote:
> Oh yeah, funny indeed. What sucks is that there's no plugin/hook for 
> automatic context propagation for CompletionStage, but yes, we could 
> mention in the docs you pointed to that for rxjava1/2 this actually 
> works and is automatic. We could also point out that if you import the 
> resteasy-reactive-context module, you can rewrite the example with:
> @GET
> @Path("test")
> @Produces("text/plain")
> public CompletionStage<String> text(@Context HttpRequest request) {
>    System.out.println("request (inline): " + request);
>    System.out.println("application (inline): " + 
> ResteasyProviderFactory.getContextData(Application.class));
>    CompletableFuture<String> cs = new CompletableFuture<>();
>    ExecutorService executor = Executors.newSingleThreadExecutor();
>    Object[] contexts = Context.capture();
>    executor.submit(
>          new Runnable() {
>             public void run() {
>                Object[] oldContexts = Context.install(contexts);
>                try {
>                   System.out.println("request (async): " + request);
>                   System.out.println("application (async): " + 
> ResteasyProviderFactory.getContextData(Application.class));
>                   cs.complete("hello");
>                } catch (Exception e) {
>                   e.printStackTrace();
>                } finally {
>                   Context.restore(oldContexts);
>                }
>             }
>          });
>    return cs;
> }
>
> Note that this gets you the resteasy context but also CDI and any 
> other reactive context provider that is in the classpath.
>
> And in fact I think I should add wrappers that do this automatically 
> for Runnable and CompletionStage in reactive-contexts-core, now that I 
> look at this.
>
> On 18/06/18 16:13, Alessio Soldano wrote:
>> Hi Stephane,
>> funnily enough, the last commit on resteasy master is related to the 
>> issue you're mentioning: 
>> https://github.com/resteasy/Resteasy/commit/89badabb88b4d98e7f8d06f0ae0330ca21227bfe
>> So, yes, I think a solution for this problem will always be better 
>> than only telling users to be aware of the problem, which is what we 
>> were going to do.
>> 17KB of dependencies for this are clearly fine.
>> Looking forward for the PR ;-)
>> Thanks
>>
>>
>> On Mon, Jun 18, 2018 at 3:14 PM, Stephane Epardaud <stef at epardaud.fr 
>> <mailto:stef at epardaud.fr>> wrote:
>>
>>
>>     Hi,
>>
>>     At the moment, the resteasy-rxjava and resteasy-rxjava2 modules
>>     register hooks into the rxjava and rxjava2 plugin/hook system, in
>>     order to propagate the RESTEasy context (thread-local) into all
>>     phases of rxjava single/flowable/etc, which can otherwise be
>>     scheduled on any scheduler/thread and so would lose the RESTEasy
>>     context.
>>
>>     RxJava being what it is, you can only register a single
>>     plugin/hook globally, so if RESTEasy defines it, nobody else can.
>>     That's problematic, because CDI also requires context
>>     propagation, and so does Redpipe (to name just the two examples I
>>     am using ATM), so I created a library called Reactive Contexts
>>     which decouples libraries that have a context to propagate
>>     (RESTEasy, CDI, Redpipe, etc…) and libraries that provide context
>>     propagation (RxJava1, 2, etc…).
>>
>>     https://reactiverse.io/reactive-contexts
>>     <https://reactiverse.io/reactive-contexts>
>>
>>
>>     That library is super small (4k core, 13k propagator for rxjava).
>>     I'd like to remove the custom context propagation in the
>>     resteasy-rxjava/rxjava2 and make those modules depend on a new
>>     resteasy-reactive-context which would depend on
>>     reactive-contexts-core to provide a context provider for RESTEasy.
>>
>>     This way, I can also make CDI and Redpipe provide such a module
>>     and all those contexts will be propagated for rxjava for all users :)
>>
>>     WDYT? Do you agree on that extra dependency ? It's only for the
>>     rxjava modules, not the core.
>>
>>
>>
>>
>>     _______________________________________________
>>     resteasy-dev mailing list
>>     resteasy-dev at lists.jboss.org <mailto:resteasy-dev at lists.jboss.org>
>>     https://lists.jboss.org/mailman/listinfo/resteasy-dev
>>     <https://lists.jboss.org/mailman/listinfo/resteasy-dev>
>>
>>
>>
>>
>> -- 
>>
>> Alessio Soldano
>>
>> Associate Manager
>>
>> Red Hat
>>
>> <https://www.redhat.com>
>> <https://red.ht/sig>
>>
>
>
>
> _______________________________________________
> resteasy-dev mailing list
> resteasy-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/resteasy-dev

-- 
My company's smarter than your company (unless you work for Red Hat)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/resteasy-dev/attachments/20180618/32c67e30/attachment.html 


More information about the resteasy-dev mailing list