`
xumingrencai
  • 浏览: 1179672 次
文章分类
社区版块
存档分类
最新评论

Seam集成的定时器应用_基于Seam框架的后台定时执行服务

 
阅读更多

在企业应用中,需要编写后台定时服务的需求经常会遇到,如要对某个数据表的字段进行定时刷新等。

在基于Seam框架中要编写一个后台定时执行服务主要要考虑以下两个方面:

  1. 服务的初始化;
  2. 服务的定时执行;

本文以Seam集成的QuartZ来实现后台定时执行服务。

一、服务的初始化

服务的初始化Seam组件:

Java代码 复制代码
  1. @Name("scheduleController")
  2. @AutoCreate
  3. publicclassScheduleControllerimplementsSerializable{
  4. privatestaticfinallongserialVersionUID=-6332836501640042340L;
  5. @In
  6. EntityManagerentityManager;
  7. @In
  8. EntOnlineProcessorentOnlineProcessor;
  9. @Logger
  10. Loglog;
  11. publicvoidscheduleTimer(){
  12. //启动客户端代理服务
  13. Longnow=System.currentTimeMillis();
  14. Datewhen=newDate(now);
  15. Stringcron="00/1***?";//每1分钟
  16. Datestoptime=newDate(now+360000000000L);
  17. entOnlineProcessor.scheduleOnlineTask(when,cron,stoptime);
  18. log.info("客户端代理服务服务已成功启动");
  19. }
  20. }

在Seam框架中如何在Seam环境初始化后来自动执行该初始化方法呢,可以components.xml的配置来实现:

Xml代码 复制代码
  1. <eventtype="org.jboss.seam.postInitialization">
  1. <actionexecute="#{scheduleController.scheduleTimer}"/>
  2. </event>
  3. <!--InstalltheQuartzDispatcher-->
  4. <async:quartz-dispatcher/>
  5. sp;

二、服务的定时执行

服务的定时执行关键是服务的实现,参考实现如下代码:

Java代码 复制代码
  1. @Name("entOnlineProcessor")
  2. @AutoCreate
  3. publicclassEntOnlineProcessor{
  4. @In
  5. EntityManagerentityManager;
  6. @LoggerLoglog;
  7. @Asynchronous
  8. @Transactional
  9. publicQuartzTriggerHandlescheduleOnlineTask(@ExpirationDatewhen,
  10. @IntervalCronStringcron,
  11. @FinalExpirationDatestoptime)
  12. {
  13. ......
  14. returnnull;
  15. }
  16. }

关于如何触发该异步方法,并且控制定时机制在上一个代码中已包含了:

Java代码 复制代码
  1. //启动客户端代理服务
  2. cron="00/1***?";//每1分钟
  3. entOnlineProcessor.scheduleOnlineTask(when,cron,stoptime);
  4. log.info("客户端代理服务服务已成功启动");
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics