Question

Je vais avoir un problème se Hibernate Envers travailler dans notre environnement. Nous utilisons 3.x Spring avec LoadTimeWeaving. Ci-dessous notre fichier de contexte:

<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"/>

Voici notre 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>

Les tableaux de vérification sont configurés correctement, mais quand une entité est conservée, il n'y a pas de documents conservés dans les tableaux de vérification. Il n'y a que deux champs qui sont vérifiés. De plus, parce que nous utilisons loadTimeWeaving, lorsque nous courons test unitaire, nous sommes tenus d'avoir -javaagent: /Users/TEST/.m2/repository/org/springframework/spring-instrument/3.0.3.RELEASE/spring-instrument- 3.0.3.RELEASE.jar comme argument JVM de sorte que les travaux de loadTimeWeaving.

En dehors de Envers, tout le reste fonctionne bien.

Toute aide serait très appréciée.

Était-ce utile?

La solution

J'ai découvert quel était le problème, donc pour quelqu'un d'autre qui peut rencontrer ce, voilà. Envers travaillait en fait tout le long. Ce que je ne savais pas était que dans mes tests unitaires, tout était enveloppé dans une seule transaction, puis annulée. Envers ne commettront pas à la table de vérification jusqu'à ce que les commits de transaction initiale et est terminée.

Le correctif a été de mettre le test comme un test d'intégration sans retour en arrière. Alors mes dossiers d'audit ont commencé à apparaître.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top