Skip to content

Fatal error: com.oracle.svm.core.util.VMError$HostedError: should not reach here #5558

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
oldshensheep opened this issue Dec 2, 2022 · 23 comments
Assignees

Comments

@oldshensheep
Copy link

oldshensheep commented Dec 2, 2022

Describe the issue
Fatal error: com.oracle.svm.core.util.VMError$HostedError: should not reach here

Steps to reproduce the issue

  1. git clone --depth 1 https://github.com/oldshensheep/place.git
  2. ./gradlew nativeCompile

Describe GraalVM and your environment:

  • GraalVM version GraalVM CE 22.3.0 (build 19.0.1+10-jvmci-22.3-b08)
  • JDK major version: 19
  • OS: Windows 11
  • Architecture: AMD64

More details
Build optionl --enable-preview --verbose --native-image-info
Using VirtualThread
Log There!
build.log

SOLVED #5558 (comment)

@chirontt
Copy link

chirontt commented Dec 4, 2022

@oldshensheep From a quick look at build.log file, it's a Spring project, so I reckon you could get better help at the spring-native project, rather than here.

@oldshensheep
Copy link
Author

oldshensheep commented Dec 6, 2022

@chirontt Maybe? But the error message is useless, I don't know what the problem.
Related
#4563
#4466

@oldshensheep
Copy link
Author

I successfully built it on Linux. But startup failed.
Startup log


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.0.0)

2022-12-06T15:16:13.227+08:00  INFO 2097 --- [           main] c.oldshensheep.place.PlaceApplication    : Starting AOT-processed PlaceApplication using Java 19.0.1 with PID 2097 (/mnt/f/Codespaces/github/place/build/native/nativeCompile/place started by sheep in /mnt/f/Codespaces/github/place/build/native/nativeCompile)
2022-12-06T15:16:13.231+08:00  INFO 2097 --- [           main] c.oldshensheep.place.PlaceApplication    : No active profile set, falling back to 1 default profile: "default"
2022-12-06T15:16:13.379+08:00  WARN 2097 --- [           main] c.oldshensheep.place.config.AppConfig    : invalid token , random uuid used
2022-12-06T15:16:13.837+08:00  INFO 2097 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-12-06T15:16:13.848+08:00  INFO 2097 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-12-06T15:16:13.848+08:00  INFO 2097 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.1]
2022-12-06T15:16:13.884+08:00  INFO 2097 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-12-06T15:16:13.884+08:00  INFO 2097 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 653 ms
2022-12-06T15:16:14.028+08:00  INFO 2097 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2022-12-06T15:16:14.103+08:00  INFO 2097 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.1.5.Final
2022-12-06T15:16:14.142+08:00  WARN 2097 --- [           main] org.hibernate.orm.deprecation            : HHH90000021: Encountered deprecated setting [javax.persistence.sharedCache.mode], use [jakarta.persistence.sharedCache.mode] instead
2022-12-06T15:16:14.195+08:00  INFO 2097 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-12-06T15:16:15.318+08:00 ERROR 2097 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.

