繁体   English   中英

集群环境中的 WAS EJB 调度持久计时器

[英]WAS EJB Schedule persistent timer in clustered environment

我想检查我对如何在 WebSphere Application Server 集群环境中编写计时器的理解,这将在整个集群中触发一次(而不是在部署应用程序的每个集群成员上)。

我的 EJB 代码中有一个调度程序,如下所示:

@Stateless
public class TestTimer {
@Schedule(second="*/10", minute="*", hour="8-23", dayOfWeek="Mon-Fri",
      dayOfMonth="*", month="*", year="*", info="TestTimer", persistent=true)
    public void scheduledTimeout(final Timer t) {
        System.out.println("@Schedule called at: " + new java.util.Date());       
   }
}

尽管我没有在 WebSphere 管理控制台的Resources/Schedulers部分中配置任何东西,但这似乎在单个实例上开箱即用。

那么,如果我没有给它一个要使用的数据源,WebSphere 怎么知道将我的计划保存到哪里呢? 如果这就是我所做的所有配置,是否会在集群中安排它(一旦我移动到集群环境),还是会触发多次,每个部署实例一次? 如果是后者,我该如何改变我的方法,只在整个集群中触发一次?

这个答案( https://stackoverflow.com/a/49430454/318414 )说我需要“所有集群成员[to]都有[an] EJB Container配置指向同一个集群范围的调度程序” - 我该怎么做那?

默认情况下,EJB 容器使用内部提供的服务器范围调度程序,它将持久计时器存储在本地 derby 数据库中,该数据库会根据需要为您自动创建。

为了让计时器只在集群中的一台服务器上运行,所有集群成员必须共享一个数据库并使用集群范围的调度程序,然后协调所有集群成员对共享数据库的访问。

可以在此处找到创建调度程序的说明: https://www.ibm.com/docs/en/was-nd/8.5.5?topic=schedulers-configuring

创建一个单元范围的调度程序后,该调度程序使用一个在所有集群成员之间共享的数据库,然后在此处描述使用该调度程序的 EJB 容器配置: https://www.ibm.com/docs/en/was-nd/8.5 .5?topic=服务配置定时器网络部署

请注意,默认的 derby 数据库可能不会在多个服务器之间共享; 默认的 derby 数据库不包括多客户端支持。 尝试将它与多个并发客户端一起使用将导致错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM