如何在ColdFusion中建模业务工作流?

如何在ColdFusion中建模业务工作流?,coldfusion,workflow,business-process-management,workflow-engine,Coldfusion,Workflow,Business Process Management,Workflow Engine,由于ColdFusion中目前还没有完整的BPM框架/解决方案,您如何将工作流建模为易于扩展和维护的ColdFusion应用程序 业务工作流不仅仅是一个流程图,它可以很好地映射到编程语言中。例如: 您如何对一个任务X建模,该任务X后面是并行发生的多个任务Y0、Y1、Y2,其中Y0是一个人工过程(需要等待输入),Y1是一个可能出错并需要自动重试的web服务,Y2是一个自动过程;然后是一个任务Z,该任务只应在所有Y完成时执行 我的想法 似乎我需要做大量的存储/管理/保管工作 跟踪状态,并经常使用c

由于ColdFusion中目前还没有完整的BPM框架/解决方案,您如何将工作流建模为易于扩展和维护的ColdFusion应用程序

业务工作流不仅仅是一个流程图,它可以很好地映射到编程语言中。例如:

您如何对一个任务X建模,该任务X后面是并行发生的多个任务Y0、Y1、Y2,其中Y0是一个人工过程(需要等待输入),Y1是一个可能出错并需要自动重试的web服务,Y2是一个自动过程;然后是一个任务Z,该任务只应在所有Y完成时执行

我的想法

  • 似乎我需要做大量的存储/管理/保管工作 跟踪状态,并经常使用
    cfscheuler
    进行检查
  • cfthread
    不会有多大帮助,因为有些任务可能需要几天的时间 (例如,等待用户确认)
  • 我已经可以想象到,流将在多个UDF中传播, DB和CFC
  • 是否有其他语言的开源工作流引擎可以移植到CF

谢谢你的智慧。:)

我脑子里想的是一个状态持久化到数据库的问题。请查看该公司的口香糖机示例

一般来说,如果您的某些东西(如客户/订单等)经历了许多状态变化,这将起作用

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

就其他语言而言,我知道Grails有一个可用的方法。我不知道移植到CF或者直接跳到Grails(适合这项工作的工具)是否会更好

这只是一个想法,希望能有所帮助

研究地点。使用这个基于Java的引擎可能是您最简单的解决方案,它解决了您概述的许多问题

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

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

在ColdFusion的上下文中,如果您正在编写的系统需要轮询其他系统,则可能需要执行计划任务。将WDDX视为序列化格式。JSON虽然非常简单,但我记得在数字和日期方面有一些边缘案例,可能会让你感到悲伤


.

谢谢。关于JPDL,是否可以在JPDL中定义进程,然后从CF和CF服务器中调用JBoss执行引擎?@Henry:没有尝试过-在学习JPDL后编写了我自己的执行引擎-但应该是可能的。@oranagepips您编写了自己的执行引擎吗?在寒冷中?哇!我猜你不打算开源吧?你有什么建议可以分享吗?感谢you@oranagepips为什么在有更广泛支持的BPEL标准的情况下使用JPDL?@Henry:关于BPEL,请相信这是专门针对SOAP/RESTful接口的:。另外,另一种可能性是Activiti: