在WebSphere Cluster上使用TimerManager的单例

suj*_*jan 7 java concurrency websphere timer cluster-computing

如何在WebSphere集群上获取一次计时器任务,只执行一次?我知道这在其他应用服务器上是可行的,但无法弄清楚如何在WebSphere中执行此操作.

Avi*_*gal 5

您可以使用WebSphere的Scheduler服务来执行您想要的操作.如果在集群作用域中定义调度程序服务,则每个集群成员将运行调度程序守护程序,但将共享任务DB,这意味着只有其中一个将执行您添加的任务.他们每30秒(可配置)轮询数据库,第一次打开以查看任务将执行它.

http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.nd.doc/info/ae/ae/welc6tech_sch_adm.html

请记住,EJB 3.1提供的新功能可能会帮助您按照自己的意愿行事,但这只是WAS 8.


小智 3

我不确定你的问题是集群问题还是其他问题。但是,如果您想在一次执行后停止 TimerListener,您只需使用输入的计时器变量并将其取消即可。

前任:

public static class MyTimer implements TimerListener {
     public void timerExpired(Timer timer) {    
         timer.cancel();
     }
}
Run Code Online (Sandbox Code Playgroud)

如果您在集群环境中遇到问题,每个实例运行一次任务,那么我很抱歉发布这个简单的答案。