我在 JSP 中有一个会话 bean,在那个 bean 中我正在启动一个休眠 10 秒并再次执行的线程。我面临的问题是,在注销后这个线程也继续运行。
有人可以帮助如何阻止它运行吗?
我在 JSP 中有一个会话 bean,在那个 bean 中我正在启动一个休眠 10 秒并再次执行的线程。我面临的问题是,在注销后这个线程也继续运行。
有人可以帮助如何阻止它运行吗?
根据EJB 规范,从 EJB 启动线程是非法的。参照。第 21.2.2 节(第 593 页):
“企业 bean 不得尝试管理线程。企业 bean 不得尝试启动、停止、暂停或恢复线程,或更改线程的优先级或名称。企业 bean 不得尝试管理线程组。”
使用 EJB 可能有不同的解决方案,或者您可能需要使用不同的框架。这取决于您到底想要完成什么。
从 servlet 启动线程不是一个好主意,因为如果您有很多用户,您可能会耗尽资源(内存和 CPU)。尤其是用数据库访问会出现奇怪的行为!
添加一个 Quartz 计时器 (http://quartz-scheduler.org),它每 10 秒触发一次,并处理一个已订阅会话 bean 的列表。在用户注销时,再次从您的服务中取消订阅您的 bean。