为此,我想在J2EE容器中运行的后台作业,我发现建议创建一个启动servlet和使用定时服务的API来创建一个托管定时器(在答案的工具有在J2EE定时批量处理什么? )。
要创建一个定时器,我需要它实现了定时器API的上下文。 ( 实施例 )
在Servlet类,我覆盖了init方法,但它只有一个ServletContext的访问,而不是一个SessionContext。 一个ServletContext没有方法来创建计时器,所以我在这里停留。
我如何可以访问J2EE定时器服务在Servlet的启动代码?
每当我听到计时器作业,我不禁想,这应该从一个Java EE应用服务器中分离出来。 您可以使用类似石英,或操作系统计划任务,或分批经理像AutoSys,但将其嵌入一个servlet看起来的servlet的滥用给我。
Java EE 5个的容器有一个TimerService这是一个EJB。 也许这将帮助你解决它。
而不是使用Servlet的启动代码(这将在每次重新部署后执行)的,我发现它吸尘器在EJB的启动启动定时器。 随着EJB 3.1和EJB辛格尔顿这个现在可以用少得多的代码:
http://blogs.oracle.com/kensaks/entry/application_startup_shutdown_callbacks