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

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

Open rathoreamrsingh opened this issue 2 years ago • 5 comments

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)

rathoreamrsingh avatar Oct 05 '22 01:10 rathoreamrsingh

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?

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

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()
}

rathoreamrsingh avatar Oct 05 '22 05:10 rathoreamrsingh

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.

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

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.

mp911de avatar Oct 12 '22 09:10 mp911de

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

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