通过“orchestration”我假设你的意思是finite state machine。当前状态决定了其他国家可以遵循的转换。状态和转换表示为边和顶点通常产生一个directed acyclic graph,但有时图表将循环(例如,草稿 - 提交批准 - >待批准 - 拒绝 - >草稿)。
实际上,将定义与执行分离需要一个可以轻松适应定制的持久性格式。随着系统的发展,您会发现一些意想不到的边缘案例,其解决方案不应该要求更改持久性架构,而只需修改代码。这意味着XML或NoSQL解决方案 - 其模式很容易被更改或不存在的东西。
现在,为了这个目的我写了自己的XML定义(为了不起眼的原因,我将排除),我的建议是使用JPDL(或BPMN)。理由是,他们的定义可能包含您现在正在考虑的任何事情,未来将会实现,并支持定制 - 例如在给定时刻悬挂任意数据或行为。您还可以获得已经构建的工具(不仅仅是UI)的优势,例如用于处理周期检测并确保完成路径。
我知道JPDL拥有的一些有趣功能是能够帮助合并分叉进程,定时任务(包括定期重复的任务)和发送通知的设施。这最后一个项目 - 通知 - 进一步阐述。我用自己的系统发现的一件事情是需要发送可配置的电子邮件,其内容基于流经的数据。这些现有的引擎通过提供一种方式将变量插入到文本中,然后在传输之前在运行时进行动态评估,从而使这些引擎相对容易。他们还在引擎和任何用户存储之间提供桥梁,以便将通知发送给群组,分配任务并执行安全策略。
最后,根据系统的范围,您可能仍会使用数据库。我建议将XML和正在编排的数据以串行格式存储到数据库中。然后,如果数据在执行过程中发生更改,请将数据的串行化(也可能是工作流程,如果它也发生更改)写入历史/审计日志表中。
+1你刚刚确认了我已经做出的决定,即使用BPMN 2.0作为序列化格式。你可以让我知道你是否创建了自己的用于编排歌曲的用户界面或使用过Oryx。我需要一个可嵌入的业务流程用户界面。我希望它是可嵌入的,因为我想用特定领域的任务和主题对其进行定制 – 2011-01-27 17:30:17