正在阅读:EJB Timer Service的高级特性心得分享EJB Timer Service的高级特性心得分享

2005-06-16 10:14 出处: 作者:rain_2005 责任编辑:moningfeng
EJB 2.1中新增了一个Timer Service服务,我也看到一些文章介绍如何使用Timer服务,但是关于Timer服务的几个重要特性就言之甚少。我看了EJB 2.1规范后又试验了一下这些相对比较高级的特性,介绍给大家共享。   先了解一下这几个特性,他们是:   1)设定时间间隔后能重复定时的Timer   在EJB 2.1规范中定义的Timer有两种,一种是single-event timers,另一种是interval timers。single-event timers在它的生命周期中只产生一次timeout,而interval timers可以在每经过一段时间间隔后产生一次timeout。   2)Timer的持久性   如果服务器被关机,那么这些timer仍然起作用,等到下次服务器启动时能够继续计时。假如启动时已经超时,那么立即产生timeout。   3)事务特性   Timer的创建(create)、取消(cancel),以及EJB的ejbTimeout方法都可以参与事务,作为事务的一部分,他们可以在事务回滚(Rollback)时恢复状态。   也就是说,如果在事务中调用TimerService的createTimer方法,那么回滚时将销毁创建的Timer;如果在事务中调用了Timer的cancel方法,那么回滚时将恢复这个Timer。   如果因为ejbTimeout方法运行失败导致事务回滚,那么规范要求服务器的Timer Service在之后要至少再次调用ejbTimeout方法一次。之所以要求这样做的原因呢,我想可能是因为那些需要定时完成的业务都是相对比较重要的,如果Rollback后不加以处理可能会产生严重后果。   好了,现在开始我们的试验。不过对于timer service的基础知识,以及如何写一个使用timer service的EJB,我这里就不作详细介绍了,有需要的话可以看看以下的文章。http://sammi_tea.mblogger.cn/posts/10373.aspx 一、准备   因为Timer服务是EJB 2.1的特性,需要一个实现了EJB 2.1的服务器,我就下载了Apusic 4.0来测试。   下载地址:http://www.apusic.com 二、试验方案   对于上述的特性,我打算在同一个应用中测试,这个应用很简单,客户访问一个Jsp页面,激活 Timer,这个Timer在超时后会调用一个stateless session bean的ejbTimeout方法,此时我们就在后台打印出调试信息。   需要说明的是,Stateful session bean 中不可以使用Timer Service,其他类型的EJB都可以。 三、试验结果   1)对于最常用的single-event timers,试验结果是正常的,服务器可以在计时超时的时候调用ejbTimeout方法。创建这种Timer的代码片断如下:

public String getHello(){ TimerService ts = sessionContext.getTimerService(); ts.createTimer(20000, null); //计时20秒 }

  2)对于interval timers类型,试验结果也是正常的,服务器可以在每次间隔时间超时的时候调用ejbTimeout方法。创建这种Timer的代码片断如下:

public String getHello(){ TimerService ts = sessionContext.getTimerService(); ts.createTimer(new Date(第一次超时时间), 20000, null); }

键盘也能翻页,试试“← →”键

相关文章

302 Found

302 Found

The requested resource resides temporarily under a different URI.


Powered by Tengine