0

I am trying to build native image of a spring-boot app using Hibernate (spring-data-jpa entities and repositories).

From what I understood of this sample, it should be just a matter of adding enhance goal from hibernate-enhance-maven-plugin to my maven build.

My app starts when I build non native image but when I build "native" (either executable or docker image), it crashes with:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-08-30 20:41:36.301 ERROR 1 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguraf init method failed; nested exception is org.hibernate.AssertionFailure: Error calling ServiceLoader.Provider.type()
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[na:na]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) ~[na:na]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[na:na]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[na:na]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[com.c4_soft.starter.OrdersEndpointApplication:2.5.4]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[com.c4_soft.starter.OrdersEndpointApplication:2.5.4]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[com.c4_soft.starter.OrdersEndpointApplication:2.5.4]
        at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:143) ~[na:na]
        at com.c4_soft.starter.OrdersEndpointApplication.main(OrdersEndpointApplication.java:28) ~[com.c4_soft.starter.OrdersEndpointApplication:na]
Caused by: org.hibernate.AssertionFailure: Error calling ServiceLoader.Provider.type()
        at org.hibernate.boot.registry.classloading.internal.AggregatedServiceLoader$ClassPathAndModulePathAggregatedServiceLoader.collectServiceIfNotDuplicate(AggregatedServiceLoader.java:272) ~[na:na]
        at org.hibernate.boot.registry.classloading.internal.AggregatedServiceLoader$ClassPathAndModulePathAggregatedServiceLoader.loadAll(AggregatedServiceLoader.java:201) ~[na:na]
        at org.hibernate.boot.registry.classloading.internal.AggregatedServiceLoader$ClassPathAndModulePathAggregatedServiceLoader.getAll(AggregatedServiceLoader.java:187) ~[na:na]
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.loadJavaServices(ClassLoaderServiceImpl.java:251) ~[na:na]
        at org.hibernate.integrator.internal.IntegratorServiceImpl.<init>(IntegratorServiceImpl.java:40) ~[na:na]
        at org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.build(BootstrapServiceRegistryBuilder.java:224) ~[na:na]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.buildBootstrapServiceRegistry(EntityManagerFactoryBuilderImpl.java:452) ~[na:na]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:208) ~[na:na]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:168) ~[na:na]
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:52) ~[na:na]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[com.c4_soft.starter.OrdersEndpointApplication:5.
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[com.c4_soft.starter.OrdersEndpointApplication:5.3.9]
        ... 15 common frames omitted
Caused by: java.lang.NullPointerException: null
        at org.hibernate.boot.registry.classloading.internal.AggregatedServiceLoader$ClassPathAndModulePathAggregatedServiceLoader.collectServiceIfNotDuplicate(AggregatedServiceLoader.java:269) ~[na:na]
        ... 30 common frames omitted

Here is what I added to my pom.xml:

                <plugin>
                    <groupId>org.hibernate.orm.tooling</groupId>
                    <artifactId>hibernate-enhance-maven-plugin</artifactId>
                    <version>${hibernate.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>enhance</goal>
                            </goals>
                            <configuration>
                                <failOnError>true</failOnError>
                                <enableLazyInitialization>true</enableLazyInitialization>
                                <enableDirtyTracking>true</enableDirtyTracking>
                                <enableAssociationManagement>true</enableAssociationManagement>
                                <enableExtendedEnhancement>false</enableExtendedEnhancement>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

What am I missing?

ch4mp
  • 6,622
  • 6
  • 29
  • 49
  • Did you ever find a solution to this? I'm experiencing it too. – Matt Raible Feb 07 '22 at 05:21
  • There is currently [an issue](https://github.com/spring-projects-experimental/spring-native/issues/963) when entities and repos are in a different module than spring-boot app. – ch4mp Feb 07 '22 at 17:56

0 Answers0