Skip to content

Add native support for Envers #2662

Open
@ch4mpy

Description

@ch4mpy

As requested by @snicoll , I'm moving this issue here.

It would be great to have a complete working sample with an @Audited @Entity associated with a RevisionRepository in an application with @EnableEnversRepositories, and having instruction to build a native image (that successfully runs).

I created a minimal spring-boot 3 application (using latest SNAPSHOT) with

  • spring-boot-starter-data-jpa
  • spring-data-envers
  • h2
  • an @Audited @Entity
  • a RevisionRepository
  • a simple @RestController

Native image was build on windows with Graalvm 22.2.0 and x64 native build tools command prompt with mvnw -Pnative build

This app runs fine in the JVM, but native image won't start with

2022-10-11T08:59:15.327-10:00  INFO 26704 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication using Java 17.0.4 on bravo-ch4mp with PID 26704 (D:\workspaces\libs\spring-addons\spring-data-jpa_gh-2662\target\demo.exe started by ch4mp in D:\workspaces\libs\spring-addons\spring-data-jpa_gh-2662)
2022-10-11T08:59:15.327-10:00  INFO 26704 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
2022-10-11T08:59:15.420-10:00  INFO 26704 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (https)
2022-10-11T08:59:15.420-10:00  INFO 26704 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-10-11T08:59:15.420-10:00  INFO 26704 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.0.23]
2022-10-11T08:59:15.436-10:00  INFO 26704 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-10-11T08:59:15.436-10:00  INFO 26704 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 109 ms
2022-10-11T08:59:15.452-10:00  INFO 26704 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2022-10-11T08:59:15.452-10:00  INFO 26704 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.1.4.Final
2022-10-11T08:59:15.452-10:00  WARN 26704 --- [           main] org.hibernate.orm.deprecation            : HHH90000021: Encountered deprecated setting [javax.persistence.sharedCache.mode], use [jakarta.persistence.sharedCache.mode] instead
2022-10-11T08:59:15.467-10:00  INFO 26704 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-10-11T08:59:15.467-10:00  INFO 26704 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:sample user=SA
2022-10-11T08:59:15.467-10:00  INFO 26704 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2022-10-11T08:59:15.467-10:00  INFO 26704 --- [           main] SQL dialect                              : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2022-10-11T08:59:15.467-10:00  INFO 26704 --- [           main] o.h.e.boot.internal.EnversServiceImpl    : Envers integration enabled? : true
2022-10-11T08:59:15.467-10:00 ERROR 26704 --- [           main] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Default-resolver threw exception
2022-10-11T08:59:15.467-10:00  WARN 26704 --- [           main] w.s.c.ServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory': Default-resolver threw exception
2022-10-11T08:59:15.467-10:00  INFO 26704 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2022-10-11T08:59:15.467-10:00  INFO 26704 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2022-10-11T08:59:15.467-10:00  INFO 26704 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2022-10-11T08:59:15.467-10:00 ERROR 26704 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory': Default-resolver threw exception
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1753) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1131) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:906) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[demo.exe:3.0.0-SNAPSHOT]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:742) ~[demo.exe:3.0.0-SNAPSHOT]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:433) ~[demo.exe:3.0.0-SNAPSHOT]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) ~[demo.exe:3.0.0-SNAPSHOT]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1314) ~[demo.exe:3.0.0-SNAPSHOT]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[demo.exe:3.0.0-SNAPSHOT]
        at com.example.demo.DemoApplication.main(DemoApplication.java:17) ~[demo.exe:na]
Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Default-resolver threw exception
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:224) ~[na:na]
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:181) ~[na:na]
        at org.hibernate.envers.configuration.Configuration.resolveModifiedColumnNamingStrategy(Configuration.java:393) ~[demo.exe:6.1.4.Final]
        at org.hibernate.envers.configuration.Configuration.<init>(Configuration.java:114) ~[demo.exe:6.1.4.Final]
        at org.hibernate.envers.boot.internal.EnversServiceImpl.initialize(EnversServiceImpl.java:104) ~[na:na]
        at org.hibernate.envers.boot.internal.AdditionalJaxbMappingProducerImpl.produceAdditionalMappings(AdditionalJaxbMappingProducerImpl.java:92) ~[demo.exe:6.1.4.Final]
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:329) ~[na:na]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1350) ~[demo.exe:6.1.4.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1421) ~[demo.exe:6.1.4.Final]
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) ~[na:na]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1799) ~[demo.exe:6.0.0-SNAPSHOT]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1749) ~[demo.exe:6.0.0-SNAPSHOT]
        ... 16 common frames omitted
Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Could not instantiate named strategy class [org.hibernate.envers.boot.internal.LegacyModifiedColumnNamingStrategy]
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:245) ~[na:na]
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:181) ~[na:na]
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:168) ~[na:na]
        at org.hibernate.envers.configuration.Configuration.lambda$resolveModifiedColumnNamingStrategy$0(Configuration.java:396) ~[demo.exe:6.1.4.Final]
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:221) ~[na:na]
        ... 31 common frames omitted
Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Could not instantiate named strategy class [org.hibernate.envers.boot.internal.LegacyModifiedColumnNamingStrategy]
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.lambda$static$0(StrategySelectorImpl.java:42) ~[na:na]
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:241) ~[na:na]
        ... 35 common frames omitted
Caused by: java.lang.InstantiationException: org.hibernate.envers.boot.internal.LegacyModifiedColumnNamingStrategy
        at java.lang.Class.newInstance(DynamicHub.java:639) ~[demo.exe:na]
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.lambda$static$0(StrategySelectorImpl.java:38) ~[na:na]
        ... 36 common frames omitted
Caused by: java.lang.NoSuchMethodException: org.hibernate.envers.boot.internal.LegacyModifiedColumnNamingStrategy.<init>()
        at java.lang.Class.getConstructor0(DynamicHub.java:3585) ~[demo.exe:na]
        at java.lang.Class.newInstance(DynamicHub.java:626) ~[demo.exe:na]
        ... 37 common frames omitted

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: blockedAn issue that's blocked on an external project changetype: enhancementA general enhancement

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions