我们需要在 EJB3.0 容器中运行内务处理线程。我们目前有一个“TimerService”@Stateless EJB(必需,因为它注入(inject)了其他@EJB),它在调用 startTimer() 方法时创建一个间隔 EJB 计时器。此计时器线程应该只有一个实例。当前的解决方案涉及从我们的一个 servlet 的 init() 方法调用 startTimer(),其中 servlet 在启动时使用 web.xml 强制加载,但这感觉像是巧合行为,而不是正确的做事方式.我们已经遇到了一个问题,因为其他人对该 servlet 进行了子类化,这意味着 init() 被调用了两次,这意味着有两个计时器线程。
感觉这不是一个不寻常的要求,那么执行此操作的正确方法是什么(如果有的话)?在我看来,应该有一种简单的方法可以让容器在启动时启动一个线程,而不必将其绑定(bind)到容器中的其他资源。
最佳答案
对于 EJB < 3.1,您将必须获得特定于应用程序服务器或 hackish。由于您提到您正在使用 JBoss,因此您可以使用已定义生命周期方法的 @Management 标记。
关于java - EJB3.0 容器中的单个后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335549/