micronaut-projects / micronaut-cache

This project includes caching support for Micronaut
Apache License 2.0
29 stars 31 forks source link

Add support for RxJava 3 reactive types #254

Closed volkerrichert closed 3 years ago

volkerrichert commented 3 years ago

Thanks for reporting an issue, please review the task list below before submitting the issue. Your issue report will be closed if the issue is incomplete and the below tasks not completed.

NOTE: If you are unsure about something and the issue is more of a question a better place to ask questions is on Stack Overflow (https://stackoverflow.com/tags/micronaut) or Gitter (https://gitter.im/micronautfw/). DO NOT use the issue tracker to ask questions.

Task List

Steps to Reproduce

  1. Implement a cache bean returning a Single (RxJava3) like so
    
    import io.reactivex.rxjava3.core.Single;
    ...

@Cacheable public Single getDataById(String id) { }

2. Setup your caching (I'm using redis) as usual
3. Request the method to store data in cache

### Expected Behaviour

I expect the data to be stored in cache

### Actual Behaviour

A exception is thrown:

`io.micronaut.core.async.publisher.CompletableFuturePublisher cannot be cast to class SomePoJo (io.micronaut.core.async.publisher.CompletableFuturePublisher and SomePoJo are in unnamed module of loader 'app')"`

16:52:38.075 [io-executor-thread-1:SHDZEFFDS] ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: class io.micronaut.core.async.publisher.CompletableFuturePublisher cannot be cast to class de.addmore.business.cvpn.repository.ntas.model.GroupVpnData (io.micronaut.core.async.publisher.CompletableFuturePublisher and de.addmore.business.cvpn.repository.ntas.model.GroupVpnData are in unnamed module of loader 'app') java.lang.ClassCastException: class io.micronaut.core.async.publisher.CompletableFuturePublisher cannot be cast to class de.addmore.business.cvpn.repository.ntas.model.GroupVpnData (io.micronaut.core.async.publisher.CompletableFuturePublisher and de.addmore.business.cvpn.repository.ntas.model.GroupVpnData are in unnamed module of loader 'app') at io.reactivex.rxjava3.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:58) at io.micronaut.rxjava3.instrument.RxInstrumentedSingleObserver.onSuccess(RxInstrumentedSingleObserver.java:65) at io.reactivex.rxjava3.internal.operators.single.SingleResumeNext$ResumeMainSingleObserver.onSuccess(SingleResumeNext.java:65) at io.micronaut.rxjava3.instrument.RxInstrumentedSingleObserver.onSuccess(RxInstrumentedSingleObserver.java:65) at io.reactivex.rxjava3.internal.operators.single.SingleJust.subscribeActual(SingleJust.java:30) at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813) at io.micronaut.rxjava3.instrument.RxInstrumentedSingle.subscribeActual(RxInstrumentedSingle.java:52) at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813) at io.reactivex.rxjava3.internal.operators.single.SingleResumeNext.subscribeActual(SingleResumeNext.java:39) at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813) at io.micronaut.rxjava3.instrument.RxInstrumentedSingle.subscribeActual(RxInstrumentedSingle.java:52) at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813) at io.reactivex.rxjava3.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:35) at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813) at io.micronaut.rxjava3.instrument.RxInstrumentedSingle.subscribeActual(RxInstrumentedSingle.java:52) at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813) at io.reactivex.rxjava3.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:35) at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813) at io.micronaut.rxjava3.instrument.RxInstrumentedSingle.subscribeActual(RxInstrumentedSingle.java:52) at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813) at hu.akarnokd.rxjava3.bridge.SingleV3toV2.subscribeActual(SingleV3toV2.java:32) at io.reactivex.Single.subscribe(Single.java:3603) at io.micronaut.reactive.rxjava2.RxInstrumentedSingle.subscribeActual(RxInstrumentedSingle.java:52) at io.reactivex.Single.subscribe(Single.java:3603) at io.reactivex.internal.operators.maybe.MaybeFromSingle.subscribeActual(MaybeFromSingle.java:41) at io.reactivex.Maybe.subscribe(Maybe.java:4290) at io.reactivex.internal.operators.maybe.MaybeSwitchIfEmptySingle.subscribeActual(MaybeSwitchIfEmptySingle.java:45) at io.reactivex.Single.subscribe(Single.java:3603) at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34) at io.reactivex.Single.subscribe(Single.java:3603) at io.micronaut.reactive.rxjava2.RxInstrumentedSingle.subscribeActual(RxInstrumentedSingle.java:52) at io.reactivex.Single.subscribe(Single.java:3603) at io.reactivex.internal.operators.single.SingleToFlowable.subscribeActual(SingleToFlowable.java:37) at io.reactivex.Flowable.subscribe(Flowable.java:14918) at io.reactivex.Flowable.subscribe(Flowable.java:14865) at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:57) at io.reactivex.Flowable.subscribe(Flowable.java:14918) at io.reactivex.Flowable.subscribe(Flowable.java:14865) at io.reactivex.internal.operators.flowable.FlowableDefer.subscribeActual(FlowableDefer.java:42) at io.reactivex.Flowable.subscribe(Flowable.java:14918) at io.reactivex.Flowable.subscribe(Flowable.java:14865) at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:57) at io.reactivex.Flowable.subscribe(Flowable.java:14918) at io.reactivex.Flowable.subscribe(Flowable.java:14865) at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82) at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:288) at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:253) at io.micronaut.scheduling.instrument.InvocationInstrumenterWrappedRunnable.run(InvocationInstrumenterWrappedRunnable.java:47) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) at java.base/java.lang.Thread.run(Thread.java:832)



A RxJava 2 Single works fine.

### Environment Information

- **Operating System**: Win 10
- **Micronaut Version:** 2.1.4 & 2.2.0
- **JDK Version:** JDK 15
graemerocher commented 3 years ago

You need the micronaut-rxjava3 module on your classpath