oracle-r2dbc
oracle-r2dbc copied to clipboard
Class Cast Exceptio when I call subscribe method on a Mono
Sample Code:
Exception takes place in the highlighted code in bold below
testSubscriptionMono.flatMap(testSubscription -> { testSubscription.setMembershipStatus("ENROLLED"); return repositoryService.saveTestSubscription(testSubscription); }).subscribe(value -> System.out.println("RECEIVED " + value), error -> error.printStackTrace());
Depdendencies:
Error Logs:
java.lang.ClassCastException: class java.lang.Long cannot be cast to class java.lang.Integer (java.lang.Long and java.lang.Integer are in module java.base of loader 'bootstrap') at java.base/java.util.stream.Collectors.lambda$summingInt$19(Collectors.java:673) at reactor.core.publisher.MonoStreamCollector$StreamCollectorSubscriber.onNext(MonoStreamCollector.java:132) at reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmit(FluxFlatMap.java:543) at reactor.core.publisher.FluxFlatMap$FlatMapInner.onNext(FluxFlatMap.java:984) at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200) at reactor.core.publisher.FluxConcatArray$ConcatArrayDelayErrorSubscriber.onNext(FluxConcatArray.java:364) at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onNext(FluxFilterFuseable.java:118) at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299) at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2398) at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:360) at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.request(FluxFilterFuseable.java:191) at reactor.core.publisher.FluxConcatArray$ConcatArrayDelayErrorSubscriber.request(FluxConcatArray.java:461) at reactor.core.publisher.FluxPeek$PeekSubscriber.request(FluxPeek.java:138) at reactor.core.publisher.FluxFlatMap$FlatMapInner.onSubscribe(FluxFlatMap.java:964) at reactor.core.publisher.FluxPeek$PeekSubscriber.onSubscribe(FluxPeek.java:171) at reactor.core.publisher.FluxConcatArray$ConcatArrayDelayErrorSubscriber.onSubscribe(FluxConcatArray.java:350) at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onSubscribe(FluxFilterFuseable.java:87) at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:265) at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) at reactor.core.publisher.Flux.subscribe(Flux.java:8466) at reactor.core.publisher.FluxConcatArray$ConcatArrayDelayErrorSubscriber.onComplete(FluxConcatArray.java:443) at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:73) at reactor.core.publisher.Flux.subscribe(Flux.java:8466) at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:426) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onNext(MonoFlatMapMany.java:250) at reactor.core.publisher.FluxUsingWhen$UsingWhenSubscriber.onNext(FluxUsingWhen.java:345) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200) at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201) at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onNext(MonoFlatMapMany.java:250) at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2398) at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onSubscribeInner(MonoFlatMapMany.java:150) at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:189) at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:172) at oracle.r2dbc.impl.AsyncLock.lambda$get$2(AsyncLock.java:167) at oracle.r2dbc.impl.AsyncLock.unlock(AsyncLock.java:125) at oracle.r2dbc.impl.AsyncLock$UsingConnectionSubscriber.terminate(AsyncLock.java:516) at oracle.r2dbc.impl.AsyncLock$UsingConnectionSubscriber.onComplete(AsyncLock.java:502) at reactor.core.publisher.StrictSubscriber.onComplete(StrictSubscriber.java:123) at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:2058) at org.reactivestreams.FlowAdapters$FlowToReactiveSubscriber.onComplete(FlowAdapters.java:221) at oracle.jdbc.internal.CompletionStageUtil$IteratorSubscription.emitComplete(CompletionStageUtil.java:805) at oracle.jdbc.internal.CompletionStageUtil$IteratorSubscription.emitItems(CompletionStageUtil.java:752) at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
I am having the same issue upon executing update query
@saikrir Any subsequent updates/inserts chanined inside this is failing . Is it happening for you
@karthickbhaskar - My terminal operation performs update, so I am not sure if subsequent updates or inserts fail.
@saikrir : sure . got it .
@Michael-A-McMahon : Any idea on this issue ?
Stack suggests there is a summingInt Collector somewhere in the stack. I suspect it breaks because 1.0.0 release of R2DBC returns update counts as Long objects, where the previous release returned Int objects.
Noting that your Spring and R2DBC Pool dependencies are built for the 0.9.1 release of R2DBC. This likely the cause. If new versions of the dependencies are available, and these versions are built for the 1.0.0 release of R2DBC, then updating may resolve the issue.
The key point is that Oracle R2DBC is only compatible with libraries that support r2dbc-spi-1.0.0 (or newer).
@karthickbhaskar, @saikrir, and @GohKianSeng: Just wanted to check in on this. Were you able to find resolution after updating the libraries, such that all were depending on version 1.0.0 of the r2dbc-spi?
At the moment, I think Spring programmers should stay on version 0.4.0 of Oracle R2DBC. Our 0.4.0 version should be compatible with the current version of Spring Data R2DBC (1.5.x).
However, we can look forward to a later release of the Spring Data Relational project. It seems that an update to the 1.0 SPI is on the way. I see this comment in a milestone release for 3.0.0.M5:
Upgrade to R2DBC 1.0 https://github.com/spring-projects/spring-data-relational/issues/1292
https://github.com/spring-projects/spring-data-relational/releases/tag/3.0.0-M5
@mp911de: Please feel free to correct me if I'm wrong about anything.
What Michael said.
Use the Oracle driver version 0.4 when using Spring Framework 5.3.x and Spring Boot 2.x. Spring Framework 6.0 and Spring Boot 3.0 will be compatible with Oracle driver version 1.0.
Closing this issue as it #89 appears to be a duplicate