java.lang.NullPointerException: null
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.functions.JNIFunctions$Support.getMethodID(JNIFunctions.java:1240) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.functions.JNIFunctions.GetMethodID(JNIFunctions.java:407) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNIOnLoadFunctionPointer.invoke(JNILibraryInitializer.java) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNILibraryInitializer.callOnLoadFunction(JNILibraryInitializer.java:71) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNILibraryInitializer.initialize(JNILibraryInitializer.java:132) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.addLibrary(NativeLibrarySupport.java:174) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibrary0(NativeLibrarySupport.java:130) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibraryAbsolute(NativeLibrarySupport.java:89) ~[na:na]
        at java.base@19.0.1/java.lang.ClassLoader.loadLibrary(ClassLoader.java:57) ~[place:na]
        at java.base@19.0.1/java.lang.Runtime.load0(Runtime.java:785) ~[na:na]
        at java.base@19.0.1/java.lang.System.load(System.java:2011) ~[na:na]
        at org.sqlite.SQLiteJDBCLoader.loadNativeLibrary(SQLiteJDBCLoader.java:280) ~[na:na]
        at org.sqlite.SQLiteJDBCLoader.extractAndLoadLibraryFile(SQLiteJDBCLoader.java:237) ~[na:na]
        at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:350) ~[na:na]
        at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:68) ~[na:na]
        at org.sqlite.core.NativeDB.load(NativeDB.java:63) ~[place:na]
        at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:278) ~[place:na]
        at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:65) ~[place:na]
        at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:28) ~[place:na]
        at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:19) ~[na:na]
        at org.sqlite.JDBC.createConnection(JDBC.java:104) ~[place:na]
        at org.sqlite.JDBC.connect(JDBC.java:77) ~[place:na]
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:121) ~[na:na]
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) ~[place:na]
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~[place:na]
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) ~[na:na]
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[na:na]
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:100) ~[na:na]
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[place:na]
        at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[na:na]
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) ~[na:na]
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) ~[na:na]
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) ~[na:na]
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) ~[na:na]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) ~[place:6.1.5.Final]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) ~[place:6.1.5.Final]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) ~[place:6.1.5.Final]
        at org.hibernate.boot.model.relational.Database.<init>(Database.java:44) ~[na:na]
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) ~[na:na]
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:191) ~[na:na]
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) ~[na:na]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1350) ~[place:6.1.5.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1421) ~[place:6.1.5.Final]
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) ~[na:na]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[place:6.0.2]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[place:6.0.2]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[place:6.0.2]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1797) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1747) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[place:6.0.2]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[place:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1130) ~[place:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:905) ~[place:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[place:6.0.2]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[place:3.0.0]
        at com.oldshensheep.place.PlaceApplication.main(PlaceApplication.java:14) ~[place:na]

2022-12-06T15:16:15.323+08:00  WARN 2097 --- [           main] o.h.e.j.e.i.JdbcEnvironmentInitiator     : HHH000342: Could not obtain connection to query metadata

com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: null
        at com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:596) ~[na:na]
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:582) ~[na:na]
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:100) ~[na:na]
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[place:na]
        at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[na:na]
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) ~[na:na]
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) ~[na:na]
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) ~[na:na]
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) ~[na:na]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) ~[place:6.1.5.Final]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) ~[place:6.1.5.Final]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) ~[place:6.1.5.Final]
        at org.hibernate.boot.model.relational.Database.<init>(Database.java:44) ~[na:na]
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) ~[na:na]
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:191) ~[na:na]
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) ~[na:na]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1350) ~[place:6.1.5.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1421) ~[place:6.1.5.Final]
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) ~[na:na]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[place:6.0.2]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[place:6.0.2]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[place:6.0.2]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1797) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1747) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[place:6.0.2]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[place:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1130) ~[place:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:905) ~[place:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[place:6.0.2]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[place:3.0.0]
        at com.oldshensheep.place.PlaceApplication.main(PlaceApplication.java:14) ~[place:na]
Caused by: java.lang.NullPointerException: null
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.functions.JNIFunctions$Support.getMethodID(JNIFunctions.java:1240) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.functions.JNIFunctions.GetMethodID(JNIFunctions.java:407) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNIOnLoadFunctionPointer.invoke(JNILibraryInitializer.java) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNILibraryInitializer.callOnLoadFunction(JNILibraryInitializer.java:71) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNILibraryInitializer.initialize(JNILibraryInitializer.java:132) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.addLibrary(NativeLibrarySupport.java:174) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibrary0(NativeLibrarySupport.java:130) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibraryAbsolute(NativeLibrarySupport.java:89) ~[na:na]
        at java.base@19.0.1/java.lang.ClassLoader.loadLibrary(ClassLoader.java:57) ~[place:na]
        at java.base@19.0.1/java.lang.Runtime.load0(Runtime.java:785) ~[na:na]
        at java.base@19.0.1/java.lang.System.load(System.java:2011) ~[na:na]
        at org.sqlite.SQLiteJDBCLoader.loadNativeLibrary(SQLiteJDBCLoader.java:280) ~[na:na]
        at org.sqlite.SQLiteJDBCLoader.extractAndLoadLibraryFile(SQLiteJDBCLoader.java:237) ~[na:na]
        at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:350) ~[na:na]
        at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:68) ~[na:na]
        at org.sqlite.core.NativeDB.load(NativeDB.java:63) ~[place:na]
        at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:278) ~[place:na]
        at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:65) ~[place:na]
        at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:28) ~[place:na]
        at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:19) ~[na:na]
        at org.sqlite.JDBC.createConnection(JDBC.java:104) ~[place:na]
        at org.sqlite.JDBC.connect(JDBC.java:77) ~[place:na]
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:121) ~[na:na]
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) ~[place:na]
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~[place:na]
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) ~[na:na]
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[na:na]
        ... 39 common frames omitted

