2012-04-16 29 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()设置超时。 (注意,这是我尝试的第一件事,但是结果是错误的缓存类型)
相关问题