2013-01-02 56 views
0

我試圖做一個Hibernate Envers實現與Spring,JBoss和Maven的結合。Hibernate Envers與JBoss,Spring和Maven - 不寫審計記錄

我有以下幾點:

  • spring.version:3.1.0.RELEASE
  • hibernate.version:3.5.0決賽
  • log4j.version:1.2.14
  • 的JBoss -as-7.1.1.Final
  • MySQL數據庫

在pom.xml我已經添加了必需的hiber內特 - 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 db表與相關的數據庫列以及一個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模塊目錄下,它使用休眠,envers-4.0.1.Final.jar:

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

我已經改變了我的項目的pom.xml是不是3.5.0決賽4.0.1.Final,但它並沒有區別

是否有人可以幫忙嗎?

+0

首先要檢查的是事務設置。你使用什麼樣的交易? Envers聽衆是否在所有人都打電話時堅持一個實體? – adamw

回答

1

既然你在使用Hibernate 3.x中,你需要配置persistence.xml適當的事件偵聽器,如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

相關問題