2022-12-06T15:16:15.324+08:00 ERROR 2097 --- [           main] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
2022-12-06T15:16:15.325+08:00  WARN 2097 --- [           main] w.s.c.ServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory': Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
2022-12-06T15:16:15.548+08:00  INFO 2097 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2022-12-06T15:16:15.551+08:00 ERROR 2097 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory': Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1751) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[place:6.0.2]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[place:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1130) ~[place:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:905) ~[place:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[place:6.0.2]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[place:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[place:3.0.0]
        at com.oldshensheep.place.PlaceApplication.main(PlaceApplication.java:14) ~[place:na]
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) ~[place:6.1.5.Final]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) ~[place:6.1.5.Final]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) ~[place:6.1.5.Final]
        at org.hibernate.boot.model.relational.Database.<init>(Database.java:44) ~[na:na]
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) ~[na:na]
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:191) ~[na:na]
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) ~[na:na]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1350) ~[place:6.1.5.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1421) ~[place:6.1.5.Final]
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) ~[na:na]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[place:6.0.2]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[place:6.0.2]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[place:6.0.2]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1797) ~[place:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1747) ~[place:6.0.2]
        ... 16 common frames omitted
Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect')
        at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) ~[place:6.1.5.Final]
        at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) ~[place:6.1.5.Final]
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) ~[na:na]
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) ~[na:na]
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) ~[na:na]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) ~[place:6.1.5.Final]
        ... 31 common frames omitted

@oubidar-Abderrahim oubidar-Abderrahim self-assigned this Dec 7, 2022
@oubidar-Abderrahim
Copy link
Member

Hi, thank you for reaching out, could you please provide some details

  1. Are you generating the metadata config files using the tracing agent?
  2. What flags/Args do you use for building the native image?

@oldshensheep
Copy link
Author

@oubidar-Abderrahim

  1. No
  2. --enable-preview --verbose --native-image-info
    Flag config can be found here, in build.gradle.
    And I'm using Spring Native to build this project, so maybe there may be additional parameters provide by spring native?(I don't know)

@oubidar-Abderrahim
Copy link
Member

oubidar-Abderrahim commented Dec 16, 2022

Please use the tracing agent to collect Metadata config before building your image, you can find more about it here: https://www.graalvm.org/22.3/reference-manual/native-image/metadata/AutomaticMetadataCollection/

@oubidar-Abderrahim
Copy link
Member

Any updates?

@pettyalex
Copy link

pettyalex commented Jan 5, 2023

@oldshensheep It looks like you're using sqlite with hibernate and spring data JPA? I'm fairly certain that this is a problem the mechanism that org.sqlite is using to load its native library is not being exercised at build time.

I've seen a couple of different ways that people have hacked around this, including adding the whole java.lang.Classloader to JNI-config, which feels like it's not the right path to take, and spring boot cannot build a native image with that set globally.

Most working demos of org.xerial:sqlite-jdbc that I've seen have --initialize-at-build-time set for graalvm, but Spring Boot will not build with that set globally. I've tried setting --initialize-at-build-time=org.sqlite without luck.

Solving this will probably involve finding the right way to initialize that database connection at build time, so that graalVM can prepare everything necessary for it at runtime. The right way to do this probably involves either graalvm hints, or Spring annotation that will generate them for us.

I had hoped that opening a connection in the main before running the Spring Boot application would help, but all that does is force the NPE immediately:

