我必须为 WebLogic 实现一个简单(非集群)计时器,似乎有两个不同的“标准”选项
- 计时器和工作管理器 API (CommonJ)
- EJB3.0 定时器服务
有人对在 WebLogic 10.0 中使用 CommonJ TimerManager 与使用 EJB3 TimerService 有什么建议吗?
谢谢你。
我必须为 WebLogic 实现一个简单(非集群)计时器,似乎有两个不同的“标准”选项
有人对在 WebLogic 10.0 中使用 CommonJ TimerManager 与使用 EJB3 TimerService 有什么建议吗?
谢谢你。
CommonJ 最初是在 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,触发器。
后一种 JSR 236 最近通过了公众审查,因此应该很快成为标准。截至 2012 年 11 月,它是包含在 Java EE 7 规范 (JSR 342) 下的初步候选者,但这将在 342 最终确定并发布后得到确认。
因此,CommonJ 存在以下问题:
如果满足您的需要,我建议您使用 EJB 3.0 Timer Service。
与 CommonJ Timer Manager 相比,EJB 3.0 中的 TimerService 受到了一些限制。例如,它需要样板代码和容器特定的配置来实现灵活的任务调度。这通过在 EJB 3.1 中引入 @Scheduled 注释而得到简化。
如果您坚持使用 EJB 3.0 并且需要轻松灵活地配置任务调度,CommonJ Timer Manager API 是一个可行的选择。
此外,来自 Spring Framework (org.springframework.scheduling.TaskScheduler) 的任务调度器在抽象 Timer Manager API 方面做得很好,并允许使用 cron 表达式进行声明式配置。
是的,如果 TimeService 功能满足您的要求,请使用它——它是 Java EE 标准的一部分!如果不是绝对必要,为什么要使用另一个库。