jakarta-ee - Glassfish 服务器上的自动 EJB 计时器未触发

标签 jakarta-ee ejb glassfish-3 ejb-3.1 ear

所以我在 Glassfish 3.1 上运行 Java EAR 应用程序。我在我的 EJB 模块中创建了一个带有单个注释计时器函数的无状态 session bean。我没有确切的代码,但它看起来像这样:

@Stateless
public class SessionTimerBean {

    public SessionTimerBean(){
       System.out.println("Constructor Called");
    }

    @Schedule(second="*/10", minute="*", hour="*")
    public void scheduleTimer(final Timer t) {
       System.out.println("Timer Called");
    }
}

当我启动 Glassfish 时,调试信息似乎表明它可以识别 EJB 计时器注释,并且在启动时确实会调用 bean 的构造函数方法。但是计时器方法本身似乎永远不会在任何时候被触发。

还有其他人遇到过这个问题吗?我还缺少其他配置吗?

提前致谢。

最佳答案

以下计时器代码适用于 glassfish 3.1.2

import javax.ejb.Schedule;
import javax.ejb.Stateless;
import javax.ejb.Timer;

@Stateless
public class LabbBean {

    @Schedule(second="*/5", minute="*",hour="*", persistent=false)
    public void method123(final Timer timer) {
        System.out.println("Timer1234");
    }
}

但是当我删除它时停止工作

persistent=false 

所以在服务器日志中我发现:

INFO: keepstate is true and will not create new auto timers during deployment.

所以我将“保持状态”更改为 false。我不是专家,但将其更改为 false 会使计时器在没有 persistent=false 的情况下工作

我在下面的文件中更改了它

glassfish-ejb.xml:

<glassfish-ejb-jar>
    <enterprise-beans>
    ...
    </enterprise-beans>
    <keep-state>false</keep-state>
</glassfish-ejb-jar>

glassfish-application.xml

<glassfish-application>
    <keep-state>false</keep-state>
</glassfish-application>

关于jakarta-ee - Glassfish 服务器上的自动 EJB 计时器未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092567/

相关文章:

java - GlassFish V3 Cluster + TimesTen 奇怪的行为

validation - 在选择期间绕过 Bean 验证但不在插入/更新期间

java - workspace.xml 文件已损坏(第 1 行错误 : Content is not allowed in prolog) in IntelliJ, 我该如何修复?

java - 在这种情况下您真的需要无状态 session bean 吗?

web-services - 请求实体不能为空

java - 不同步的 EntityManager 如何从数据库读取?

postgresql - EJB3.1 注入(inject) JSF2.1 托管 bean 的不确定行为

java - 如何从 RESTFul Web 服务访问本地文件

java - 使用 Tomcat 手动部署 webapp(即 autoDeploy=false,noDeployOnStartup=false)

jakarta-ee - 真实服务的模拟对象