2010-08-12 9 views
0

У меня проблема с Hibernate Envers для работы в нашей среде. Мы используем Spring 3.x с LoadTimeWeaving. Ниже наш контекст файл:Spring 3.x и Hibernate Envers

<context:annotation-config/> 
<context:spring-configured/> 
<context:load-time-weaver aspectj-weaving="autodetect"/> 
<context:component-scan base-package="com.viridityenergy.vpower"/> 
<context:property-placeholder location="classpath:db/database-test.properties"/> 
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/> 
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

<bean id="dataSourcePooled" 
    class="com.mchange.v2.c3p0.ComboPooledDataSource" 
    destroy-method="close" 
    p:jdbcUrl="${database.url}" 
    p:user="${database.username}" 
    p:password="${database.password}" 
    p:initialPoolSize="1" 
    p:maxPoolSize="5" 
    p:idleConnectionTestPeriod="500" 
    p:acquireIncrement="1" 
    p:maxStatements="50" 
    p:numHelperThreads="1" 
    p:autoCommitOnClose="true"/> 

<bean id="jpaAdapter" 
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
    p:databasePlatform="${database.platform}" 
    p:showSql="${database.showSql}" 
    p:generateDdl="${database.generateDdl}"/> 

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    p:persistenceUnitName="TEST" 
    p:persistenceXmlLocation="META-INF/persistence.xml" 
    p:dataSource-ref="dataSourcePooled" 
    p:jpaVendorAdapter-ref="jpaAdapter"> 

    <property name="loadTimeWeaver"> 
    <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/> 
    </property> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.jpa.JpaTransactionManager" 
    p:entityManagerFactory-ref="entityManagerFactory" 
    p:dataSource-ref="dataSourcePooled"/> 

<tx:annotation-driven transaction-manager="transactionManager"/> 

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/> 
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

Вот наш persistence.xml

<persistence-unit name="TEST" transaction-type="RESOURCE_LOCAL"> 

    <provider>org.hibernate.ejb.HibernatePersistence</provider> 

    <properties> 
    <property name="hibernate.ejb.event.post-insert" 
      value="org.hibernate.envers.event.AuditEventListener"/> 

    <property name="hibernate.ejb.event.post-update" 
      value="org.hibernate.envers.event.AuditEventListener"/> 

    <property name="hibernate.ejb.event.post-delete" 
      value="org.hibernate.envers.event.AuditEventListener"/> 

    <property name="hibernate.ejb.event.pre-collection-update" 
      value="org.hibernate.envers.event.AuditEventListener"/> 

    <property name="hibernate.ejb.event.pre-collection-remove" 
      value="org.hibernate.envers.event.AuditEventListener"/> 

    <property name="hibernate.ejb.event.post-collection-recreate" 
      value="org.hibernate.envers.event.AuditEventListener"/> 

    </properties> 
</persistence-unit> 

Таблица аудита настроен правильно, но когда объект сохраняются нет записей, хранящихся в таблицах аудита. Проверяется только два поля. Кроме того, поскольку мы используем loadTimeWeaving, когда мы запускаем модульный тест, мы должны иметь -javaagent: /Users/TEST/.m2/repository/org/springframework/spring-instrument/3.0.3.RELEASE/spring-instrument- 3.0.3.RELEASE.jar как аргумент JVM, так что loadTimeWeaving работает.

Помимо Envers, все остальное отлично работает.

Любая помощь будет высоко оценена.

ответ

5

Я выяснил, в чем проблема, поэтому для всех, кто может испытывать это, вот оно. Энверс фактически работал все время. То, чего я не понимал, было то, что в моих модульных тестах все было завернуто в одну транзакцию, а затем откат. Envers не будет фиксировать таблицу аудита до тех пор, пока начальная транзакция не завершится и не завершится.

Исправлено: установить тест в качестве интеграционного теста без отката. Затем мои записи аудита начали появляться.

Смежные вопросы