EJB Timer Service的高级特性

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取 基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取 一、Sentinel-2简单介绍 哨兵-2系列卫星的主要载荷多光谱成像仪拥有13个谱段,从可见光到近红外再到短波红外,空间分辨率从10m到60m,能实现全所未有的陆地海洋监测水平。其幅宽高达290KM,且A、B双星组合,覆盖能力比美国Landsat8卫星强很多。目前哨兵-2A和哨兵-2B已经实现了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,我这里就不作详细介绍了,有需要的话可以看看以下的文章。

    1)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方法。代码如下:

public String getHello(){

        UserTransaction tx = sessionContext.getUserTransaction();

        tx.begin();

        ts.createTimer(30000, null);  

       

        tx.setRollbackOnly();

        tx.commit();

}

5)  对于cancel方法的事务特性,和上面的过程类似,将Timer.cancel()包含在一个事务中,并在运行过程中将事务rollback。试验中,服务器将事务回滚,之后Timer可以继续计时,并调用ejbTimeout方法。代码如下:

public String getHello(){

        Timer at = ts.createTimer(30000, null);  

       

        UserTransaction tx = sessionContext.getUserTransaction();

        tx.begin();

        at.cancel();

        tx.setRollbackOnly();

        tx.commit();}

     }

6)  对于ejbTimeout方法的事务特性,试验时我把这个方法的CMT属性设置为RequiresNew,同时在此方法中模拟失败后调用rollback的情况,首先服务器把事务回滚,然后在5秒后再次调用ejbTimeout方法,完全和规范描述的一样。实际上这个5秒的时间是可以自己配置的,在apusic.conf文件中,有EJBTimerService的配置,内容如下:

<SERVICE

    CLASS="com.apusic.ejb.timer.EJBTimerService">

    <ATTRIBUTE NAME="RedeliveryInterval" VALUE="5000"/>

    <ATTRIBUTE NAME="MaxRedeliveries" VALUE="1"/>

</SERVICE>

其中的RedeliveryInterval指的就是重新调用ejbTimeout的等待时间。而另一项MaxRedeliveries属性指的是重新调用的次数。

我测试的代码如下:

  public void ejbTimeout(Timer timer){

    System.out.println("timer expired");   

    sessionContext.setRollbackOnly();

  }

 

四、       结束语

EJB 2.1中新增的EJB Timer Service功能虽然简单,但是它的一些高级特性却很实用,遗憾的是大家还没有注意到这些特性,我在这里抛砖引玉,做一个小小的测试,希望能对哪些对Timer服务感兴趣的人有帮助。以上所有特性都只在Apusic 4.0上进行了试验,全部通过测试。本来还想在Weblogic 9.0 beta上也做相同的测试,但是我拿到的版本总是不能顺利的部署J2EE 1.4的应用,无奈只好放弃,还请有兴趣的朋友做进一步测试。

 

【实战指南】OpenClaw 使用 Bird Skill 接入 X(Twitter)的终极省心方案:告别每次都要手动喂 Cookie 的痛苦 OpenClaw 使用 Bird Skill 接入 X(Twitter)的终极省心方案:告别每次都要手动喂 Cookie 的痛苦 阅读详情

相关推荐

用Matlab系统辨识工具箱搞定温控系统建模:从阶跃响应到传递函数(附完整代码)

本文详细介绍了如何使用Matlab系统辨识工具箱进行温控系统建模,从阶跃响应数据采集到传递函数参数辨识的全过程。通过实际案例和完整代码,帮助工程师快速掌握PID控制参数整定技巧,提升温控系统设计效率。特别适合单片机开发者和自动化控制工程师参考。

weixin_30736301的博客 310

EJB---->定时服务(Timer Service)

定时服务用作在一段特定的时间后执行某段程序,定时服务的开发过程与会话Bean 的开发过程大致相同,但比会话Bean 多了几个操作,那就是使用容器对象SessionContext 创建定时器,并使用@Timeout 注释声明定时器方法。   下面定义一个每隔3 秒触发一次事件的定时器,当定时事件触发次数超过5 次的时候便终止定时器的执行。 package com.foshanshop.ejb3...

weixin_34226706的博客 257

