oracle / oracle-r2dbc

R2DBC Driver for Oracle Database
https://oracle.com
Other
194 stars 40 forks source link

Upgrade from oracle-r2dbc version 0.4.0 to 1.0.0 is resulting in class cast exception while update. #97

Open rathoreamrsingh opened 1 year ago

rathoreamrsingh commented 1 year ago

Hi,

I was trying to upgrade R2DBC from 0.4.0 to 1.0.0. while doing that I am getting error in update which was working fine in version 0.4.0.

Below is the SQL Update Query from R2dbcRepository Repository:

@Modifying
  @Query(value = "UPDATE <Table_name> SET PARAM_VALUE=:paramValue WHERE BATCH_ID=:batchId and PARAM_NAME=:paramName")
  Mono<Integer> updateODADateParam(String paramValue, String batchId, String paramName);

Error Log:

2022-10-05 09:47:37,080 DEBUG [ForkJoinPool.commonPool-worker-3] org.springframework.r2dbc.core.DefaultDatabaseClient$DefaultGenericExecuteSpec: Executing SQL statement [UPDATE <table_name> SET PARAM_VALUE=:P0_paramValue WHERE BATCH_ID=:P1_batchId and PARAM_NAME=:P2_paramName]
2022-10-05 09:47:37,121 ERROR [ForkJoinPool.commonPool-worker-7] com.gic.eagle.txnHld.handler.RESIBatchDateHandler: Error [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')]
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:804)
    at oracle.jdbc.internal.CompletionStageUtil$IteratorSubscription.emitItems(CompletionStageUtil.java:751)
    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)
Michael-A-McMahon commented 1 year ago

Hi @rathoreamrsingh. Very sorry to see this error yet again! I believe it is a duplicate of #89. Can you check what I wrote there and see if it helps?

rathoreamrsingh commented 1 year ago

Hi @Michael-A-McMahon Thanks a lot for the pointer. I tried upgrading all the dependencies. But this doesn't seems to be working. Do you have any sample project where version 1.0.0 is working I can take some hint from there.

By the way below is my build gradle file which I am using for my project. Please have a look and let me know what I am doing wrong.

plugins {
    id 'org.springframework.boot' version '2.7.2'
    id 'io.spring.dependency-management' version '1.0.12.RELEASE'
    id 'java'
}

group = '<group>'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    maven {
        url "https://nexus/repository/maven-public/"
    }
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

dependencies {
    implementation ('org.springframework.boot:spring-boot-starter-actuator:2.7.4') {
        exclude group: 'org.springframework.boot', module: 'spring-boot'
    }
    implementation 'org.springframework.boot:spring-boot:2.7.4'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.7.4'
    implementation ('org.springframework.boot:spring-boot-starter-data-r2dbc:2.7.4') {
        exclude group: 'io.r2dbc', module: 'r2dbc-spi'
        exclude group: 'io.r2dbc', module: 'r2dbc-pool'
        exclude group: 'org.springframework.data', module: 'spring-data-r2dbc'
        exclude group: 'io.projectreactor', module: 'reactor-core'
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter'
    }
    implementation 'io.r2dbc:r2dbc-spi:1.0.0.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter:2.7.4'
    implementation ('io.r2dbc:r2dbc-pool:1.0.0.RC1') {
        exclude group: 'io.projectreactor', module: 'reactor-core'
    }
    implementation ('org.springframework.data:spring-data-r2dbc:1.5.3') {
        exclude group: 'org.springframework', module: 'spring-r2dbc'
        exclude group: 'io.r2dbc', module: 'r2dbc-spi'
        exclude group: 'io.projectreactor', module: 'reactor-core'
        exclude group: 'org.springframework.data', module: 'spring-data-commons'
        exclude group: 'org.springframework.data', module: 'spring-data-relational'
        exclude group: 'org.springframework', module: 'spring-tx'
        exclude group: 'org.springframework', module: 'spring-context'
        exclude group: 'org.springframework', module: 'spring-beans'
        exclude group: 'org.springframework', module: 'spring-core'
    }
    implementation 'org.springframework.data:spring-data-commons:2.7.3'
    implementation 'org.springframework.data:spring-data-relational:2.4.3'
    implementation 'org.springframework:spring-tx:5.3.23'
    implementation 'org.springframework:spring-context:5.3.23'
    implementation 'org.springframework:spring-beans:5.3.23'
    implementation 'org.springframework:spring-core:5.3.23'

    implementation ('org.springframework:spring-r2dbc:5.3.23') {
        exclude group: 'io.r2dbc', module: 'r2dbc-spi'
        exclude group: 'io.projectreactor', module: 'reactor-core'
    }
    implementation 'io.projectreactor:reactor-core:3.4.23'

    implementation ('com.oracle.database.r2dbc:oracle-r2dbc:1.0.0') {
        exclude group: 'com.oracle.database.jdbc', module: 'ojdbc11'
        exclude group: 'io.projectreactor', module: 'reactor-core'
    }
    implementation ('org.springframework.boot:spring-boot-starter-webflux') {
        exclude group: 'io.projectreactor', module: 'reactor-core'
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter'
    }
    implementation files('./lib/eagle_commons-0.0.1-SNAPSHOT-plain.jar')
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'

    implementation ('sg.com.gic:crypto-lib:1.0.5') {
        exclude group: 'slf4j', module: 'slf4j-api'
        exclude group: 'ch.qos.logback', module: 'logback-core'
        exclude group: 'ch.qos.logback', module: 'logback-classic'
    }
    implementation group: 'com.oracle.database.jdbc', name: 'ojdbc11', version: '21.7.0.0'
    implementation group: 'org.springdoc', name: 'springdoc-openapi-webflux-ui', version: '1.6.11'
    implementation group: 'org.modelmapper', name: 'modelmapper', version: '3.1.0'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
}

tasks.named('test') {
    useJUnitPlatform()
}
Michael-A-McMahon commented 1 year ago

It looks like you may need to stay on the 0.4.0 release for now, as it is the only version compatible with Spring Data R2DBC. However, it looks like a new release of Spring Data is on the way which will be compatible with Oracle R2DBC 1.0.0. Keep an eye on #89 to see what we find.

mp911de commented 1 year ago

FWIW, Spring Framework 6 is expected to go GA in mid-November. The new Reactor Core 3.5 will be GA early November, allowing R2DBC drivers to upgrade in time to be included in the Spring Framework 6 /Spring Boot 3 support.

Michael-A-McMahon commented 1 year ago

Also see https://github.com/oracle/oracle-r2dbc/issues/89#issuecomment-1269434902