我必须为WebLogic实现一个简单的(非集群)计时器,似乎有两种不同的“标准”选项
有没有人对使用CommonJ TimerManager而不是在WebLogic 10.0中使用EJB3 TimerService有任何建议?
谢谢。
答案 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存在以下问题:
如果满足您的需求,我建议您使用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标准的一部分!如果不是绝对必要,为什么要使用另一个库。