java ee作业调度和执行

时间:2014-03-04 12:13:29

标签: java-ee jms jca

在JEE应用程序中,需要摆脱支持工作流程执行的众多JMS队列。工作流通常由多个顺序任务组成。任务可能包含外部系统调用和其他业务逻辑。任务处理器实现为MDB。当任务处理器从输入队列接收消息时,它执行业务逻辑,丰富输入消息并将其放入工作流链中下一个任务处理器的输入队列。如果任务处理器根据设置执行任务,则输入消息将在队列中回滚以延迟执行,或者放入错误队列中。 现在,应该使用数据库而不是JMS队列。任务应该作为数据库表中的行保存,包括任务状态(延迟,正在进行,失败等),目标(应该执行任务的处理器的名称/别名)以及业务数据。

我已经开始使用JCA实现此要求。我的入站连接器扫描数据库表中的任务,然后调用适当的端点(实现业务接口的MDB)。

还有其他方法可以满足要求吗?也许有人知道这种场景的轻量级开源框架?请不要提及BPM框架。

1 个答案:

答案 0 :(得分:1)

我认为你想要摆脱JMS,因为在很多队列中管理很多消息并不像#34;轻量级"如你所愿......并且你的代码库正在增长!

  • 您不断监视许多队列,以查看问题或瓶颈所在。
  • 如果其中一个外部系统停机一段时间,则会进行多次调用并失败,并且所有消息都会进入错误队列。
  • 如果您想了解某个"工作流程"的实例发生了什么,您可以查看日志文件。
  • 如果您想要从头到尾查看工作流程,您将不得不求助于手写文档(这并不总是准确的)。
  • 如果您添加或删除一个步骤,则必须查找并更新指向该步骤的所有步骤,但这些步骤并未发生变化。
  • 在部署新版本之前,您需要等待旧版本的作业运行到最终状态。

虽然您的JMS解决方案已经实现了它们,但新解决方案还需要考虑更多的非功能性要求:可扩展性,可靠性等。总而言之,这些都是艰难的要求...... 任何技术。

也许你可以考虑不同的领域"轻量级"对你来说最重要的是:

  • 您可以在不启动整个框架的情况下测试普通的业务逻辑部件吗?即业务逻辑与框架的耦合程度如何?
  • 学习编程和操作系统有多难?找到已经知道的人有多难?
  • 您是否可以从旧系统逐步迁移到新系统,还是只能在大爆炸中迁移?

该领域有许多解决方案,但它们都不是针对所有问题的一站式开箱即用解决方案。一些是面向批处理的(如Spring Batch或Java Batch),另一些是面向消息的(如Akka或Hystrix)。比较它们本身就是一门科学。它们有很多力量或者反复使用它们,你在这里得不到完美的答案,即使你提供了很多细节,比如峰值工作数,步数,外部系统调用次数等等。我一次又一次地看到它:如果您确切了解业务工作流程,那么可以更轻松地更换技术......这是一个先决条件。

然后我建议您使用不同的解决方案(如果您有时间),或者留在原地......它可能不是所有可能解决方案中最糟糕的解决方案。不要......而且我的意思是: Don&#t> 实施另一个"轻量级"你可以打赌的东西,赢得了非常轻巧的#34;比你想象的要快得多。

最后一件事:我与传统的BPM框架分享您的感受,即BPEL和朋友。但是像Camunda BPM这样的轻量级和开源框架值得一看。