Oracle Coherence:如何在复制缓存中的调用调用上设置超时?

时间:2012-04-16 02:01:07

标签: java oracle caching timeout weblogic

我在一些运行OSB的weblogic节点上运行了一个复制缓存。缓存以服务器作为启动类启动。它有一个非常简单的对象缓存,可以使用布尔属性“available”来跟踪它们是否正在使用。

从OSB我将java调用发送到同一个类,它在缓存上使用将对象标记为不可用的处理器调用“invoke”,然后运行Thread.sleep(31000)。这是我想稍后添加的一些冗长处理的占位符。

我想要发生的是,如果invoke()调用花费的时间太长,则进程应该超时并返回或抛出异常。所以我一直在尝试配置一个30000毫秒的请求超时来测试它。不幸的是,我无法弄清楚如何使超时发生。

我试过了:

  • 将处理器包装在PriorityProcessor中并在调用()之前调用setRequestTimeout(30000)

  • 添加<request-timeout&gt; 30000 </request-timeout&gt;到<replicated-scheme/&gt;缓存配置中的元素

  • 添加<tasktimeout&gt; 30000 </tasktimeout&gt;到<replicated-scheme/&gt;缓存配置中的元素

  • 添加<guardian-timeout&gt; 30000 </guardian-timeout&gt;到<replicated-scheme/&gt;缓存配置中的元素

  • 创建tangosol-coherence-override.xml并添加一个监护人超时<init-param&gt;到<service&gt;元素谁的“类型”匹配缓存配置中的服务“名称”

  • 更改sleep()调用Thread.sleep(310000)只是为了看看是否有任何开箱即用的默认值会在5分钟后启动。

这些都没有导致任何类型的超时,处理器只是睡了很久我告诉它然后返回没有错误。

以前是否有人做过类似的事情并且可以给我一些建议?非常感谢。

由于

詹姆斯

1 个答案:

答案 0 :(得分:2)

好的,所以我在Tim Middleton的帮助下得到了答案。

基本上复制的缓存不支持超时,但事实证明它不适合我的系统!

解决方案是:

  1. 切换到<distributed-cache&gt;缓存配置中的方案。
  2. 添加<thread-count&gt;方案的元素与数字&gt; 1(我选择了10但是你想要支持多个并发实例)。
  3. 在调用invoke()之前,使用PriorityProcessor包装EntryProcessor并使用setRequestTimeoutMillis()设置超时。 (注意这是我尝试过的第一件事,但结果显示错误的缓存类型)