fun main(args: Array<String>) {
	// Purely for native image generation to detect this at build time
	val connection = JDBC().connect("jdbc:sqlite::memory:", Properties())
	connection.close()

	runApplication<OnepostApplication>(*args)
}

results in

> Task :nativeRun FAILED
Exception in thread "main" java.lang.NullPointerException
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.functions.JNIFunctions$Support.getMethodID(JNIFunctions.java:1240)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.functions.JNIFunctions.GetMethodID(JNIFunctions.java:407)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNIOnLoadFunctionPointer.invoke(JNILibraryInitializer.java)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNILibraryInitializer.callOnLoadFunction(JNILibraryInitializer.java:71)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNILibraryInitializer.initialize(JNILibraryInitializer.java:132)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.addLibrary(NativeLibrarySupport.java:174)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibrary0(NativeLibrarySupport.java:130)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibraryAbsolute(NativeLibrarySupport.java:89)
        at java.base@17.0.5/java.lang.ClassLoader.loadLibrary(ClassLoader.java:57)
        at java.base@17.0.5/java.lang.Runtime.load0(Runtime.java:755)
        at java.base@17.0.5/java.lang.System.load(System.java:1953)
        at org.sqlite.SQLiteJDBCLoader.loadNativeLibrary(SQLiteJDBCLoader.java:280)
        at org.sqlite.SQLiteJDBCLoader.extractAndLoadLibraryFile(SQLiteJDBCLoader.java:237)
        at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:350)
        at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:68)
        at org.sqlite.core.NativeDB.load(NativeDB.java:63)
        at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:278)
        at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:65)
        at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:28)
        at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:19)
        at org.sqlite.JDBC.createConnection(JDBC.java:104)
        at org.sqlite.JDBC.connect(JDBC.java:77)
        at test.nativebuild.onepost.OnepostApplicationKt.main(OnepostApplication.kt:15)

before spring even starts up

@pettyalex
Copy link

pettyalex commented Jan 5, 2023

Here's the only working example I've seen of this specific sqlite library being used in a graalVM native image: https://github.com/ericdallo/sqlite-graalvm-sample

@pettyalex
Copy link

pettyalex commented Jan 5, 2023

I poked at this a bit more. To summarize, Spring Boot is not capable of initializing all classes at build time, or of adding the classloader to JNI config globally, but when I ran the tracing agent on my application and then applied the jni-config.json that it detected, then my application started up, and yours should be able to also. This seems to be a shortcoming of https://github.com/xerial/sqlite-jdbc that we should fix. It's only loadable in graalvm when doing build-time class initialization.

Here's the jni-config.json that my tracing agent recommended, for a spring boot application using spring data JPA & the same sqilte jdbc driver that yours is:

jni-config.json.txt

Edit: It's one of these that is specifcally doing the trick. Interesting

[
  {
    "name":"[Lcom.sun.management.internal.DiagnosticCommandArgumentInfo;"
  },
  {
    "name":"[Lcom.sun.management.internal.DiagnosticCommandInfo;"
  },
  {
    "name":"com.sun.management.internal.DiagnosticCommandArgumentInfo",
    "methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String","java.lang.String","java.lang.String","boolean","boolean","boolean","int"] }]
  },
  {
    "name":"com.sun.management.internal.DiagnosticCommandInfo",
    "methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.String","boolean","java.util.List"] }]
  },
  {
    "name":"java.lang.Boolean",
    "methods":[{"name":"getBoolean","parameterTypes":["java.lang.String"] }]
  },
  {
    "name":"java.lang.Throwable",
    "methods":[{"name":"toString","parameterTypes":[] }]
  },
  {
    "name":"java.util.Arrays",
    "methods":[{"name":"asList","parameterTypes":["java.lang.Object[]"] }]
  }
]

@pettyalex
Copy link

@oldshensheep and Graal maintainers, I just wanted to conclude my own findings when I encountered this same problem with org.sqlite.sqlite-jdbc

This isn't a graal problem, it's that sqlite-jdbc calls Throwable from the native side of JNI, but does not provide that as a JNI hint. This problem can be fixed by adding

  {
    "name":"java.lang.Throwable",
    "methods":[{"name":"toString","parameterTypes":[] }]
  }

