所以我在 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/