2012-04-16 108 views
7

我有一個複製緩存運行在一些也運行OSB的weblogic節點上。緩存以服務器作爲啓動類啓動。它有一個非常簡單的對象緩存,可以簡單地跟蹤它們是否正在使用,或者不使用布爾屬性「available」。Oracle Coherence:如何設置複製緩存中調用調用的超時值?

從OSB我將java標註調用到同一個類,它調用緩存中的「調用」處理器,該處理器將對象標記爲不可用,然後運行Thread.sleep(31000)。這是我稍後要添加的冗長處理的佔位符。

我想要發生的事情是,如果invoke()調用時間過長,進程應該超時並返回或拋出異常。所以我一直試圖配置一個30000毫秒的請求超時來測試這個。不幸的是我無法弄清楚如何讓這個超時發生。

我曾嘗試:

  • 結束語在PriorityProcessor處理器和調用調用之前setRequestTimeout(30000)()

  • 在高速緩存中添加<request-timeout> 30000 </request-timeout>到<replicated-scheme/>元素config

  • 添加<tasktimeout> 30000 </tasktimeout>至<replicated-scheme/> e字元素在高速緩存配置

  • 添加<guardian-timeout> 30000 </guardian-timeout>到<replicated-scheme/>在高速緩存配置

  • 創建Tangosol的相干-Override.xml的並添加監護人超時<init-param>到<service元件>元素「類型」與緩存配置中的服務「名稱」相匹配

  • 將sleep()調用更改爲Thread.sleep(310000),以查看是否有任何即用分鐘。

這些都沒有造成任何超時,處理器只是睡了很長時間我告訴它,然後返回沒有錯誤。

有沒有人做過類似的事情,可以給我一些建議?非常感謝。

感謝

詹姆斯

回答

2

好了,我找到了答案,從Tim Middleton一些幫助。

基本上覆制緩存不支持超時,事實證明,它不是我的系統適當的選擇!

的解決方案是:

  1. 切換到<distributed-cache>在高速緩存配置方案。
  2. 將一個<thread-count>元素添加到數字大於1的方案中(我選擇了10,但只是想要支持許多併發實例)。
  3. 使用PriorityProcessor來包裝EntryProcessor,並在調用invoke()之前用setRequestTimeoutMillis()設置超時。 (注意,這是我嘗試的第一件事,但是結果是錯誤的緩存類型)