OpenCV学习笔记(25)基于MFC和OpenCV的摄像机定标与立体匹配测试程序(20140505更新)

最近整理了一下这两年一直在用的摄像机定标与立体匹配测试程序,将代码进行了重构,界面也做了调整,分享出来方便有需要的朋友使用。当然我的编程能力有限,程序可能还有各种bug,请大家多多包涵。相关问题欢迎留言或email联系讨论,谢谢! ==================================================================================源码

晨宇思远 5万+

EJB-11:Time Service

Time Service(定时服务) EJB如何调用EJB容器通过的定时服务? 在指定的某个时间点,执行相应的人任务。 常用的定时服务框架:   EJB(Since EJB2.1)   QuantZ(Open Source)   脚本(如UINX中的cron at) 1、EJB定时服务的原理   采用了模板方法   ① 容器提供定时服务功能

逆境成长 936

逆向实战:从x-mini签名到RPC调用,Frida动态分析小红书加密协议

本文通过实战案例,详细拆解了小红书App的加密协议逆向分析过程。从识别x-mini签名等关键参数入手,结合静态分析与Frida动态Hook技术,追踪到核心的RPC调用入口,并最终封装成可独立调用的RPC函数,为安全研究和协议理解提供了完整的技术路径。

moss5的博客 1033

手把手教程:使用C#实现工业上位机开发

深入讲解如何利用C#进行上位机开发,涵盖通信协议与界面设计,助力掌握工业自动化核心技能。结合实际案例,让上位机开发更高效直观。

weixin_32480007的博客 2065

EJB 定时服务Timer Service

定时服务用在一段特定的时间后执行某段程序。定时服务可以用在stateless session bean 和messsage – driven bean ,当某个stateless session bean 或message – driven bean 的定时器启动时,容器会从实例池中选择bean的一个实例,然后调用器timeout回调方法。可以使用@Resource 注释注入定时服务,或者使用容器对象SessionContext创建定时器。

st_linxiaoling的专栏 1412

麒麟v10系统安装

麒麟v10系统安装

喜文BLOG 1万+

EJB3 TimerService

EJB3 的计时器服务相对简单,此服务允许在指定时间间隔后自动调用某方法,当指定的时间到期时容器就会调用超时方法(即Timeout注解的方法)。TimerService只能在无状态Session bean和MDB中使用,因为它们是异步和无状态的。下面举例说明(服务器为JBoss5.0.1):1.建立一接口和Session Bean Java代码 publicin...

weixin_30721899的博客 167

使用 MATLAB/Simulink 构建一个电机-液压联合控制系统的仿真模型

本文详细介绍了基于Simulink的电机与液压执行机构联合控制系统建模方法。通过7个步骤,系统讲解了从创建项目、搭建PMSM电机模型、建立逆变器与矢量控制模块,到构建液压泵和执行机构模型的完整过程。重点展示了如何设置关键参数、添加测量反馈模块,并提供了实用的代码片段。教程还包含仿真运行流程、结果分析指标及进阶建议,帮助读者掌握多物理场耦合系统建模的核心技术。该方法适用于机电液一体化系统设计,为工程实践提供有效参考。

amy_mhd的博客 613

GeoServer下载与安装(详细图文教程)

GeoServer官方版可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。

大剑师兰特的GIS世界 3276

flink定时器(Timer)

定时器 默认的区分精度是毫秒。由于定时器只能在 KeyedStream 上使用,所以到了 KeyedProcessFunction 这里,我们 才真正对时间有了精细的控制,定时方法.onTimer()才真正派上了用场。所以我们会看到,程序运行后先在控制台输出“数据到达”的信息,等待 10 秒之后, 又会输出“定时器触发”的信息,打印出的时间间隔正是 10 秒。基于 KeyedStream 注册定时器时,会传入一个定时器触发的时间戳,这个时间戳的定时器对于每个 key 都是有效的。

qq_42575907的博客 6741

Ansys Lumerical双层扭曲液晶偏振光栅仿真:宽角度衍射效率优化

