使用JBoss,Spring和Maven的Hibernate Envers - 不写审计记录

时间:2013-01-02 16:03:27

标签: java spring hibernate jboss hibernate-envers

我正在尝试与Spring,JBoss和Maven一起完成Hibernate Envers实现。

我有以下内容:

  • spring.version:3.1.0.RELEASE
  • hibernate.version:3.5.0-Final
  • log4j.version:1.2.14
  • jboss-as-7.1.1.Final
  • mysql DB

在pom.xml中我添加了所需的hibernate-envers:

    <dependency>    
        <groupId>org.hibernate</groupId>    
        <artifactId>hibernate-envers</artifactId>    
        <version>${hibernate.version}</version>
    </dependency>

在我的Hibernate持久性类中,我正在导入以下内容

import org.hibernate.envers.Audited;

所以它看起来像

@Entity
@Indexed
@Audited 
@Table(name = "COM_TEST")
public class MyTest extends AbstractReferenceDataObject { ...

我确保有一个带有相关数据库列的COM_TEST_AUD数据库表以及一个REVINFO数据库表。

当我运行我的代码时,它使用现有的hibernate实现来更新COM_TEST中的记录。但是没有任何内容写入COM_TEST_AUD或REVINFO数据库表。

我的persistence.xml中有以下属性

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
        <property name="hibernate.connection.autocommit" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="validate"/>
        <property name="hibernate.show_sql" value="false"/>
        <property name="hibernate.cache.use_second_level_cache" value="true"/>
        <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider"/>
        <property name="hibernate.search.default.directory_provider" value="org.hibernate.search.store.FSDirectoryProvider"/>
        <property name="hibernate.search.default.indexBase" value="./lucene/indexes"/>
        <property name="hibernate.search.default.batch.merge_factor" value="10"/>
        <property name="hibernate.search.default.batch.max_buffered_docs" value="10"/>
    </properties>

我已经尝试过我能想到的一切。我可以看到,当我启动JBoss时,它确实说它是如何需要并罚款COM_TEST_AUD和REVINFO,所以看起来这样有效。

我无法理解为什么它不会写入数据库。没有写入日志文件,我将日志记录设置为:

        <logger category="org.hibernate">
            <level name="DEBUG"/>
        </logger>

我注意到在下面的JBoss模块目录中它使用了hibernate-envers-4.0.1.Final.jar:

jboss-as-7.1.1.Final\modules\org\hibernate\envers\main

我已将项目pom.xml更改为4.0.1.Final而不是3.5.0-Final,但它没有什么区别

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

由于您正在使用Hibernate 3.x,因此需要在persistence.xml中配置相应的EventListener,如Envers文档的Quickstart部分所述:

<property name="hibernate.ejb.event.post-insert"
         value="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-update"
         value="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-delete"
         value="org.hibernate.ejb.event.EJB3PostDeleteEventListener,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" />

注意:您没有说明您通过JPA使用Hibernate,但是由于您提到persistence.xml,您似乎正在使用JPA。如果现在是这种情况,配置会有所不同,正如您在文档中看到的那样。

如果您正在使用Hibernate 4.x,则此配置为not needed