【问题标题】:Multi-threaded scheduled jobs in JBoss 7.1JBoss 7.1 中的多线程调度作业
【发布时间】:2013-11-27 08:10:27
【问题描述】:

我之前在 JBoss 5 中使用 org.jboss.varia.scheduler.Scheduler 安排了一个带有 JMX 调度的定期批处理作业。在 JBoss 7.1 中删除了此支持。

我发现的唯一替代方法是 EJB 的 @schedule 注释。但是,不允许在 EJB 中运行的作业启动线程。必须在多个并行线程中运行此批量导入作业,以更有效地使用硬件资源,节省处理时间。

如何在 JBoss 7.1 中安排一个可以从多个线程并行调用 EJB 的作业?

【问题讨论】:

    标签: multithreading jboss7.x ejb-3.0 job-scheduling


    【解决方案1】:

    当需要并行执行时,传统的方法是使用 MDB。 (传统上我想到的是异步调用,但我认为这是 EJB 3.1 的一个新特性,所以不适用于 JBoss 7.1。)

    设置概要如下:

    1. 一个触发批处理的@Schedule'd EJB。
    2. 一个队列。
    3. 侦听此队列的 MDB。应该将 MDB 配置为运行与旧作业一样多的实例(有效线程)。
    4. 一个消息对象,它将被插入到队列中并代表 MDB 执行的作业。

    @Schedule'd EJB 被触发时,它会将适当数量的作业消息推送到队列中。这些将由容器并行交付和执行到 MDB 实例。

    作为(可能无关紧要的)奖励,代码可以符合标准,并且不依赖于特定的应用程序服务器 API。

    【讨论】:

    • 谢谢,您可能是正确的,但这对于手头的任务来说似乎是严重的过度杀伤。
    • 我不确定确实如此,但您可能是对的。从本质上讲,您将不得不重构现有代码以作为 MDB 运行或被 MDB 调用(这不应该很大)。添加队列(应该有大量的文档)。并编写@Schedule'd EJB(也不大)。然后又是你的代码,你知道得更好......
    • 在我的情况下,处理不能完全并行,所以我必须有管理队列的代码,可能通过拥有多个队列(相互依赖的文件的导入必须按顺序导入,其他可能在平行)。但我的主要抱怨是,在操作和调整方面,安装和维护队列可能非常复杂。无论如何,这可能是如今比 EJB 更轻量级的容器如此受欢迎的原因 :) 谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多