2011-07-13 35 views
3

由于到目前为止ColdFusion中还没有完整的BPM框架/解决方案,您如何将工作流建模为可轻松扩展和维护的ColdFusion应用程序?如何在ColdFusion中建立业务工作流程模型?

商务工作流程更是那么好听映射到编程语言的流程图。例如:

你如何模拟一个任务X,它遵循并行发生的多个任务Y0,Y1,Y2,其中Y0是一个人类进程(需要等待输入),Y1是一个web服务,可能会出错并可能需要自动重试,而Y2是一个自动化过程;在任务Z完成后,只有当所有的Y完成时才执行任务Z?

我的想法......

  • 好像我需要做存储/管理/保持 跟踪状态,并与cfscheuler频繁检查了一大堆。
  • cfthread不会有太大帮助,因为某些任务可能需要几天的时间(例如等待用户的确认) 。
  • 我已经可以像流将要在多个UDF的四处传播, DB,和CFC
  • 在其他的语言,也许我们可以移植到任何CF开源工作流引擎?

谢谢你的智力。 :)

回答

1

研究Java Process Definition Language specification其中JBoss has an execution engine for it。使用这种基于Java的引擎可能是您最简单的解决方案,它解决了您列出的许多问题。

如果你打算自己写,你最终可能会在有向图中最终建模状态和转换,顶点和边。正如Ciaran Archer所写,这是State Machine的组件。最好的持久性方法IMO正在捕获通过序列化通过工作流发送的任何数据的版本,捕获当前状态以及状态之间的转换历史和对该数据的更改。该机制可能需要一种方式来跟踪对该工作流采取下一步行动的责任人或负责人。

根据您的问题,我们要考虑的是你是否真的不需要在您的解决方案来表示并行任务。相反,它可能会对一组消息进行排队,然后为所有这些消息指定一个等待状态来完成。表示实际并行性意味着您正在通过几个不同的进程同时移动数据。在这种情况下,当他们再次加入时,您需要一种算法来解决增量,这是非常重要的任务。

在ColdFusion和您正在尝试完成的环境中,如果您正在编写的系统需要轮询其他系统,则可能需要计划任务。将WDDX看作序列化格式。 JSON虽然诱人简单,但我记得有一些围绕数字和日期的边缘案例会导致你悲伤。

Finally see my answer to this question for some additional thoughts

+0

谢谢。关于JPDL,是否可以在JPDL中定义进程,然后从CF和CF服务器中调用JBoss执行引擎? – Henry

+0

@Henry:没有试过 - 在学习JPDL之后写下我自己的 - 但应该是可以的。 – orangepips

+0

@oranagepips你写了你自己的执行引擎?在ColdFusion中?哇。我猜你不打算开源吗?你可以分享的任何提示?谢谢 – Henry

1

关闭我的头顶我正在考虑State design pattern状态坚持到数据库。查看Head First Design Patterns的Gumball机器示例。

通常,这工作,如果你有东西(比如客户端/顺序/等)通过一些状态改变的打算。

根据您所处的状态,您的对象可能会发生不同的事情,这可能意味着坐在数据库表中等待用户手动更新标志。

在其他语言方面我知道的Grails有一个可用的workflow module。我不知道你是否会更好地移植到CF或跳槽到Grails(适合这项工作的所有工具)。

这只是一个想法,希望它有帮助。