to jni-config.json

@oldshensheep
Copy link
Author

@pettyalex Thank you for providing the solution.
@oubidar-Abderrahim
I've been busy with other things lately and I'll be working on it this weekend.

@oldshensheep
Copy link
Author

oldshensheep commented Jan 7, 2023

@oubidar-Abderrahim
I used the tracing agent to get configuration and successfully compiled the executable with it and was able to get it up and running.
Everything works fine on Linux. However, on Windows, although the executable is successfully compiled and runs normally, the compilation shows a failure and throws an exception Fatal error: com.oracle.svm.core.util.VMError$HostedError: should not reach here. The program actually starts and runs normally.
Is this a bug? Or...

@oldshensheep
Copy link
Author

Even though my program starts properly, some of the APIs don't work properly, so there should still be a problem with my configuration file. I am working on it.

@oldshensheep
Copy link
Author

oldshensheep commented Jan 7, 2023

I changed my code. It works fine on Linux
but on Windows it fails to compile as above, and running the executable, access the PUT http://localhost:8080/pixels API throws exception com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.oldshensheep.place.service.PlaceService$SseEmitterResp and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS). This appears to be a native image, in which case you may need to configure reflection for the class that is to be serialized
but reflect-config.json already has a reflection configuration for SseEmitterResp. https://github.com/oldshensheep/place/blob/6dea3594f83ae4e74bdfd4a46d75729e876bc12b/src/main/resources/META-INF/native-image/reflect-config.json#L579
Linux has no such problem.

Edit after 12 hours:
I build on Windows again, this time it starts up failed and throws exception Caused by: java.lang.UnsatisfiedLinkError: jdk.jfr.internal.JVM.isExcluded. I've seen this exception before, and I handled it by adding the compile parameter -enable-monitoring=jfr. On Windows, it does not seem to work.
There always seems to be some configuration files that don't work on Windows, and on Windows build always throw exception. Fatal error: com.oracle.svm.core.util.VMError$HostedError: should not reach here

Edit
I used github action to test the build on Linux and Windows and it worked without errors. So there should be something wrong with my local compilation environment
https://github.com/oldshensheep/place/actions/runs/3865431020/jobs/6588926894

Edit
I run an executable compiled with GitHub Action and an error occurs during startup on Windows.
But it startups properly on Linux

Show startup log

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.0.0)

2023-01-08T15:05:49.839+08:00  INFO 27884 --- [           main] c.oldshensheep.place.PlaceApplication    : Starting AOT-processed PlaceApplication using Java 19.0.1 with PID 27884 (E:\Downloads\artifact\place.exe started by oldsh in E:\Downloads\artifact)
2023-01-08T15:05:49.839+08:00  INFO 27884 --- [           main] c.oldshensheep.place.PlaceApplication    : No active profile set, falling back to 1 default profile: "default"
2023-01-08T15:05:49.925+08:00  INFO 27884 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-01-08T15:05:49.926+08:00  INFO 27884 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-01-08T15:05:49.926+08:00  INFO 27884 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.1]
2023-01-08T15:05:49.936+08:00  INFO 27884 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-01-08T15:05:49.936+08:00  INFO 27884 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 97 ms
2023-01-08T15:05:49.961+08:00  INFO 27884 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2023-01-08T15:05:49.963+08:00  INFO 27884 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.1.5.Final
2023-01-08T15:05:49.964+08:00  WARN 27884 --- [           main] org.hibernate.orm.deprecation            : HHH90000021: Encountered deprecated setting [javax.persistence.sharedCache.mode], use [jakarta.persistence.sharedCache.mode] instead
2023-01-08T15:05:49.968+08:00  INFO 27884 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2023-01-08T15:05:50.029+08:00  INFO 27884 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection org.sqlite.jdbc4.JDBC4Connection@560bed50
2023-01-08T15:05:50.030+08:00  INFO 27884 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2023-01-08T15:05:50.030+08:00  INFO 27884 --- [           main] SQL dialect                              : HHH000400: Using dialect: org.hibernate.community.dialect.SQLiteDialect
2023-01-08T15:05:50.065+08:00  INFO 27884 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2023-01-08T15:05:50.066+08:00  INFO 27884 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2023-01-08T15:05:50.068+08:00  WARN 27884 --- [           main] c.oldshensheep.place.config.AppConfig    : invalid token , random uuid used
2023-01-08T15:05:50.105+08:00  WARN 27884 --- [           main] w.s.c.ServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webConfig': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'rateLimitInterceptor': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'rateLimiterService': Instantiation of supplied bean failed
2023-01-08T15:05:50.223+08:00  INFO 27884 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2023-01-08T15:05:50.224+08:00  INFO 27884 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2023-01-08T15:05:50.236+08:00  INFO 27884 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2023-01-08T15:05:50.237+08:00  INFO 27884 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2023-01-08T15:05:50.241+08:00 ERROR 27884 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webConfig': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'rateLimitInterceptor': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'rateLimiterService': Instantiation of supplied bean failed
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:351) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:271) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:206) ~[na:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1225) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1210) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1157) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:961) ~[place.exe:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:915) ~[place.exe:6.0.2]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[place.exe:6.0.2]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[place.exe:3.0.0]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[place.exe:3.0.0]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) ~[place.exe:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[place.exe:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[place.exe:3.0.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[place.exe:3.0.0]
        at com.oldshensheep.place.PlaceApplication.main(PlaceApplication.java:14) ~[place.exe:na]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'rateLimitInterceptor': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'rateLimiterService': Instantiation of supplied bean failed
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:351) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:271) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:206) ~[na:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1225) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1210) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1157) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1405) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1325) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:334) ~[na:na]
        ... 21 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rateLimiterService': Instantiation of supplied bean failed
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1236) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1210) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1157) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1405) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1325) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:334) ~[na:na]
        ... 36 common frames omitted
