Frage

ich habe ein Problem bekommen Hibernate Envers in unserer Umgebung zu arbeiten. Wir sind mit Spring 3.x mit LoadTimeWeaving. Unten ist unsere Kontext-Datei:

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

Hier ist unsere 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>

Die Audit-Tabellen sind richtig eingerichtet, aber wenn ein Unternehmen beibehalten wird, gibt es keine in den Audit-Tabellen gespeicherten Datensätze. Es gibt nur zwei Felder, die geprüft werden. Auch, weil wir loadTimeWeaving verwenden, wenn wir Unit-Test ausführen, werden wir haben -javaagent: /Users/TEST/.m2/repository/org/springframework/spring-instrument/3.0.3.RELEASE/spring-instrument- 3.0.3.RELEASE.jar als JVM-Argument so die loadTimeWeaving funktioniert.

Neben Envers, alles andere funktioniert gut.

Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Ich fand heraus, was das Problem war, so dass für alle anderen, die diese erfahren können, hier ist es. Envers arbeitet tatsächlich die ganze Zeit. Was ich war nicht klar war, dass in meiner Unit-Tests, alles in einer einzigen Transaktion gewickelt und dann zurückgerollt. Envers wird erst die erste Transaktion Commits auf die Audit-Tabelle begehen und abgeschlossen ist.

Das Update wurde der Test nach oben als Integrationstest ohne Rollback zu setzen. Dann begann meine Audit-Aufzeichnungen zeigt sich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top