CommonJ TimerManager与EJB3 TimerService

fgl*_*lez 8 weblogic timer commonj java-ee ejb-3.0

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

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

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

谢谢.

Gle*_*est 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定时服务,如果它满足你的需求.


Unc*_*ter 4

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

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

此外,Spring Framework 中的任务调度程序 (org.springframework.scheduling.TaskScheduler) 在抽象计时器管理器 API 方面做得很好,并允许使用 cron 表达式进行声明性配置。