Ansys Lumerical双层扭曲液晶偏振光栅仿真研究 摘要 本文采用Ansys Lumerical软件平台,对双层扭曲液晶偏振光栅的宽角度衍射特性进行系统仿真研究。针对6μm周期的液晶光栅结构,以1050nm、1064nm和1550nm三个近红外波段为研究对象,在±40°入射角范围内优化平均衍射效率。研究基于液晶材料的双折射特性(Δn=0.135),通过构建两层扭曲方向相反的液晶层结构,扫描0-90°单层扭曲角度和不同厚度参数,利用RCWA求解器进行严格耦合波分析~~~~~~~

huanghm88的专栏 164

EJB3.0 定时服务:Timer Service

 定时服务用作在一段特定的时间后执行某段程序使用容器对象SessionContext创建定时器,并使用@Timeout 注释声明定时器方法通过依赖注入@Resource SessionContext ctx,获得SessionContext对象,调用ctx.getTimerService().createTimer(Date arg0, long arg1, Serializable

danning之道 4102

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Interface Timer

Skip navigation links Overview Package Class Use Tree Deprecated Index Help Prev Class Next Class Frames No Frames Summary: Nested | Field | Constr | Method Detail: Field | Constr | Method ...

[Blog][Domain] programb.blog.youkuaiyun.com 553

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

EJB中的Timer

在EJB项目中,可以使用@Timeout来做定时服务,但是如果刚开始测试的时候一不小心把Timer启动了,但是出现错误了,导致该项目每次一发布都会运行上次出现错误的Timer,即使重新启动操作系统都无法解决。这主要是在default目录下有个data目录,该目录下有jboss自带的数据库,它把Timer的信息都保存到该数据库里面,因此,只要在default目录下留deploy、lib、deploy

天涯一滴水 491

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

EJB Timer Service is not available. Timers for application with id 95795415990861824 will not be del...

delete follows:glassfish\domains\domain1\applications\ejb-timer-service-appglassfish\domains\domain1\generated\ejb\ejb-timer-service-appglassfish\domains\domain1\generated\jsp\ejb-timer-service-appgla...

weixin_30650039的博客 183

EJB2.1 & EJB3.0: Timer Service三部曲

对于J2EE中的调度任务, 在ejb2.1推出前, 似乎只能采用一些非常途径:比如在servlet中new一个Timer.我们急切的需要EJB的标准实现.最近我们就遇到了这样的需求. 还好websphere升级到了6.0, 支持ejb2.1规范,在ejb2.1标准中, 提供了一个Timer Service的标准实现.要实现Timer Service, 通常的做法就是让一个无状态sessionbea

lcllcl987的专栏 1449

Struts+ejb知识点

 Struts:了解整个Web App的发展演变周期,对model1、model2有深入了解,并能分析两种模式的优缺点MVC模式的全面深入掌握,能够在Web App中正确使用MVCStruts1.2 API主要接口的全面掌握,对Struts1.2各个组成部分深入掌握能够结合IDE熟练的开发Struts中MVC的各个模块表示构件(Action、ActionForm…)对Struts的五大标签

琉璃仙境 1380

Jboss EJB3.0 实例教程

了解Jboss配置以及如何发布EJB

st_linxiaoling的专栏 2977

定时服务(Timer Service)

EJB3.0的定时服务开发过程: 关键点:首先需要使用容器对象SessionContext创建定时器,然后使用@Timerout声明定时器方法 声明:@Resource SessionContext ctxContext 调用:ctxContext.getTimerService().createTimer(X,X...) 方法规范:在方法上面加上@Timerout要遵循这样的规范:voi...

weixin_30897079的博客 1062

奇怪的Timer Service问题。

    今天用JDeveloper写了个EJB3的Session Bean,在里边添加了Timer Service方法,然后在Embedded OC4J运行这个Session Bean,并用JavaApp客户端测试这个方法,TimerService能正常运行。然后删除了Timer相关的代码,再次运行Session Bean时,发现还有TimerService在运行。最后,我在删除以下路径的文件,才

剑晖(广州)的专栏 564

java.lang.RuntimeException: EJB Timer Service is not available

dadaverse安装完成后,启动glassfish如果失败,查看server.log,error显示:java.lang.RuntimeException: EJB Timer Service is not available,可清空generated、osgi-cache两个文件夹,再重启解决。...

chaishen10000的专栏 2070
下一篇: SOA与中间件、基础件的发展
rain_2005
博客等级 码龄21年 1粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值