Skip to content
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

Add native support for Envers #2662

Open
ch4mpy opened this issue Oct 11, 2022 · 5 comments
Open

Add native support for Envers #2662

ch4mpy opened this issue Oct 11, 2022 · 5 comments
Labels
status: blocked An issue that's blocked on an external project change type: enhancement A general enhancement

Comments

@ch4mpy
Copy link

ch4mpy commented Oct 11, 2022

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
@christophstrobl
Copy link
Member

@ch4mpy Thanks for creating the issue! I've created oracle/graalvm-reachability-metadata#82 to provide missing metadata for hibernate-envers. Once that's in place we will continue here with the missing bits from data spring-data side.

@mp911de mp911de added status: blocked An issue that's blocked on an external project change type: enhancement A general enhancement and removed status: waiting-for-triage An issue we've not yet triaged labels Oct 17, 2022
@mp911de mp911de changed the title Add native support for spring-data-envers Add native support for Envers Oct 17, 2022
@Map
Copy link

Map commented Dec 12, 2022

@ch4mpy Thanks for creating the issue! I've created oracle/graalvm-reachability-metadata#82 to provide missing metadata for hibernate-envers. Once that's in place we will continue here with the missing bits from data spring-data side.

Hi! Is this issue still in progress? The metadata issue in the graalvm repo seems to be closed and afaik this issue here can be unblocked :)

@joaquimvila
Copy link

Any news regarding this?

@korkutkose
Copy link

korkutkose commented May 8, 2023

Any updates on this? There are services we would like to migrate into spring-native to reduce resource foot prints but almost all of our services are depending on envers. I honestly don't want to reinvent the wheel and implement my own solution for basic auditing needs. A small heads up would be sufficient about the progress, so we can have our own timelines regarding the progress :)
Cheers.

@TimSin
Copy link

TimSin commented Aug 22, 2024

We'd also like our existing services to use native images, but this issue is a blocker for us. Has there been any progress on it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status: blocked An issue that's blocked on an external project change type: enhancement A general enhancement
Projects
None yet
Development

No branches or pull requests

8 participants