网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.简单的Java循环控制实现行列式算.
.驯服Tiger之访问环境变量和调用子.
.Java Applet给ActiveX跪下了.
.Java Applet 编 程 技 巧.
.Java变量类型间的相互转换.
.Struts常见异常信息和解决方法.
.struts学习起?i问答.
.创建并解析XML文件Java实例.
.将 Java 应用程序迁移到 .NET(2).
.java 跳转语句.
.走近JavaEE5与Glassfish应用服务.
.用JBuilder9制作EXE文件不公开秘.
.更改tomcat5.0.18的主机目录的方.
.parse 方法.
.关于Editor和Renderer的一点认识.
.J2EE中几种业务代理模式的实现和.
.责任链模式(Chain of Responsib.
.Flex1.5以及flex Builder 1.5安装.
.用Java从XML文件中获取业务图表.
.建立正则表达式.

EJB Timer Service的高级特性心得分享

发表日期:2008-1-5


  
  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);
}



进入讨论组讨论。
  
  3)对于Timer的持久性,我采用重启服务器的方法,当服务器重新启动后,假如时间还没有超时,服务器会继续计时,这一点是正确的;另一种情况下,假如启动后时间已经超时,服务器会在启动后立即调用ejbTimeout,试验通过。

  4)针对三个方法的事务特性,我分别写代码来测试。首先,单独将createTimer方法包含在一个UserTransaction事务中,并在运行中将事务rollback。试验中,服务器将事务回滚,之后Timer不再起作用,没有调用ejbTimeout方法。代码如下:

上一篇:给在校生-JAVA学习,一条漫长的道路 人气:538
下一篇:jdk1.5中RowSet子接口教程 人气:768
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