在WebSphere Cluster上使用TimerManager的单例

时间:2010-05-12 17:21:21

标签: java concurrency timer websphere cluster-computing

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

4 个答案:

答案 0 :(得分: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。

答案 1 :(得分:3)

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

例如:

public static class MyTimer implements TimerListener {
     public void timerExpired(Timer timer) {    
         timer.cancel();
     }
}

如果您遇到集群环境问题,每个实例运行一次任务,而不是发布这个简单答案的道歉。

答案 2 :(得分:2)

您可能应该阅读this solution来评估它是否适合您的情况。

答案 3 :(得分:0)

可能你可以使用兵马俑/ ehcache锁定? http://www.ehcache.org/documentation/2.4/terracotta/explicit-locking