CommonJ TimerManager与EJB3 TimerService

时间:2011-07-07 07:12:06

标签: java-ee timer ejb-3.0 weblogic commonj

我必须为WebLogic实现一个简单的(非集群)计时器,似乎有两种不同的“标准”选项

  • 计时器和工作管理器API(CommonJ)
  • EJB3.0 TimerService

有没有人对使用CommonJ TimerManager而不是在WebLogic 10.0中使用EJB3 TimerService有任何建议?

谢谢。

3 个答案:

答案 0 :(得分:9)

CommonJ最初是在JSR 237下提出的,JSR 237在2008年被撤销并合并到Java EE平台的JSR 236 Concurrency Utilities中。请注意,这意味着CommonJ提议的标准和API发生了重大变化。名称CommonJ被删除,新包在javax.enterprise.concurrent下,而不是commonj.timers和commonj.work,原始类TimerManager,Timer和TimerListener被非对应的接口/类替换,包括ManagedScheduledExecutorService,ManagedTask, ManagedTaskListener,Trigger。

后者JSR 236最近通过了公众审查,因此很快就会成为标准。截至2012年11月,它是Java EE 7规范(JSR 342)下的初步候选者,但是一旦342最终确定并发布,这将得到确认。

因此,CommonJ存在以下问题:

  • 它不是也不会是Java标准,直到JSR 236中的重大更改才会被包含在内 在Java EE 7或更高版本中
  • 它超出了你的要求,大概是,而且是 比EJB 3.0定时服务更复杂

如果满足您的需求,我建议您使用EJB 3.0定时服务。

答案 1 :(得分:4)

与CommonJ Timer Manager相比,EJB 3.0中的TimerService有些限制。例如,它需要样板代码和特定于容器的配置来实现灵活的任务调度。通过在EJB 3.1中引入@Scheduled注释简化了这一过程。

如果您坚持使用EJB 3.0并且需​​要轻松灵活的可配置任务调度,CommonJ Timer Manager API是一个可行的选择。

此外,Spring Framework的Task Scheduler(org.springframework.scheduling.TaskScheduler)可以很好地抽象Timer Manager API并允许使用cron表达式进行声明性配置。

答案 2 :(得分:0)

是的,如果TimeService功能涵盖了您的要求,请使用它 - 它是Java EE标准的一部分!如果不是绝对必要,为什么要使用另一个库。