Hello im trying to run Hibernate envers on my wildfly server, project can be built with mvn clean install and tests for it runs fine but when i want to deploy it to the server i receive error, i also find out that error occurs as soon as i add solo dependency to pom.xml for hibernate envers :
09:34:51,107 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 84) MSC000001: Failed to start service jboss.persistenceunit."lap-internal-ear-0.4.0-SNAPSHOT.ear/ibbw.lap-uebergreifende-lap-uebergreifende-parent-0.4.0-SNAPSHOT.jar#LapDBEntityManager2": org.jboss.msc.service.StartException in service jboss.persistenceunit."lap-internal-ear-0.4.0-SNAPSHOT.ear/ibbw.lap-uebergreifende-lap-uebergreifende-parent-0.4.0-SNAPSHOT.jar#LapDBEntityManager2": java.lang.UnsupportedOperationException: EnversService#initialize should be called only once
at [email protected]//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:187)
at [email protected]//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:117)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at [email protected]//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:664)
at [email protected]//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:202)
at [email protected]//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at java.base/java.lang.Thread.run(Thread.java:840)
at [email protected]//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: java.lang.UnsupportedOperationException: EnversService#initialize should be called only once
at [email protected]//org.hibernate.envers.boot.internal.EnversServiceImpl.initialize(EnversServiceImpl.java:92)
at [email protected]//org.hibernate.envers.boot.internal.AdditionalJaxbMappingProducerImpl.produceAdditionalMappings(AdditionalJaxbMappingProducerImpl.java:92)
at [email protected]//org.hibernate.boot.model.process.spi.MetadataBuildingProcess.processAdditionalJaxbMappingProducer(MetadataBuildingProcess.java:548)
at [email protected]//org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:340)
at [email protected]//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1432)
at [email protected]//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1503)
at [email protected]//org.jboss.as.jpa.hibernate.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:32)
at [email protected]//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:159)
... 10 more
persistance.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_1.xsd"
version="3.1">
<persistence-unit name="LapDBEntityManager2" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:/PostgresLapDS</jta-data-source>
<class>entity.person.PersonEntity</class>
<properties>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.enable_lazy_load_no_trans" value="true"/>
<property name="hibernate.envers.autoRegisterListeners" value="true"/>
<property name="hibernate.envers.audit_table_prefix" value=""/>
<property name="hibernate.envers.audit_table_suffix" value="_aud"/>
</properties>
</persistence-unit>
</persistence>
Classes for envers:
@Entity
@Table(name = "rev_info")
@RevisionEntity(LapRevisionListener.class)
public class AuditEnversInfo extends DefaultRevisionEntity {
@Column(name = "modifier_user")
private String modifierUser;
public String getModifierUser() {
return modifierUser;
}
public void setModifierUser(String modifierUser) {
this.modifierUser = modifierUser;
}
}
public class LapRevisionListener implements RevisionListener {
@Override
public void newRevision(Object revisionEntity) {
AuditEnversInfo auditEnversInfo = (AuditEnversInfo) revisionEntity;
auditEnversInfo.setModifierUser(getUsername());
}
//TODO: get there name of person that is logged in
private String getUsername() {
return "modifierUser1";
}
}