我有两个超时定义:
超时A - 每30秒
超时B - 每2分钟
// scheduled for timeout A (every 30sec)
@Stateless
public class MyBeanA {
(...)
@Timeout
public void onTimeoutA(javax.ejb.Timer timer) {
// (...)
}
}
// scheduled for timeout B (every 2min)
@Stateless
public class MyBeanB {
(...)
@Timeout
public void onTimeoutB(javax.ejb.Timer timer) {
// (...)
}
}
很容易注意到,每2分钟后,两次超时都会被解雇。我想确保在这种情况下,超时A将在超时B之前触发:
(30秒):timeoutA,(60sec):timeoutA,(90sec):timeoutA,(120sec):timeoutA,timeoutB
标准EJB(3.0)定时服务API是否可行? 我的应用服务器是JBoss。
提前致谢, 彼得
答案 0 :(得分:1)
没有内置的方式来订购这样的计时器。你可以手动完成:
答案 1 :(得分:0)
我使用的解决方案与bkail给出的解决方案非常相似。 有一个ejbTimeout()方法计划每30秒触发一次。使用包含计数器的Serializable对象安排超时:
createTimer(Date initialExpiration, long intervalDuration, Serializable info)
每次调用ejbTimeout时,计数器都会增加。如果它达到3,则调用2分钟后应该触发的方法,并将计数器设置回0.它的工作原理如下:
ejbTimeout after 30sec (counter == 0): call A(); counter++; ejbTimeout after 30sec (counter == 1): call A(); counter++; ejbTimeout after 30sec (counter == 2): call A(); counter++; ejbTimeout after 30sec (counter == 3): call A(); call B(); counter = 0;