Java Oracle一致性:如何在复制缓存中设置调用超时?

Java Oracle一致性:如何在复制缓存中设置调用超时?,java,oracle,caching,timeout,weblogic,Java,Oracle,Caching,Timeout,Weblogic,我在许多weblogic节点上运行一个复制缓存,这些节点也运行OSB。缓存以服务器作为启动类启动。它有一个非常简单的对象缓存,只需使用布尔属性“available”跟踪对象是否正在使用 在OSB中,我对同一个类进行java调用,该类使用处理器在缓存上调用“invoke”,该处理器将对象标记为不可用,然后运行Thread.sleep(31000)。这是一个占位符,我想稍后添加一些冗长的处理 我希望发生的是,如果invoke()调用花费的时间太长,进程应该超时并返回或抛出异常。所以我一直在尝试配置3

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

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

我希望发生的是,如果invoke()调用花费的时间太长,进程应该超时并返回或抛出异常。所以我一直在尝试配置30000毫秒的请求超时来测试这一点。不幸的是,我不知道如何使这个超时发生

我试过:

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

  • 30000
    添加到缓存配置中的
    元素

  • 30000
    添加到缓存配置中的
    元素

  • 30000
    添加到缓存配置中的
    元素

  • 创建一个tangosol-coherence-override.xml并向
    元素添加一个监护人超时
    ,该元素的“类型”与缓存配置中的服务“名称”匹配

  • 将sleep()调用更改为Thread.sleep(310000),只是为了查看5分钟后是否会出现任何现成的默认值

所有这些都不会导致任何类型的超时,无论我告诉处理器多长时间,处理器都会休眠,然后返回,不会出错

以前有没有人做过类似的事情,可以给我一些建议?非常感谢

谢谢


詹姆斯

好的,我得到了答案,得到了他的一些帮助

基本上,复制缓存不支持超时,结果证明它对我的系统来说不是一个合适的选择

解决办法是:

  • 切换到缓存配置中的
    方案
  • 在scheme中添加一个
    元素,其数字大于1(我选择了10,但这只是您希望支持的并发实例的数量)
  • 在调用invoke()之前,使用包装EntryProcessor并使用setRequestTimeoutMillis()设置超时。(注意,这是我尝试的第一件事,但结果是使用了错误的缓存类型)