【问题标题】:@Schedule annotated method not invoked in GlassFish 2.1 & EJB 3在 GlassFish 2.1 和 EJB 3 中未调用 @Schedule 注释方法
【发布时间】:2023-07-07 22:01:02
【问题描述】:

在我的无状态 bean 中,我有以下几行:

@Schedule(minute="*/2", hour="*")
public void doSomething() {}

我希望此方法每 2 分钟调用一次,但是当我部署它时,什么也没有发生。此外,如果我将 @Schedule 放在一个 bean 中并且没有客户端调用该 bean 的任何方法(尚未创建 bean 实例),容器或任何东西会每 2 分钟调用一次该方法吗?

这是我第一次使用@Schedule 注解,如果有人能就这些问题给我一些建议,我将不胜感激。

最好的问候,

詹姆斯·特兰

【问题讨论】:

    标签: java glassfish ejb schedule


    【解决方案1】:

    Here 是来自 EE 6 文档的计时器服务链接。

    注意相关部分--

    在部署包含使用 @Schedule 或 @Schedules 注释注释的方法的企业 bean 时,EJB 容器会创建自动计时器。 与编程不同,企业 bean 可以有多个自动超时方法timer,它只允许在企业 bean 类中使用 @Timeout 注解注解的一种方法。

    您可以尝试从 ejb-jar.xml 进行自动调度,而不是使用 @Schedule,如果这有什么不同的话。从它的外观来看,我看不出你的设置有什么问题,除非你可以尝试一下

    @Schedule(minute="0/2", hour="*")
    

    编辑见下面@bkails 的评论。那可能不会给你买任何东西。

    【讨论】:

    • “对于表达式 x/y,该属性被限制为从时间 x 开始的允许值集中的每个 yth 值。[...] 通配符 (*) 可用于x 位置,等价于 0。”
    • 嗯...我在我的应用程序中使用带有 GlassFish v2.1 的 Java EE 5,但在我看来 @Schedule 注释是 Java EE 6 的一个特性。这是造成这种情况的原因吗?有问题吗?
    • @Kal -- “那就行了”意味着 Java EE 5 不是问题的原因?如果是这样,我真的不知道为什么它不起作用 =(
    • 不..对不起,我应该解释得更好。是的.. 使用 Jave EE 5 而不是 Java EE 6 可能是您的问题的原因。
    【解决方案2】:

    我使用的是带有 Java EE 5 和 GlassFish v2.1 的 NetBean 6.7.1。在我安装了带有 Java EE 6 和 GlassFish v3.1 的 NetBean 7.0.1 并使用它来部署我的应用程序后,@Schedule 注释终于可以按预期工作了。

    【讨论】: