oracle-r2dbc icon indicating copy to clipboard operation
oracle-r2dbc copied to clipboard

Class Cast Exceptio when I call subscribe method on a Mono

Open karthickbhaskar opened this issue 2 years ago • 8 comments

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:

image

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)

karthickbhaskar avatar Sep 03 '22 08:09 karthickbhaskar

I am having the same issue upon executing update query

saikrir avatar Sep 04 '22 07:09 saikrir

@saikrir Any subsequent updates/inserts chanined inside this is failing . Is it happening for you

karthickbhaskar avatar Sep 05 '22 10:09 karthickbhaskar

@karthickbhaskar - My terminal operation performs update, so I am not sure if subsequent updates or inserts fail.

saikrir avatar Sep 05 '22 20:09 saikrir

@saikrir : sure . got it .

@Michael-A-McMahon : Any idea on this issue ?

karthickbhaskar avatar Sep 06 '22 11:09 karthickbhaskar

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).

Michael-A-McMahon avatar Sep 06 '22 20:09 Michael-A-McMahon

@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?

Michael-A-McMahon avatar Sep 28 '22 16:09 Michael-A-McMahon

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.

Michael-A-McMahon avatar Oct 05 '22 23:10 Michael-A-McMahon

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.

mp911de avatar Oct 06 '22 06:10 mp911de

Closing this issue as it #89 appears to be a duplicate

Michael-A-McMahon avatar Nov 10 '22 19:11 Michael-A-McMahon