如何在Servlet启动代码中使用J2EE Timer Service API?
题
对于我想在J2EE容器中运行的后台作业,我找到了创建启动servlet并使用Timer Service API创建托管Timer的建议(在 J2EE中定时批处理的工具是什么?。) p>
要创建计时器,我需要一个实现计时器API的上下文。 (示例)
在Servlet类中,我覆盖了init方法,但它只能访问ServletContext,但不能访问SessionContext。 ServletContext没有创建计时器的方法,所以我被困在这里。
如何在servlet的启动代码中访问J2EE计时器服务?
解决方案
每当我听到计时器工作时,我都不禁认为这应该与Java EE应用服务器分开。您可以使用Quartz或操作系统计划任务或AutoSys之类的批处理管理器,但将其嵌入到servlet中似乎是对我的servlet滥用。
Java EE 5容器的TimerService是EJB。也许这将帮助您解决问题。
其他提示
我没有使用Servlet启动代码(将在每次重新部署后执行),而是发现在启动EJB时启动计时器更加清晰。使用EJB 3.1和Singleton EJB,现在可以使用更少的代码:
http://blogs.oracle.com/kensaks/entry/application_startup_shutdown_callbacks
不隶属于 StackOverflow