定时服务与会话bean的开发过程大致相同,但比会话bean多了几个操作:
- 使用容器对象SeesionContext创建定时器。如:@Resource private SessionContext ctx;
- 使用@Timerout注释声明定时器方法。
例如:
package org.xixi.stateless;
import java.util.Date;
import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
@Stateless
public class TimerService implements TimerServiceRemote {
private int count = 1;
@Resource
private SessionContext ctx;
/* (non-Javadoc)
* @see org.xixi.stateless.TimerServiceRemote#scheduleTimer(long)
*/
public void scheduleTimer(long milliseconds) {
// TODO Auto-generated method stub
count = 1;
ctx.getTimerService().createTimer(new Date(new Date().getTime() + milliseconds), milliseconds, "*********");
}
@Timeout
public void timeoutHandler(Timer timer){
System.out.println("-------------------");
System.out.println("定时器事件发生时的参数为:"+timer.getInfo());
System.out.println("=======================");
if (count>=5) {
timer.cancel();
}
count++;
}
}
- timer就是ctx.getTimerService().createTimer(new Date(new Date().getTime() + milliseconds), milliseconds, "*********"); 所创建的!
- timer.getaInfo()返回的信息就是上面创建timer时的第三个参数,例子中是“***************”.
- ctx.getTimerService().createTimer(new Date(new Date().getTime() + milliseconds), milliseconds, "*********"); 它包括三个参数分别是:
- 第一个:定时器启动的时间,如果传入时间小于现在,定时器会立刻启动。
- 第二个:间隔多长时间后再次触发定时事件,单位:毫秒。
- 第三个:传给定时器的参数信息,此值必须是实现Serializable接口。