2012-11-29 121 views
1

我正在使用JPA和Hibernate,運行在JBOSS 5.1內部。休眠緩存問題?

我得到一個奇怪的行爲,因爲當我通過事務內部的EntityManager寫入一些數據時,我提交了這個事務,並且在我開始一個新的事務讀取這個寫入的數據後立即返回新的數據查詢(但舊的),但我看到數據庫中提交的新數據(我通過另一個進程看到它)。

我可以根據需要多次重複此讀取操作(在同一事務中的調試模式下),新數據將不會返回。

然後,如果我做了一個entityManager.clear(),下一次讀取(在同一個事務中)最終返回數據。

有趣的部分從這裏開始:在另一臺機器上安裝相同的JBoss(物理副本,librarys,配置,所有內容),指向完全相同的物理數據庫FINE(無需清除EM即可獲取數據) 。所以它必須是與環境有關的東西...

任何想法?

回答

0

在兩臺服務器上檢查JBoss/server/default/deployers/ejb3.deployer/META-INF/persistence.properties

不幸的是,默認情況下它只包含hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider,這不是事務性的,應該用org.hibernate.cache.jbc2.JBossCacheRegionFactoryorg.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory來代替。

https://community.jboss.org/wiki/ClusteredJPAHibernateSecondLevelCachinginJBossAS5

http://www.mastertheboss.com/hibernate-cache/using-hibernate-second-level-cache-with-jboss-as-5-6-7

+0

謝見!那麼,兩臺服務器都是完全相同的,這些文件是相同的......唯一改變的是物理機器和JVM ... – edutesoy

+0

不同的網絡延遲可能是什麼? – Vadzim

+0

不太可能,我可以在調試模式下保持事務幾分鐘,並通過EM拋出查詢,它總是返回舊數據,直到我「清除」EM,然後查詢返回更新的數據......整個JBoss是一個工作正常的克隆,都訪問相同的物理數據庫...怪異... – edutesoy