我想找到那个定时器服务之间的区别。我应该使用哪些以及何时使用。 我正在使用Jboss Application Server。
1)java.ejb.Schedule。 @ Schedule注释或配置来自 XML。
2)javax.ejb.Timer。 @ Timeout注释。
3)javax.ejb.TimedObject。 @ Timeout注释或配置自 XML。
是2和3相同吗?这是程序化计时器和自动计时器之间的区别 是quartz-scheduler实现计划?他们做同样的工作吗?
答案 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规范的一部分。