• Environment Java -17 bellsoft-liberica-vm-core-openjdk17.0.6+10-22.3.1+1-linux-amd64 Spring Boot Version 3.0.4-SNAPSHOT Spring-integration version : 6.1.0-SNAPSHOT (as Spring AOT has problem with instance suppliers)

  • Followed the spring-boot reference docs: mvn -Pnative spring-boot:build-image-no-fork docker run -v /mnt/c/woa/gitlab-src/lumc/dist-java17-docker:/dist --rm -p 8085:8085 -e GE_WOA_HOME=/dist --network cc-bridge-network

  • Fails to run the app on docker : Please expand the error below to see the stacktrace

Error
Exception in thread "main" java.lang.IllegalStateException: java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - Failed to instantiate converter class [ch.qos.logback.classic.pattern.RelativeTimeConverter] for keyword [relative] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.RelativeTimeConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - [relative] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - Failed to instantiate converter class [ch.qos.logback.classic.pattern.DateConverter] for keyword [d] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.DateConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - [d] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - Failed to instantiate converter class [ch.qos.logback.classic.pattern.ThreadConverter] for keyword [thread] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.ThreadConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - [thread] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - Failed to instantiate converter class [ch.qos.logback.classic.pattern.MDCConverter] for keyword [X] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.MDCConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - [X] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - Failed to instantiate converter class [ch.qos.logback.classic.pattern.MDCConverter] for keyword [X] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.MDCConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - [X] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - Failed to instantiate converter class [ch.qos.logback.classic.pattern.LevelConverter] for keyword [level] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.LevelConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - [level] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - Failed to instantiate converter class [ch.qos.logback.classic.pattern.LoggerConverter] for keyword [logger] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.LoggerConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - [logger] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - Failed to instantiate converter class [ch.qos.logback.classic.pattern.MessageConverter] for keyword [msg] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.MessageConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - [msg] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - Failed to instantiate converter class [ch.qos.logback.classic.pattern.LineSeparatorConverter] for keyword [n] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.LineSeparatorConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@5684283c - [n] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - Failed to instantiate converter class [ch.qos.logback.classic.pattern.RelativeTimeConverter] for keyword [relative] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.RelativeTimeConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - [relative] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - Failed to instantiate converter class [ch.qos.logback.classic.pattern.DateConverter] for keyword [d] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.DateConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - [d] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - Failed to instantiate converter class [ch.qos.logback.classic.pattern.ThreadConverter] for keyword [thread] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.ThreadConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - [thread] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - Failed to instantiate converter class [ch.qos.logback.classic.pattern.MDCConverter] for keyword [X] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.MDCConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - [X] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - Failed to instantiate converter class [ch.qos.logback.classic.pattern.MDCConverter] for keyword [X] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.MDCConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - [X] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - Failed to instantiate converter class [ch.qos.logback.classic.pattern.LevelConverter] for keyword [level] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.LevelConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - [level] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - Failed to instantiate converter class [ch.qos.logback.classic.pattern.LoggerConverter] for keyword [logger] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.LoggerConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - [logger] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - Failed to instantiate converter class [ch.qos.logback.classic.pattern.MessageConverter] for keyword [msg] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.MessageConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - [msg] is not a valid conversion word
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - Failed to instantiate converter class [ch.qos.logback.classic.pattern.LineSeparatorConverter] for keyword [n] ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.pattern.LineSeparatorConverter
ERROR in ch.qos.logback.core.pattern.parser.Compiler@6e05ae77 - [n] is not a valid conversion word
        at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:347)
        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.6/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:354)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293)
        at com.ge.woa.di.fhir.app.DiFhirAppBoot.main(DiFhirAppBoot.java:17)

Comment From: wilkinsona

Thanks for the report. Unfortunately, it doesn't include enough information for us to diagnose the problem. For example, we can't tell if you're using custom Logback XML configuration or relying on the defaults. I suspect it's the latter, but cannot be certain. If you would like us to spend some more time investigating, please spend some time providing a complete yet minimal sample that reproduces the problem. You can share it with us by pushing it to a separate repository on GitHub or by zipping it up and attaching it to this issue.

