我在Oracle數據庫(10g及更高版本的11g)上的Weblogic App-Server(10.3.3)上運行應用程序,看起來應用程序的內存管理不正確,因爲它運行後而它開始反覆拋出「超出gc開銷限制」的例外。如何在Oracle Weblogic應用程序服務器中懶獲取LOB?
我使用jvisualvm對我的服務器進行了剖析,看起來大部分堆由字節數組組成,而且這些字節數組與我的一個主要實體相關聯,作爲其'數據'成員(DB中的BLOB)。
我試圖改變這種實體是這樣的:
@Basic(fetch=LAZY)
@LOB
public byte[] getData() { return this.data; }
但後來我總是空。
無論如何懶得取我的LOB?
更新
我使用它自帶的Weblogic應用服務器的默認提供。我沒有碰到服務器上的任何JPA配置。我現在的代碼很簡單(只是一個沙箱),它只是發現我的實體使用em.find()
(根據行ID),然後我只是打電話myEntity.getData()
,它返回null。
您無法發表評論,因爲您使用的帳號與您用於發佈此問題的帳號不同。我已通知國防部。 – dandan78
您使用的是JPA提供程序?當你訪問它時,fetch = LAZY應該會引起一個查詢。在訪問對象之前是否分離/序列化對象? – James
@James:出於某種原因,我無法爲您的答案添加評論,所以我會在這裏回答:我正在使用Weblogic應用程序服務器附帶的默認提供程序。我沒有觸及服務器上的任何JPA配置。我的代碼目前很簡單(有點像沙箱),它只是找到我的實體使用em.find(根據行ID),然後我只是調用myEntity.getData(),它返回null。 – 2011-08-09 15:31:22