我需要能够为在JBoss 4.2上运行的EJB应用程序运行一些计划任务(报告)。
在我的初始实现中,我在关联的WAR中使用servlet从属性文件中读取一些配置,然后使用Timer Service API重置计划的任务。这有效,但在Web项目中关闭初始化似乎有点尴尬。此外,我不确定当应用程序部署在群集环境中时,这是否会按预期工作。
完成此类任务的最佳做法是什么?我应该使用定时服务以外的其他东西,还有更好的方法来在服务器启动时初始化定时器吗?
答案 0 :(得分:4)
也许看看Quartz Scheduler。引用其网站:
Quartz是一个功能齐全的开源作业调度系统,可以与最小的独立应用程序集成,或者与几乎任何J2EE或J2SE应用程序一起使用 - 从最小的独立应用程序到最大的电子商务系统。 Quartz可用于创建简单或复杂的计划,以执行数十,数百甚至数万个作业;任务被定义为标准Java组件或EJB的作业。 Quartz Scheduler包含许多企业级功能,例如JTA事务和集群。
我过去曾用它来触发EJB作业,整个解决方案运行良好,具有非常好的可扩展性。要将它与EJB一起使用,您需要使用JobStoreCMT来存储调度信息(作业,触发器和日历)。要调整作业执行资源,请查看Configure ThreadPool Settings文档。然后,如果EJB部署在集群上,那么让EJB客户端完成其工作以在不同实例上加载平衡请求。
如果需要,Quartz本身也可以clustered通过故障转移和负载平衡获得高可用性和可扩展性。
关于你提到的属性文件,我不确定你需要准确读取什么类型的数据,但是如果你需要阅读某些内容,如果没有servlet,你必须从数据库中读取它。 / p>