定时器分为两种:single-action Timer(单动定时器)和interval Timer(间隔定时器)。
为了使用定时服务,1.enterprise bean必须实现javax.ejb.TimedObject接口,该接口定义了一个回调方法,ejbTimeout().
package javax.ejb;
public interface TimedObject{
public void ejbTimeout(Timer timer);
}
2.在EJB3.0中,还可以使用@javax.ejb.Timeout注解来指定回调方法。此方法必须返回void,并接受一个javax.ejb.Timer类型的参数。
开发者有3种获得TimerService对象的可用方式。
1.通过EJBContext获得TimerService实例。
2.使用JNDI API查找到TimerService对象,从而能够访问到定时器服务。
3.还可以借助于依赖注入 获得TimerService对象,
@Resource javax.ejb.TimerService timerService。
TimeService接口为enterprise bean 访问EJB容器的定时服务提供 了支持,利用它可以创建新的定时器,列出已有的定时器。
优点:
1.EJB定时器服务提供的任务调度语义与平台无关。
2.EJB定时器服务允许开发者通过编程实现定时器的定义和设定。
3.最后,同Flux或Quartz相比,EJB定时器服务提供了标准化接口。
缺点:
1.EJB规范不支持在部署描述符或Annotation注释中声明Timer间隔。
2.EJB定时器服务中的定时器的使用不够灵活。定时器API仅能处理单位为毫秒的时间。如果能够依据小时、日、月方式指定定时器的行为,则EJB定时器服务的使用也将变的更加容易。