Uploaded image for project: 'RESTEasy'
  1. RESTEasy
  2. RESTEASY-1939

Use Reactive Contexts instead of doing our own context propagation for rxjava

    XMLWordPrintable

Details

    • Feature Request
    • Resolution: Done
    • Major
    • 4.0.0.Beta5
    • 3.6.0.Final, 4.0.0.Beta4
    • jaxrs
    • None

    Description

      As discussed on mailing list:

      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

      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

      Attachments

        Issue Links

          Activity

            People

              rhn-support-asoldano Alessio Soldano
              separdau@redhat.com Stephane Epardaud
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: