Skip to content

oracle driver and serialization conflict #34819

@a483210

Description

@a483210

Description

Introducing com.oracle.database.jdbc:ojdbc11:21.9.0.0 into the application and then packaging it as Native will result in a serialization error.

The error is consistent with quarkusio oracle driver and serialization conflict.

Cause of the error

The reason for the error is that there is a file oracle.nativeimage.Target_java_io_ObjectStreamClass in the oracle driver, which replaces the code of java.io.ObjectStreamClass during graalVM compilation.

Solution

In quarkus, there is a RemovedResourceBuildItem that can delete a class file of a certain Jar package before compilation. This is quarkus’s solution.

I haven’t found anything similar in SpringBoot yet, so I currently repackaged the oracle driver and uploaded it to my own maven repository.

Is there a more elegant solution in SpringBoot?

Exception prompt

Logging system failed to initialize using configuration from 'null'
java.lang.RuntimeException: Failed to load model from 'META-INF/spring/logback-model'
	at org.springframework.boot.logging.logback.SpringBootJoranConfigurator$ModelReader.read(SpringBootJoranConfigurator.java:318)
	at org.springframework.boot.logging.logback.SpringBootJoranConfigurator.configureUsingAotGeneratedArtifacts(SpringBootJoranConfigurator.java:114)
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.initializeFromAotGeneratedArtifactsIfPossible(LogbackLoggingSystem.java:210)
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:187)
	at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:332)
	at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:298)
	at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:246)
	at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:223)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
	at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136)
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:81)
	at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:64)
	at java.base@17.0.5/java.lang.Iterable.forEach(Iterable.java:75)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112)
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:63)
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:352)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291)
	at com.psd.act.service.ActApplicationKt.main(ActApplication.kt:32)
Caused by: java.lang.IllegalStateException: Object serialization is currently not supported
	at java.base@17.0.5/java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:60)
	at java.base@17.0.5/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2017)
	at java.base@17.0.5/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1898)
	at java.base@17.0.5/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2224)
	at java.base@17.0.5/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1733)
	at java.base@17.0.5/java.io.ObjectInputStream.readObject(ObjectInputStream.java:509)
	at java.base@17.0.5/java.io.ObjectInputStream.readObject(ObjectInputStream.java:467)
	at org.springframework.boot.logging.logback.SpringBootJoranConfigurator$ModelReader.read(SpringBootJoranConfigurator.java:312)
	... 23 more

Environment

  • Spring Boot version number: 3.0.2
  • GraalVM version number: graalvm64-ce-17.0.5-22.3.0
  • OracleDriver version number: com.oracle.database.jdbc:ojdbc11:21.9.0.0
  • Operating system information: MacOS

Steps to reproduce

  • 1.Create a new Spring Boot project and add Oracle database dependencies;
  • 2.Configure Oracle database connection and use Oracle database Driver;
  • 3.Build the application into a Native image;
  • 4.Start the Native image and the above error message appears.

Metadata

Metadata

Assignees

No one assigned

    Labels

    for: external-projectFor an external project and not something we can fix

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions