程序化计时器和自动计时器 - 差异

时间:2013-07-02 09:19:39

标签: java jboss ejb jboss7.x quartz-scheduler

我想找到那个定时器服务之间的区别。我应该使用哪些以及何时使用。 我正在使用Jboss Application Server。

  • 1)java.ejb.Schedule。 @ Schedule注释或配置来自 XML。

  • 2)javax.ejb.Timer。 @ Timeout注释。

  • 3)javax.ejb.TimedObject。 @ Timeout注释或配置自 XML。

是2和3相同吗?这是程序化计时器自动计时器之间的区别 是quartz-scheduler实现计划?他们做同样的工作吗?

2 个答案:

答案 0 :(得分:1)

1)您可以在EJB的任何业务方法上使用@Schedule注释,但不能动态创建计时器。

2)当您使用@Timeout注释标记方法时,将在触发有问题的创建计时器时调用它。触发计时器的元数据位于Timer对象中。

3)TimedObject接口是@Timeout注释的替代,因为TimedObject接口包含ejbTimeout(定时器计时器)方法。

  

是2和3相同吗?

2和3通常是相同的,

  

这是程序化计时器和自动计时器之间的区别吗?

区别在于您创建它们的方式(使用@Schedule注释时,功能有限,因为您无法传递自定义对象)。

  

是quartz-scheduler实现计划吗?他们做同样的工作吗?

Quartz调度程序是一个功能强大的框架,但没有与Java EE6作为Timer对象很好地集成。我更喜欢EJB计时器,并且只在需要一些额外功能(例如cron表达式)时才使用石英。

答案 1 :(得分:1)

EJB 2.1 Java 1.4

ejbTimer必须实现TimedObject接口。 必须通过EJBContext()访问TimerService。 业务逻辑必须放在ejbTimeout()方法中。

EJB 3.0 Java 5

现在,可以使用带有注释@Resource TimerService的依赖注入来访问TimerService。 业务逻辑可以放在任何使用@Timeout

注释的方法中

以前的版本称为Programatic计时器。

EJB 3.1 Java 6

自动计时器出现,这意味着现在您不必关心如何获取TimerService,因为ejb容器将完成这项工作。 业务逻辑必须放在使用@Schedule或@Schedules注释的任何方法上,此注释还允许添加计时器执行期。 (在以前的版本中,这种配置放在xml文件中)

Quartz不是Java EE规范的一部分。