2015-02-15 4 views
0

Мне нужно настроить условный аудит с помощью Hibernate Envers и Spring.Hibernate Envers условный аудит, пользовательский EnversIntegrator игнорируется во время выполнения

Конфигурация по умолчанию работает, но я хочу, чтобы проверялись только операции удаления, сохраняя удаленный объект в таблице аудита.

Я следил за all the documentation steps, но когда я пробую приложение с простой базой, которая создает и удаляет сущность, мой CustomEnversIntegrator не вызывается, вместо этого вызывается org.hibernate.envers.event.spi.EnversIntegrator.

Вот моя весна-config.xml:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="org.hibernate.envers.default_schema">macap_auditoria</prop> 
      <prop key="org.hibernate.envers.audit_table_prefix">aud_</prop> 
      <prop key="org.hibernate.envers.audit_table_suffix"></prop> 
      <prop key="org.hibernate.envers.store_data_at_delete">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <prop key="hibernate.listeners.envers.autoRegister">false</prop> 
      <prop key="org.hibernate.envers.cascade_delete_revision">true</prop> 
     </props> 
    </property> 
    ...... 

CustomEnversIntegrator.java, прислушиваясь только к операции удаления:

public class CustomEnversIntegrator extends EnversIntegrator { 

private AuditConfiguration enversConfiguration; 

@Override 
public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { 
    final EventListenerRegistry listenerRegistry = serviceRegistry.getService(EventListenerRegistry.class); 
    listenerRegistry.addDuplicationStrategy(EnversListenerDuplicationStrategy.INSTANCE); 
    enversConfiguration = AuditConfiguration.getFor(configuration, serviceRegistry.getService(ClassLoaderService.class)); 
    if (enversConfiguration.getEntCfg().hasAuditedEntities()) { 
     listenerRegistry.prependListeners(EventType.POST_DELETE, new CustomEnversPostDeleteEventListener(enversConfiguration)); 
    } 
} 

}

И, наконец, Я добавил файл META-INF/services/org.hibernate.spi.Integrator с одной строкой внутри: uy.com.macap.ccd.services.persistence.audit.CustomEnversIntegrator

Ящик, сгенерированный в моей папке .m2, содержит файл META-INF/services/org.hibernate.spi.Integrator внутри , поэтому я не знаю, что еще попробовать, кроме перекомпиляции envers с измененным мной классом EnversIntegrator.

Спасибо.

+0

Какой Hibernate версия ты используешь? Используете ли вы те же версии Envers и Hibernate? Как вы развертываете свое приложение, развертывается ли в банке файл META-INF? – adamw

+0

Я пробовал 4.3.7 и 4.3.8. Да, я использую ту же версию как для Envers, так и для Hibernate. В настоящее время я не развертываю приложение, просто «тестирую» его с помощью некоторого кода в основном классе. Ящик, созданный maven, содержит файл META-INF/services/org.hibernate.spi.Integrator. – kabuche

+0

Как вы тестируете свой основной класс? Вы загружаете полный контекст Spring? –

ответ

2

Я думаю, что проблема это имя, которое файла под META-INF/услуг:

Согласно документации, она должна быть org.hibernate.integrator.spi.Integrator

и не

org.hibernate.spi.Integrator as in your post 
Смежные вопросы