OSWorkflow源码学习
Osworkflow的源码还是很简单的,复杂的是xml的自定义工作流,整理一下自己看源码的总结。
Osworkflow的分层从它的包结构就可以看出来,主要分为workflow(主程序)、config(完成xml的解析)、loader(xml和descriptor的对应关系)、spi(dao层,操作底层数据)和query。
框架分析
如图,WorkflowFactory为Workflow的工厂类,但其实主要是针对工作流配置文件的解析和对workflow的操作。
AbstractDescriptor主要是将最后定义的工作流文件转换为对应的实体文件,各个*Descriptor代码xml中的一个元素,如<action>、<Condition>。这里虽说共同继承自AbstractDescriptor,但代码处理上还是针对各个具体的类进行操作的,面向接口的操作好像没怎么去实现。
Workflow为面向用户的接口,通过该接口可以创建工作流,WorkflowCOntext主要完成工作流的上下文,如用户名等,Configuration完成xml的解析工作。JDBCWorkflowStore完成对底层数据的操作,如生成工作流等什么的。
生成工作流的执行顺序
主要的流程是
WorkflowConfig里面是每一个xml文件的实例,工作流的配置对应的xml格式为,映射的文件WorkflowDescriptor.
<workflow>
<meta>
<registers>
<register/>
</registers>
<global-conditions>
<conditions>
</global-conditions>
<initial-actions>
<action>
</initial-actions>
<global-actions>
<action/>
</global-actions>
<common-actions>
<action/>
</common-actions>
<trigger-functions>
<trigger-function/>
</trigger-functions>
<steps>
<step name,id>
<meta name=/>
<pre-functions/>function
<external-permissions/>permission
<actions>
<action/>
<common-action/>
</actions>
<post-functions/>
</step>
</steps>
<splits>
<split>
</splits>
<joins>
<join>
</joins>
<workflow>