第一篇:一步一步开发工作流引擎

工作流在企业开发中经常被使用,最近半年做了一个工作流程引擎,没商用,纯粹个人爱好。 最近半个月,就将半年的学习总结一下,和大家共享一下开发的乐趣。

希望不要太监, ~~

【工作流的概念】

【基本的工作流模式】

【常用的开源流程引擎介绍】

【基本架构】

 【自己来实现】

好,先抛砖引玉,贴一下流程模板

    AND 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:workflow name="Example_WorkFlow_XOR" type="MAIN"
	xmlns:ns2="http://www.donkey.com/workflow">
	<ns2:desc>这是一个测试流程生成的</ns2:desc>
	<ns2:end name="END" />
	<ns2:tache name="TACHE_A">
		<transition to="TACHE_AND_JOIN" desc="到合并节点" />
	</ns2:tache>
	<ns2:tache name="TACHE_B">
		<transition to="TACHE_AND_JOIN" desc="到合并节点" />
	</ns2:tache>
	<ns2:and_split name="TACHE_AND_SPLIT">
		<transition to="TACHE_A" desc="到普通环节TACHE_A" />
		<transition to="TACHE_B" desc="到普通环节TACHE_B" />
	</ns2:and_split>
	<ns2:and_join name="TACHE_AND_JOIN">
		<transition to="END" desc="节点-&gt;结束节点" />
	</ns2:and_join>
	<ns2:start name="START">
		<transition to="TACHE_AND_SPLIT" desc="开始-&gt;节点A" />
	</ns2:start>
	<ns2:version version="1.0" status="publish" desc="这个版本已经启用" />
	<ns2:template name="example">
		<ns2:category name="example">
			<ns2:parent name="root" />
		</ns2:category>
	</ns2:template>
</ns2:workflow>
 

  XOR <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<ns2:workflow name="Example_WorkFlow_XOR" type="MAIN"
	xmlns:ns2="http://www.donkey.com/workflow">
	<ns2:desc>这是一个测试流程生成的</ns2:desc>
	<ns2:end name="END" />
	<ns2:tache name="TACHE_A">
		<transition to="TACHE_XOR_JOIN" desc="到合并节点" />
	</ns2:tache>
	<ns2:tache name="TACHE_B">
		<transition to="TACHE_XOR_JOIN" desc="到合并节点" />
	</ns2:tache>
	<ns2:xor_split name="TACHE_XOR_SPLIT">
		<transition to="TACHE_A" desc="到普通环节TACHE_A">
			<ns2:condition type="SQL">
				<ns2:action>select count(1) from dual where 1 = :value</ns2:action>
				<ns2:param>
					<ns2:exp scope="INSTANCE" name="value" expression="value" />
				</ns2:param>
			</ns2:condition>
		</transition>
		<transition to="TACHE_B" desc="到普通环节TACHE_B" />
	</ns2:xor_split>
	<ns2:xor_join name="TACHE_XOR_JOIN">
		<transition to="TACHE_XOR_JOIN" desc="到合并节点" />
	</ns2:xor_join>
	<ns2:start name="START">
		<transition to="TACHE_XOR_SPLIT" desc="开始-&gt;节点A" />
	</ns2:start>
	<ns2:version version="1.0" status="publish" desc="这个版本已经启用" />
	<ns2:template name="example">
		<ns2:category name="example">
			<ns2:parent name="root" />
		</ns2:category>
	</ns2:template>
</ns2:workflow>
 

   LOOP 

   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<ns2:workflow name="Example_WorkFlow_XOR" type="MAIN"
	xmlns:ns2="http://www.donkey.com/workflow">
	<ns2:desc>这是一个测试流程生成的</ns2:desc>
	<ns2:end name="END" />
	<ns2:tache name="TACHE_A">
		<transition to="TACHE_XOR_JOIN" desc="到合并节点" default="false" />
	</ns2:tache>
	<ns2:tache name="TACHE_B">
		<transition to="TACHE_LOOP" desc="到合并节点" default="false" />
	</ns2:tache>
	<ns2:xor_split name="TACHE_XOR_SPLIT">
		<transition to="TACHE_A" desc="到普通环节TACHE_A" default="false">
			<ns2:condition type="SQL">
				<ns2:action>select count(1) from dual where 1 = :value</ns2:action>
				<ns2:param>
					<ns2:exp scope="INSTANCE" name="value" expression="value" />
				</ns2:param>
			</ns2:condition>
		</transition>
		<transition to="TACHE_B" desc="到普通环节TACHE_B" default="false" />
	</ns2:xor_split>
	<ns2:loop max="0" name="TACHE_LOOP">
		<transition to="TACHE_B" desc="循环节点-B" default="false">
			<ns2:condition type="SQL">
				<ns2:action>select count(1) from dual where 1 = :value</ns2:action>
				<ns2:param>
					<ns2:exp scope="INSTANCE" name="value" expression="value" />
				</ns2:param>
			</ns2:condition>
		</transition>
		<transition to="TACHE_XOR_JOIN" desc="循环节点-Xor_join"
			default="true" />
	</ns2:loop>
	<ns2:xor_join name="TACHE_XOR_JOIN">
		<transition to="END" desc="节点-&gt;结束节点" default="false" />
	</ns2:xor_join>
	<ns2:start name="START">
		<transition to="TACHE_XOR_SPLIT" desc="开始-&gt;节点A" default="false" />
	</ns2:start>
	<ns2:version version="1.0" status="publish" desc="这个版本已经启用" />
	<ns2:template name="example">
		<ns2:category name="example">
			<ns2:parent name="root" />
		</ns2:category>
	</ns2:template>
</ns2:workflow>
 

猜你喜欢

转载自smallsnake.iteye.com/blog/1734807