Мое приложение использует envers для записи данных в таблицы _aud, а также для их переноса в xml, который записывается в другую таблицу. Я делаю это в Envers 4.3 с условным аудитом. Мой класс расширяет EnversIntegratorHibernate Envers 4.3 переход к 5.0 - аудит условных изменений
@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));
}
}
В Envers 5,0 AuditConfiguration было удалено (https://github.com/hibernate/hibernate-orm/blob/5.0/migration-guide.adoc) в предпочтении нового org.hibernate.envers.boot.internal.EnversService
так что я изменить мой код, внедрение новой Integrator интерфейс
@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));
}
}
этот код не работает, потому что EnversService не инициализирован, давая мне
java.lang.IllegalStateException: Служба еще не инициализирован в org.hibernate.envers.boot.internal.EnversServiceImpl.getEntitiesConfigurations (EnversServiceImpl.java:253)
Я попытался восстановить EnversService как Я сделал со старой версией AuditConfiguration без каких-либо результатов. Я читал официальное руководство (http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html), и я не нашел ничего, что могло бы мне помочь.
Что я могу сделать, чтобы получить экземпляр EnversService, который можно использовать для моих пользовательских слушателей?
Спасибо, Эндрю