代码之家  ›  专栏  ›  技术社区  ›  orjan

EJB3中TimerService的Spring替代方案

  •  1
  • orjan  · 技术社区  · 14 年前

    我们用的是EJB服务:s代表控制需要按需执行或通过cron表达式触发的任务有些任务将每晚运行(如统计采集器),有些任务将每10秒运行(如检查需要处理的新订单),我们还必须能够打开和关闭它们。它在大多数情况下工作正常,但有时进程无法停止,解决问题的唯一方法是刷新TimerPool并重新部署应用程序。

    我一直在寻找解决问题的另一个方法,我们尝试了一个版本,具有更多的控制功能,如下示例: http://www.adam-bien.com/roller/abien/entry/legally_starting_threads_in_ejbs

    它工作得很好,但我感觉我们已经非常接近应该如何使用ejb的边界了。

    我一直在寻找一个任务执行和调度: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html

    这似乎是一种摆脱EJB:s自我们只将它们用于TimerService以及控制器和实际任务之间的通信。

    问题是我需要比静态配置文件更多的控制,也许自制的SchedulerFactoryBean可以工作,但我真的不知道应该从哪里开始寻找?

    工作类型

    • 每10秒执行一次,检查是否有新客户并处理他们的订单
    • 应该能够通过soap或DB中的设置打开和关闭引擎

    统计采集器

    1 回复  |  直到 14 年前
        1
  •  2
  •   mikek    14 年前

    从上面的评论来看,我猜您需要一个更复杂的调度器。你有没有想过用 Quartz Scheduler

    Quarts与EJB相比的缺点是,开箱即用的调度作业不是持久性的,它创建自己的线程池(在运行时不能调整大小),并且它的线程算法没有公平性(即,如果一个作业由于饥饿而没有在指定的时间触发,它就会被取消)。不过,我对石英的整体体验还是不错的。