Caused by: java.lang.UnsatisfiedLinkError: jdk.jfr.internal.JVM.isExcluded(Ljava/lang/Class;)Z [symbol: Java_jdk_jfr_internal_JVM_isExcluded or Java_jdk_jfr_internal_JVM_isExcluded__Ljava_lang_Class_2]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.access.JNINativeLinkage.getOrFindEntryPoint(JNINativeLinkage.java:152) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNIGeneratedMethodSupport.nativeCallAddress(JNIGeneratedMethodSupport.java:53) ~[na:na]
        at jdk.jfr@19.0.1/jdk.jfr.internal.JVM.isExcluded(JVM.java) ~[na:na]
        at jdk.jfr@19.0.1/jdk.jfr.internal.MetadataRepository.register(MetadataRepository.java:141) ~[na:na]
        at jdk.jfr@19.0.1/jdk.jfr.internal.MetadataRepository.register(MetadataRepository.java:136) ~[na:na]
        at jdk.jfr@19.0.1/jdk.jfr.FlightRecorder.register(FlightRecorder.java:128) ~[na:na]
        at io.lettuce.core.event.connection.JfrConnectionCreatedEvent.<clinit>(JfrConnectionCreatedEvent.java) ~[place.exe:6.2.1.RELEASE]
        at java.base@19.0.1/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[place.exe:na]
        at java.base@19.0.1/java.lang.reflect.Constructor.newInstance(Constructor.java:484) ~[place.exe:na]
        at io.lettuce.core.event.jfr.JfrEventRecorder.createEvent(JfrEventRecorder.java:108) ~[na:na]
        at io.lettuce.core.event.jfr.JfrEventRecorder.record(JfrEventRecorder.java:48) ~[na:na]
        at io.lettuce.core.AbstractRedisClient.initializeChannelAsync(AbstractRedisClient.java:398) ~[place.exe:6.2.1.RELEASE]
        at io.lettuce.core.RedisClient.connectStatefulAsync(RedisClient.java:325) ~[place.exe:6.2.1.RELEASE]
        at io.lettuce.core.RedisClient.connectStandaloneAsync(RedisClient.java:287) ~[place.exe:6.2.1.RELEASE]
        at io.lettuce.core.RedisClient.connect(RedisClient.java:216) ~[place.exe:6.2.1.RELEASE]
        at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:111) ~[na:na]
        at java.base@19.0.1/java.util.Optional.orElseGet(Optional.java:364) ~[place.exe:na]
        at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:111) ~[na:na]
        at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1531) ~[na:na]
        at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1358) ~[place.exe:3.0.0]
        at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1341) ~[place.exe:3.0.0]
        at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:1059) ~[place.exe:3.0.0]
        at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:398) ~[place.exe:3.0.0]
        at com.oldshensheep.place.config.AvailableService.isRedisAvailable(AvailableService.java:18) ~[place.exe:na]
        at com.oldshensheep.place.service.RateLimiterService.<init>(RateLimiterService.java:24) ~[place.exe:na]
        at com.oldshensheep.place.service.RateLimiterService__BeanDefinitions.lambda$getRateLimiterServiceInstanceSupplier$0(RateLimiterService__BeanDefinitions.java:19) ~[na:na]
        at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:68) ~[place.exe:6.0.2]
        at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:54) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.lambda$get$2(BeanInstanceSupplier.java:208) ~[na:na]
        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) ~[place.exe:6.0.2]
        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) ~[place.exe:6.0.2]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.invokeBeanSupplier(BeanInstanceSupplier.java:216) ~[na:na]
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:208) ~[na:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1225) ~[place.exe:6.0.2]
        ... 48 common frames omitted

