【问题标题】:Batchlet vs EJB TimerBatchlet 与 EJB 计时器
【发布时间】:2017-04-19 20:41:44
【问题描述】:

我做了一个应用程序来对网络节点进行一些测试,例如 ping 测试、检索磁盘空间等等。

我使用预定的 batchlet 来运行操作,但我想知道这是否正确使用了 batchlet?

EJB 计时器是否应该更相关?此外,当我运行一个 batchlet 时,我的 glassfish 服务器会保留批处理作业的日志,我不需要它(尤其是在一天中生成的批处理作业量)。

如果我需要在相同的计划时间内运行一些工作,我认为批处理可以做到,但 EJB 计时器也可以?

您能否就实现这一目标的正确方法给我您的意见?

谢谢, 厄施

【问题讨论】:

    标签: java jakarta-ee java-batch


    【解决方案1】:

    这不是一个有明确答案的问题,但是将您的应用程序作为批处理作业会产生一些成本,我会看看我得到了什么,看看是否值得这样做。

    因此,您正在考虑一项由单个 Batchlet 步骤组成的作业。好吧,无论是在作业中的失败步骤还是在块步骤中利用检查点,“重新启动”功能都不会获得任何收益。 batchlet 编程模型非常简单……即使您真的喜欢@BatchProperty,您现在也必须处理 XML 才能这样做。

    只有在您想要启动、查看和管理这些执行以及其他批处理作业时,这才开始变得更有趣。这可能是因为您正在使用提供某种特定于实现的附加功能的实现。这方面的一个例子可能是与外部调度程序软件的集成,允许由它调度作业。在另一个极端,如果您发现将所有批处理作业执行的记录保存在一个地方(作业存储库,通常是持久性数据库)很有价值,那么这对您来说也是值得的。

    但是,如果您不关心这些,则可以使用 EJB 计时器。

    【讨论】:

    • 我真的不需要验证或检查作业是否已正确完成。我唯一想做的就是查看节点是否处于活动状态,如果它不活动,则在我的应用程序中生成警报。在磁盘空间检查的情况下,如果达到可用空间触发器,则创建警报。我在 EJB 中实现了该功能,但是在测试运行期间我遇到了一些性能问题。这就是为什么我希望将 batchlet 放在后台的原因。由于这是一项“学习结束”的工作,我需要自己编写尽可能多的代码,希望它有助于确定我的需求。
    • 为什么批处理会避免计时器会遇到的性能问题似乎并不明显。好吧,祝你好运。
    • 可能我对 EJB 的使用不好,我直接调用该方法来检查节点状态以呈现我的 jsf 页面,因此在该方法运行期间我的页面被冻结。此外,有可能有一些批次在时间运行,但我想知道我们是否可以通过 EJB 计时器来完成
    【解决方案2】:

    当您的任务在眨眼间(或附近)执行时,使用 EJB 计时器是合适的。

    否则使用批处理机制。

    从 EJB 计时器执行的长时间运行的任务可能会出现问题,因为它们在事务中执行,通常会在很短的时间后超时。增加此事务超时也会增加数据库以及可能影响应用程序正常运行的其他资源锁定的机会。

    【讨论】:

    • 你不需要在事务中执行定时器任务。
    猜你喜欢
    • 2018-06-29
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2012-08-21
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多