8

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

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

有人对在 WebLogic 10.0 中使用 CommonJ TimerManager 与使用 EJB3 TimerService 有什么建议吗?

谢谢你。

4

3 回答 3

9

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 存在以下问题:

  • 它不是也不会是 Java 标准,除非在 JSR 236 下发生重大变化,该标准将包含在 Java EE 7 或更高版本中
  • 它可能超出了您的要求,并且比 EJB 3.0 计时器服务更复杂

如果满足您的需要,我建议您使用 EJB 3.0 Timer Service。

于 2013-02-23T02:47:25.183 回答
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) 的任务调度器在抽象 Timer Manager API 方面做得很好,并允许使用 cron 表达式进行声明式配置。

于 2012-01-09T16:29:01.670 回答
0

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

于 2011-07-08T11:29:38.550 回答