@oldshensheep
Copy link
Author

To summarize the current state.
Now my application works fine on Linux, but on Windows it starts with Caused by: java.lang.UnsatisfiedLinkError: jdk.jfr.internal.JVM.isExcluded error. If I set system properties io.lettuce.core.jfr to false, the program works fine.

@oldshensheep
Copy link
Author

Note: JFR event recording is not yet supported on GraalVM JDK for Windows.

https://www.graalvm.org/22.3/reference-manual/native-image/guides/build-and-run-native-executable-with-jfr/

So all the problems are solved.

But there is one last problem, I need to figure out why compiling on my Windows computer will give me Fatal error: com.oracle.svm.core.util.VMError$HostedError: should not reach here(It doesn't affect the result).
However, Windows on Github Action compiles normally.

@oeresundsgruppen
Copy link

have this also, no spring involved. It does generate exe on windows, but compiler exits with 'should not reach here'...

@oubidar-Abderrahim
Copy link
Member

It's good that the issue is fixed for Linux, if you have a new error, please open another Github ticket for it and we'll take a look into it. Thank you

@oeresundsgruppen
Copy link

same bug in graalvm, pls re-open the ticket

@oldshensheep

This comment was marked as outdated.

@oldshensheep
Copy link
Author

oldshensheep commented May 19, 2023

@oeresundsgruppen @oubidar-Abderrahim
OK... I have found the problem. It is not the issue of GraalVM!
I take a look at graalvm/setup-graalvm source code, and found it using vcvarsall.bat setup env, but I use vcvarsx86_amd64.bat to setup env and that's the problems!

If you have this problem, you need doing this cmd.exe /k "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 instead of this cmd.exe /k "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsx86_amd64.bat"

vcvarsx86_amd64.bat not work!

The native-image builder will only work when it is run from the x64 Native Tools Command Prompt.
https://www.graalvm.org/latest/reference-manual/native-image/#prerequisites

x64 Native Tools Command Prompt is the same as vcvarsall.bat x64
vcvarsx86_amd64.bat is the same as vcvarsall.bat x86_x64 it is the same asx86_x64 Cross Tools Command Prompt for VS 2022

the vcvarsall.bat has this code

if /I "%1"=="x86_amd64" (
    set __VCVARSALL_TARGET_ARCH=x64
    set __VCVARSALL_HOST_ARCH=x86
    set __local_ARG_FOUND=1
)
if /I "%1"=="x64" (
    set __VCVARSALL_TARGET_ARCH=x64
    set __VCVARSALL_HOST_ARCH=x64
    set __local_ARG_FOUND=1
)

THE SOLUTION:
setup msvc use cmd.exe /k "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64

Edit: I found this pull request #5881 Set up build environments for Windows users.
That's good!

@oeresundsgruppen
Copy link

I upgraded to latest vs2022 and the problem went away...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants