自动EJB计时器GlassFish服务器上未触发(Automatic EJB Timer on Gl

2019-07-02 17:14发布

所以我运行一个Glassfish的3.1的Java EAR应用程序。 我创建了一个无状态会话Bean在我的EJB模块的单一注解的定时器功能。 我没有确切的代码,但它看起来是这样的:

@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的构造方法,并得到一经推出调用。 但计时器方法本身似乎从来就没在任何时候触发。

其他人遇到过这个问题吗? 有一些其他的配置我失踪?

提前致谢。

Answer 1:

下面定时器代码在3.1.2的GlassFish

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,而不执着=假定时器工作

我改变了它在下面的文件

与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>


Answer 2:

根据规范,计时器是持久性的约定:

计时器服务是用于长寿命的业务流程的建模。 计时器生存容器崩溃,服务器关闭,并与它们注册的企业bean的活化/钝化和加载/存储周期。 这些持续性的保证可以任选地在每计时器基础禁用。

斯文展示了如何保证持续性可以被禁用。 GlassFish服务器使用其默认数据库坚持其定时器(看看这里 )。 我能想象,这是跑不起来正因为如此计时器没有工作。 使用下面的命令来启动它:

asadmin start-database


Answer 3:

我遇到同样的问题,当我在下面的教程。 我用Glassfish的4.1(JavaEE的7实现)。 我得到了同样的错误

相关信息:有此服务器所拥有的无EJB定时器

我刚刚创建动态Web模块。 不是一个EAR项目,EJB模块。 按照上面的答案我第一次通过插入改变了我的@Schedule()注释persistent=false attribut像这样

@Schedule(第二= “/ 10" ,分=” “小时= ”8-23“,星期= ”周一至周五“,请将dayOfMonth =” “一个月=” “年= ”*“,信息=” MyTimer”,持续= FALSE)

然后我去了我的glasshish-web.xml部署描述符和我把下面的配置<keep-state>false</keep-state>在像这样的部分:

<glassfish-web-app>
    <context-root>/HelloWorld</context-root>
    **<keep-state>false</keep-state>**
</glassfish-web-app>


文章来源: Automatic EJB Timer on Glassfish Server not triggering