(https://drive.google.com/file/d/1VhiNjbatpojBah1XOaYRBN8NKWDMkzpw/view?usp=sharing)
Have been hitting this issue regularly with SpringBoot 3.4.x
Above is complete yet minimal sample that reproduces the problem. 2 sets of command produce similar but not identical errors.
Below are the commands to recreate it with Gradle 7.6.4 and Graal Java(TM) SE Runtime Environment Oracle GraalVM 17.0.11+7.1
1. gradle build -x test :microservices:review-service:nativeCompile -Pprofile=instrumented && docker compose -f docker-compose-app-native-instrumented.yml build && docker compose -f docker-compose-app-native-instrumented.yml up
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory': null
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1812)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339)
native-query-error3-review-1 | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:346)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
native-query-error3-review-1 | at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:970)
native-query-error3-review-1 | at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627)
native-query-error3-review-1 | at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66)
native-query-error3-review-1 | at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
native-query-error3-review-1 | at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
native-query-error3-review-1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
native-query-error3-review-1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361)
native-query-error3-review-1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350)
native-query-error3-review-1 | at com.stillwaters.playground.microservices.core.review.ReviewServiceApplication.main(ReviewServiceApplication.java:45)
native-query-error3-review-1 | Caused by: java.lang.ExceptionInInitializerError
native-query-error3-review-1 | at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:54)
native-query-error3-review-1 | at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390)
native-query-error3-review-1 | at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:419)
native-query-error3-review-1 | at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:400)
native-query-error3-review-1 | at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1859)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1808)
native-query-error3-review-1 | ... 15 more
native-query-error3-review-1 | Caused by: java.lang.IllegalArgumentException: Invalid logger interface org.hibernate.internal.EntityManagerMessageLogger (implementation not found)
native-query-error3-review-1 | at org.jboss.logging.Logger.doGetMessageLogger(Logger.java:2630)
native-query-error3-review-1 | at org.jboss.logging.Logger.getMessageLogger(Logger.java:2570)
native-query-error3-review-1 | at org.jboss.logging.Logger.getMessageLogger(Logger.java:2552)
native-query-error3-review-1 | at org.hibernate.internal.HEMLogging.messageLogger(HEMLogging.java:28)
native-query-error3-review-1 | at org.hibernate.internal.HEMLogging.messageLogger(HEMLogging.java:24)
native-query-error3-review-1 | at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<clinit>(EntityManagerFactoryBuilderImpl.java:144)
native-query-error3-review-1 | ... 22 more
native-query-error3-review-1 exited with code 1
2. gradle build -x test :microservices:review-service:bootBuildImage && docker compose -f docker-compose-app-native.yml up
Application run failed
native-query-error3-review-1 | org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory': null
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1812)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339)
native-query-error3-review-1 | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:346)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
native-query-error3-review-1 | at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:970)
native-query-error3-review-1 | at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627)
native-query-error3-review-1 | at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66)
native-query-error3-review-1 | at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
native-query-error3-review-1 | at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
native-query-error3-review-1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
native-query-error3-review-1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361)
native-query-error3-review-1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350)
native-query-error3-review-1 | at com.stillwaters.playground.microservices.core.review.ReviewServiceApplication.main(ReviewServiceApplication.java:45)
native-query-error3-review-1 | Caused by: java.lang.ExceptionInInitializerError
native-query-error3-review-1 | at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:157)
native-query-error3-review-1 | at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:81)
native-query-error3-review-1 | at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130)
native-query-error3-review-1 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
native-query-error3-review-1 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238)
native-query-error3-review-1 | at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215)
native-query-error3-review-1 | at org.hibernate.boot.model.relational.Database.<init>(Database.java:45)
native-query-error3-review-1 | at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:226)
native-query-error3-review-1 | at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:194)
native-query-error3-review-1 | at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171)
native-query-error3-review-1 | at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1442)
native-query-error3-review-1 | at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1513)
native-query-error3-review-1 | at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66)
native-query-error3-review-1 | at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390)
native-query-error3-review-1 | at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:419)
native-query-error3-review-1 | at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:400)
native-query-error3-review-1 | at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1859)
native-query-error3-review-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1808)
native-query-error3-review-1 | ... 15 more
native-query-error3-review-1 | Caused by: java.lang.IllegalArgumentException: Invalid logger interface org.hibernate.internal.log.ConnectionInfoLogger (implementation not found)
native-query-error3-review-1 | at org.jboss.logging.Logger.doGetMessageLogger(Logger.java:2630)
native-query-error3-review-1 | at org.jboss.logging.Logger.getMessageLogger(Logger.java:2570)
native-query-error3-review-1 | at org.jboss.logging.Logger.getMessageLogger(Logger.java:2552)
native-query-error3-review-1 | at org.hibernate.internal.log.ConnectionInfoLogger.<clinit>(ConnectionInfoLogger.java:38)
native-query-error3-review-1 | ... 34 more
native-query-error3-review-1 exited with code 1
Any help will be greatly appreciated.
Comment From: wilkinsona
Please take the previously recommended steps:
To investigate your problem, I would start by using an up-to-date version of the org.graalvm.buildtools.native. If that doesn't help and you require further assistance, please ask a question on Stack Overflow that provides a truly minimal way to reproduce the problem.
Comment From: klopfdreh
Even if the ticket is closed I was facing the same issue using Spring Boot 3.5.5
We are using the following native-maven-plugin
version: 0.11.0
:
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>0.11.0</version>
<executions>
<execution>
<id>add-reachability-metadata</id>
<goals>
<goal>add-reachability-metadata</goal>
</goals>
</execution>
</executions>
<configuration>
<classesDirectory>${project.build.outputDirectory}</classesDirectory>
<metadataRepository>
<enabled>true</enabled>
</metadataRepository>
<requiredVersion>22.3</requiredVersion>
</configuration>
</plugin>
I was able to fix the issue by manually adding the classes of the package org/hibernate/internal
and the classes of subpackages using the following code.
/**
* Generates hints for the backend application.
*/
@Configuration
@ImportRuntimeHints(de.axa.lok.backend.aot.BackendRuntimeHints.class)
@Slf4j
public class BackendRuntimeHints implements RuntimeHintsRegistrar {
@Override
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
Arrays.stream(System.getProperty("java.class.path").split(File.pathSeparator)).forEach(classpathEntry -> {
// If the classpathEntry is no jar skip it
if (!classpathEntry.endsWith(".jar")) {
return;
}
try (JarInputStream is = new JarInputStream(Files.newInputStream(Path.of(classpathEntry)))) {
JarEntry entry = is.getNextJarEntry();
while (entry != null) {
String entryName = entry.getName();
if (entryName.endsWith(".class")
&& !entryName.contains("package-info")
&& entryName.startsWith("org/hibernate/internal")
) {
String githubApiClassName = entryName.replace("/", ".");
String githubApiClassNameWithoutClass = githubApiClassName.substring(0, githubApiClassName.length() - 6);
log.info("Registered class {} for reflections and serialization.", githubApiClassNameWithoutClass);
hints.reflection().registerType(TypeReference.of(githubApiClassNameWithoutClass), MemberCategory.values());
hints.serialization().registerType(TypeReference.of(githubApiClassNameWithoutClass));
}
entry = is.getNextJarEntry();
}
} catch (IOException e) {
log.warn("Error while reading jars", e);
}
});
}
}
The weird thing is that in some other applications we don't have any problems with hibernate and native-images, because the metadata of https://github.com/oracle/graalvm-reachability-metadata/tree/master/metadata/org.hibernate/hibernate-core
are used and the related reflection and resource information are added.
In our backend however we are using flyway and defining custom entites, there the metadata is not used somehow, but I can't nail down where the issue comes from.