2009-08-18 34 views
2

在我看來,JBoss重複使用實體管理器和底層hibernate會話來處理多個請求。我已經運行了一個測試,證明在某些情況下,即使僅使用em.find()獲取實體的狀態,實體的狀態也可能已過時。如何強制JBoss 4.2.3爲每個請求清除hibernate的會話緩存?

如何禁用此行爲並強制清除或丟棄使用的會話以確保每個請求都使用清除緩存進行處理?

UPD:

下面是一個例子的情況。

HTTP請求1.一種會話bean創建實體實例,並使用字段存儲爲「A」設定爲值1。持久實體獲取ID = 4。

HTTP請求2.會話bean查找一個ID = 4的實體將其字段「A」設置爲值2並保存。

HTTP請求3.會話bean查找ID = 4的實體並檢查它的字段「A」。如果值是1,它會做一件事,如果它是2,它會做另一件事。

如果請求3中的EM碰巧與請求1中的EM相同,則會發生不希望的行爲。我測試了這一點,並得到了約。 10%的失敗案例。

+0

嗯......你爲什麼想要? – cletus 2009-08-18 12:17:58

+0

我用一個例子解釋了爲什麼 – artemb 2009-08-18 13:15:39

+1

Artem,看起來你正在使用一個擴展的持久化上下文(它綁定到會話bean的生命週期,因此會有你所描述的行爲),但你希望事務範圍的一個相反:http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/architecture.html#architecture-ejb-persistctxscope。 – ChssPly76 2009-08-18 15:23:02

回答

0

好的,我明白了這一點。 JBoss正確地處理會話,在我的測試中有一個錯誤=)對不起,還有thanx的幫助

0

你嘗試evicting對象Session

+0

你會如何以及何時(何處)實現我在問題中提到的目標? – artemb 2009-08-18 13:18:45

相關問題