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