2012-11-23 103 views
1

是否可以在某些jboss配置中使用EntityManager禁用緩存?全局禁用jboss中的EntityManager緩存

我會解釋一下。我對我們產品的最終「耳朵」是通過hibernate使用EntityManager(類似這樣,我是一個新手),我需要測試一些行爲。對我來說,簡單的方法是直接在數據庫中更改(移除,創建)實體的狀態。但是當我這樣做後,應用程序在一段時間內仍然會找到舊值。我讀過一些jboss緩存,用於實體管理器。

因此,進行測試,我想禁用的EntityManager緩存,但它不能在應用級被禁用,只有在JBoss級。

簡單:我需要應用總是重新加載實際的實體狀態,因爲它可以在數據庫中進行編輯與前來其它應用。而它不可能禁用應用程序級別的緩存(hibernate.xml等)

PS:JBoss的4.2.3,EJB3,Hibernate3中

回答

1

你指的緩存可能是PersistenceContext。它不能被禁用。你只能調整它的範圍。在Java EE環境中,持久化上下文的範圍是默認情況下的事務。所以,如果你需要一些改變立即生效,你可以提取這些變化(包括獲取有關的實體)到一個單獨的方法和註釋它需要一個新的事務:

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 

一旦方法返回,所有更改都已落實。

你也可以使用bean管理的事務,所以你可以自己控制提交。對於這一點,與@TransactionManagement(TransactionManagementType.BEAN)註釋你的bean,並使用UserTransaction

@Resource 
private UserTransaction tx; 
... 
tx.begin(); 
//do stuff 
tx.commit(); 
+0

它是不是好編輯測試問題的生產代碼,所以我想配置測試準備環境。我需要更改在我將數據庫提交給smth後立即生效。也許它不允許禁用緩存,但應該有一些屬性來調整刷新時間或者像這樣。 – Dmitry