Comment From: ksanjeev9211

I had custom logback-spring.xml, however, I tried with the default one also but to no avail, same issue.

#logging.config=${APP_ENV}/conf/logback-spring.xml
#logging.config.file.name=${APP_ENV}/apps/logs/fhir-processor.log

Later, I found a similar issue on jhipster's github: https://github.com/jhipster/jhipster-lite/issues/5535

I followed the advice there, now I am getting another problem

Details
com.microsoft.sqlserver.jdbc.SQLServerException: SQL Server collation SQL_Latin1_General_CP1_CI_AS is not supported by this driver. ClientConnectionId:3c1526de-61b3-4752-b49a-0767236d0d29
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:3680)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.processEnvChange(SQLServerConnection.java:4857)
        at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEnvChange(tdsparser.java:215)
        at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84)
        at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:37)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:6162)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:4785)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:4723)
        at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7785)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3793)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:3233)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2833)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2671)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1640)
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:936)
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359)
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201)
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470)
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561)
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:100)
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
        at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36)
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207)
        at org.hibernate.boot.model.relational.Database.<init>(Database.java:44)
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218)
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:191)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419)
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66)
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:310)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293)
        at com.ge.woa.di.fhir.app.DiFhirAppBoot.main(DiFhirAppBoot.java:17)
Caused by: java.io.UnsupportedEncodingException: SQL Server collation SQL_Latin1_General_CP1_CI_AS is not supported by this driver.
        at com.microsoft.sqlserver.jdbc.SQLCollation.encodingFromSortId(SQLCollation.java:535)
        at com.microsoft.sqlserver.jdbc.SQLCollation.<init>(SQLCollation.java:97)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.processEnvChange(SQLServerConnection.java:4855)
        ... 57 common frames omitted
Caused by: java.io.UnsupportedEncodingException: Codepage Cp1252 is not supported by the Java environment.
        at com.microsoft.sqlserver.jdbc.Encoding.checkSupported(SQLCollation.java:600)
        at com.microsoft.sqlserver.jdbc.SQLCollation$SortOrder.getEncoding(SQLCollation.java:505)
        at com.microsoft.sqlserver.jdbc.SQLCollation.encodingFromSortId(SQLCollation.java:531)
        ... 59 common frames omitted

P.S. Just to let you know, a very trivial app's native image runs on docker without any issues, and also the above fhir-processor runs perfectly on jvm and having it to use AOT generated code java -Dspring.aot.enabled=true -jar fhir-processor.jar

Comment From: ksanjeev9211

I will try creating a similar app with the above issue on my personal laptop and upload it here.

Comment From: wilkinsona

Thanks for the update.

To be able to use Cp1252 in a Graal native image, it must be built with -H:+AddAllCharsets. You can see an example of the required Maven configuration in https://github.com/spring-projects/spring-boot/issues/34010#issuecomment-1409287033.

Comment From: ksanjeev9211

Thanks Andy for the quick reply. I followed the instruction provided in #34010, however, still getting the same issue. Will dig in further and let you know.

Thanks.

I have the following configuration for the native-maven-plugin and the spring-boot-maven-plugin, not sure if I am missing something or not.

SpringBoot Native image not starting on Docker as Logback configuration error detected

Comment From: scottfrederick

@ksanjeev9211 When building a Docker image with spring-boot:build-image and building a native executable, the native build tools are run by buildpacks, not locally by Maven. Adding buildArgs to the native-maven-plugin configuration won't do what you need in this case. You will need to set the -H: argument in the buildpack environment (like you're doing with BP_DEBUG) using the BP_NATIVE_IMAGE_BUILD_ARGUMENTS as documented by the Paketo Native Image buildpack documentation.

Comment From: ksanjeev9211

Thanks Andy and Scott, it worked. We can close this issue for the time being.

P.S. I am now getting some other JPA bootstrap issues like 'not a managed type' for all the JPA entities, I will further dig into this and in case I am stuck I would ask a question on stackoverflow.

Once again thanks for all the help