Mon application utilise versa pour écrire des données dans les tables _aud et également pour les placer dans un xml qui est écrit dans une autre table. Je le fais dans Envers 4.3 avec un audit conditionnel. Ma classe étend EnversIntegratorMigration d'Hibernate Envers 4.3 vers 5.0 - audit d'envers conditionnel
@Override
public void integrate(Configuration configuration,SessionFactoryImplementor sessionFactory,SessionFactoryServiceRegistry serviceRegistry)
{
EventListenerRegistry listenerRegistry = serviceRegistry.getService(EventListenerRegistry.class);
listenerRegistry.addDuplicationStrategy(EnversListenerDuplicationStrategy.INSTANCE);
final AuditConfiguration enversConfiguration = AuditConfiguration.getFor(configuration, serviceRegistry.getService(ClassLoaderService.class));
if (enversConfiguration.getEntCfg().hasAuditedEntities())
{
listenerRegistry.appendListeners(EventType.POST_UPDATE, new PostUpdateListenerLog(enversConfiguration));
listenerRegistry.appendListeners(EventType.POST_INSERT, new PostInsertListenerLog(enversConfiguration));
listenerRegistry.appendListeners(EventType.POST_DELETE, new PostDeleteListenerLog(enversConfiguration));
}
}
Dans AuditConfiguration 5.0 Envers a été retiré (https://github.com/hibernate/hibernate-orm/blob/5.0/migration-guide.adoc) de préférence pour les nouvelles org.hibernate.envers.boot.internal.EnversService
si je change mon code, la mise en œuvre du nouveau intégrateur Interface
@Override
public void integrate(Metadata mtdt, SessionFactoryImplementor sfi, SessionFactoryServiceRegistry serviceRegistry) {
EventListenerRegistry listenerRegistry = serviceRegistry.getService(EventListenerRegistry.class);
listenerRegistry.addDuplicationStrategy(EnversListenerDuplicationStrategy.INSTANCE);
EnversService enversService = new EnversServiceImpl();
if(enversService.getEntitiesConfigurations().hasAuditedEntities()) {
listenerRegistry.appendListeners(EventType.POST_UPDATE, new PostUpdateListenerLog(enversService));
listenerRegistry.appendListeners(EventType.POST_INSERT, new PostInsertListenerLog(enversService));
listenerRegistry.appendListeners(EventType.POST_DELETE, new PostDeleteListenerLog(enversService));
}
}
ce code ne fonctionne pas parce que le EnversService n'est pas initialisé, me donnant un
java.lang.IllegalStateException: Le service n'a pas encore été initialisé à org.hibernate.envers.boot.internal.EnversServiceImpl.getEntitiesConfigurations (EnversServiceImpl.java:253)
j'ai essayé de récupérer le EnversService comme Je l'ai fait avec l'ancienne AuditConfiguration sans aucun résultat. J'ai lu le guide officiel (http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html) et je n'ai rien trouvé qui puisse m'aider.
Que puis-je faire pour récupérer une instance EnversService utilisable pour mes écouteurs personnalisés?
Merci, Andrew