﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-每日一得-随笔分类-workflow</title><link>http://www.blogjava.net/alex/category/14020.html</link><description>不求多得,只求一得
about java,hibernate,spring,design,database,linux,etc.
&lt;br/&gt;&lt;br/&gt;
最近关心的内容关键字:web快速开发方案，建模,workshop studio,Ajax
</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 14:56:15 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 14:56:15 GMT</pubDate><ttl>60</ttl><item><title>[zt]OSWorkflow的使用举例</title><link>http://www.blogjava.net/alex/archive/2006/08/15/63715.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Tue, 15 Aug 2006 08:25:00 GMT</pubDate><guid>http://www.blogjava.net/alex/archive/2006/08/15/63715.html</guid><wfw:comment>http://www.blogjava.net/alex/comments/63715.html</wfw:comment><comments>http://www.blogjava.net/alex/archive/2006/08/15/63715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alex/comments/commentRss/63715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alex/services/trackbacks/63715.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: OSWorkflow的第一支程式																																						(史帝芬, 2005/6/4, hi.steven@gmail.com)																																																	自從C的聖經版以Hello World程式開始引導初學者學習程式語言以來，...&nbsp;&nbsp;<a href='http://www.blogjava.net/alex/archive/2006/08/15/63715.html'>阅读全文</a><img src ="http://www.blogjava.net/alex/aggbug/63715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alex/" target="_blank">Alex</a> 2006-08-15 16:25 <a href="http://www.blogjava.net/alex/archive/2006/08/15/63715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]工作流管理系统概述</title><link>http://www.blogjava.net/alex/archive/2006/08/11/63071.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Fri, 11 Aug 2006 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/alex/archive/2006/08/11/63071.html</guid><wfw:comment>http://www.blogjava.net/alex/comments/63071.html</wfw:comment><comments>http://www.blogjava.net/alex/archive/2006/08/11/63071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alex/comments/commentRss/63071.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alex/services/trackbacks/63071.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.25pt; text-indent: -21.25pt; line-height: 150%;">
						<b style="">
								<span style="font-size: 14pt; line-height: 150%;" lang="EN-US">
										<span style="">一.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 14pt; line-height: 150%; font-family: 宋体;">概述</span>
						</b>
						<b style="">
								<span style="font-size: 14pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.25pt; line-height: 150%;">
						<span style="font-family: 宋体;">企
业在进行业务处理时，政府在进行公文审批时，都是以流程形式而进行的，在信息化的过程中，企业、政府也将这些业务处理、公文审批的过程信息化了，早期通常
是通过程序硬编码的方式来处理这些业务、公文的流转，随着业务、公文的复杂的处理情况不断出现以及需求的不断变更，这种硬编码的方式显然已无法应对，这个
时候工作流管理系统应运而生，掀起了一股工作流管理系统的热潮。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; line-height: 150%;">
						<span style="font-family: 宋体;">那么到底工作流管理系统能够带来什么好处？工作流管理系统通过对业务、公文流转进行分析以及抽象，将不变和变化的部分进行划分，用户可轻松的通过可视化的工具对事项的流程、流程环节涉及的人员</span>
						<span lang="EN-US">(</span>
						<span style="font-family: 宋体;">角色</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">、流程环节的表单、流程环节的操作进行修改，从而到达了应对不断变化的需求的目的，而工作流管理系统通常提供的流程监控、查询统计模块更是极大程度的为用户优化流程提供支持，以提高企业、政府的工作效率。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; line-height: 150%;">
						<span style="font-family: 宋体;">本文主要描述工作流管理系统通常的结构、参考模型以及通常使用的调度算法。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.25pt; text-indent: -21.25pt; line-height: 150%;">
						<b style="">
								<span style="font-size: 14pt; line-height: 150%;" lang="EN-US">
										<span style="">二.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 14pt; line-height: 150%; font-family: 宋体;">构成</span>
						</b>
						<b style="">
								<span style="font-size: 14pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.25pt; line-height: 150%;">
						<span style="font-family: 宋体;">工作流管理系统，简称</span>
						<span lang="EN-US">WFMS</span>
						<span style="font-family: 宋体;">，
经过对业务、公文流转过程的分析以及抽象，工作流管理系统围绕业务交互逻辑、业务处理逻辑以及参与者三个问题进行解决，业务交互逻辑对应的为业务的流转过
程，在工作流管理系统中对应的提出了工作流引擎、工作流设计器、流程操作来解决业务交互逻辑的问题，业务处理逻辑对应业务流转过程中的表单、文档等的处
理，在工作流管理系统中对应的提出了表单设计器、与表单的集成来解决业务处理逻辑的问题，参与者对应到的为流转过程中环节对应的人或程序，在工作流管理系
统中通过与应用程序的集成来解决参与者的问题。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.25pt; line-height: 150%;">
						<span style="font-family: 宋体;">工作流管理系统为方便业务交互逻辑、业务处理逻辑以及参与者的修改，多数通过提供可视化的流程设计器以及表单设计器来实现，为实现工作流管理系统的扩展性，多数提供了一系列的</span>
						<span lang="EN-US">API</span>
						<span style="font-family: 宋体;">。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.25pt; line-height: 150%;">
						<span style="font-family: 宋体;">一个完整的工作流管理系统通常由工作流引擎、工作流设计器、流程操作、工作流客户端程序、流程监控、表单设计器、与表单的集成以及与应用程序的集成八个部分组成。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">2.1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">工作流引擎</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">工
作流引擎作为工作流管理系统的核心部分，主要提供了对于工作流定义的解析以及流程流转的支持。工作流定义文件描述了业务的交互逻辑，工作流引擎通过解析此
工作流定义文件按照业务的交互逻辑进行业务的流转，工作流引擎通常通过参考某种模型来进行设计，通过调度算法来进行流程的流转</span>
						<span lang="EN-US">(</span>
						<span style="font-family: 宋体;">流程的启动、终止、挂起、恢复等</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">，通过各种环节调度算法</span>
						<span lang="EN-US">(SPLIT</span>
						<span style="font-family: 宋体;">、</span>
						<span lang="EN-US">AND</span>
						<span style="font-family: 宋体;">、</span>
						<span lang="EN-US">OR</span>
						<span style="font-family: 宋体;">等</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">来实现对于环节的流转</span>
						<span lang="EN-US">(</span>
						<span style="font-family: 宋体;">环节的合并、分叉、选择、条件性的选择等</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">2.2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">工作流设计器</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">工作流设计器为可视化的流程设计工具，用户通过拖放等方式来绘制流程，并通过对于环节的配置来实现环节操作、环节表单、环节参与者的配置。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">工作流设计器为用户以及开发商提供了快速绘制、修改流程的方式，工作流设计器的好坏决定到工作流管理系统的易用性。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">2.3.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">流程操作</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">流程操作指所支持的对于流程环节的操作，如启动流程、终止流程、挂起流程、直流、分流</span>
						<span lang="EN-US">(</span>
						<span style="font-family: 宋体;">单人办理</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">、并流</span>
						<span lang="EN-US">(</span>
						<span style="font-family: 宋体;">多人同时办理</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">、联审等，象这些流程操作都是可直接基于引擎所提供的环节调度算法来直接支持的，而在实际的需求中，通常需要自由的对于流程进行干涉，如取回、回退、跳转、追加、传阅、传阅办理等，而这些流程操作对于工作流引擎来说是不合理的，因此必须单独的去实现。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">流程操作支持的好坏直接决定到一个工作流管理系统的实用性。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">2.4.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">工作流客户端程序</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">工作流客户端程序为工作流系统的表现形式，通常使用</span>
						<span lang="EN-US">Web</span>
						<span style="font-family: 宋体;">方式进行展现，通过提供待办列表、已办列表、执行流程操作、查看流程历史信息等来展现工作流系统的功能。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">2.5.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">流程监控</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">流程监控通过提供图形化的方式来对流程执行过程进行监控，包括流程运转状况，每个环节所耗费的时间等等，而通过这些可相应的进行流程的优化，以提高工作效率。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">2.6.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">表单设计器</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">表单设计器为可视化的表单设计工具，用户通过拖放的方式来绘制业务所需的表单，并可相应的进行表单数据的绑定。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">表单设计器为客户以及开发商提供了快速修改表单的方法，表单设计器的易用与否以及功能的完善与否影响到工作流管理系统的易用性。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">2.7.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">与表单的集成</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">通常业务流转需要表单来表达实际的业务，因此需要与表单进行集成来实现业务意义，与表单的集成通常包括表单数据的自动获取、存储、修改，表单域的权限控制、流程相关数据的维护以及流程环节表单的绑定。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">与表单的集成的好坏影响到工作流管理系统是否能提高开发效率。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">2.8.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">与应用程序的集成</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; line-height: 150%;">
						<span style="font-family: 宋体;">通过与应用程序的集成来完善工作流管理系统的业务意义，主要涉及到的是与权限系统以及组织机构的集成。流程环节需要相应的绑定不同的执行角色，而流程操作通常需要与权限系统、组织机构进行关联。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.25pt; text-indent: -21.25pt; line-height: 150%;">
						<b style="">
								<span style="font-size: 14pt; line-height: 150%;" lang="EN-US">
										<span style="">三.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 14pt; line-height: 150%; font-family: 宋体;">参考模型</span>
						</b>
						<b style="">
								<span style="font-size: 14pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.25pt; line-height: 150%;">
						<span style="font-family: 宋体;">工作流系统通常通过参考一些标准的模型来进行设计，主要的有</span>
						<span lang="EN-US">WFMC</span>
						<span style="font-family: 宋体;">和</span>
						<span lang="EN-US">OMG</span>
						<span style="font-family: 宋体;">，在这里主要介绍一下</span>
						<span lang="EN-US">WFMC</span>
						<span style="font-family: 宋体;">。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">3.1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">WFMC<o:p></o:p></span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; line-height: 150%;">
						<span lang="EN-US">WFMC</span>
						<span style="font-family: 宋体;">是国际工作流管理联盟，它于</span>
						<span lang="EN-US">1993</span>
						<span style="font-family: 宋体;">年成立，发布了一系列的工作流定义、软件接口的草案文本，是目前世界上公认的最具权威性的工作流标准制定机构，得到了广泛的支持和应用。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; line-height: 150%;">
						<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="25" month="10" year="2002">
								<span lang="EN-US">2002</span>
								<span style="font-family: 宋体;">年</span>
								<span lang="EN-US">10</span>
								<span style="font-family: 宋体;">月</span>
								<span lang="EN-US">25</span>
								<span style="font-family: 宋体;">日</span>
						</st1:chsdate>
						<span style="font-family: 宋体;">，</span>
						<span lang="EN-US">WFMC</span>
						<span style="font-family: 宋体;">发布了基于</span>
						<span lang="EN-US">XML</span>
						<span style="font-family: 宋体;">的流程定义语言</span>
						<span lang="EN-US">1.0</span>
						<span style="font-family: 宋体;">版的最终文本（</span>
						<span lang="EN-US">Workflow Process Definition Interface----XML Process Definition Language  </span>
						<span style="font-family: 宋体;">文档编号：</span>
						<span lang="EN-US">WFMC-TC-1025</span>
						<span style="font-family: 宋体;">），以及此前发布的工作流应用软件接口规范</span>
						<span lang="EN-US">WFMC-TC-1009, WFMC-TC-1013</span>
						<span style="font-family: 宋体;">等系列文件，构成了工作流定义及系统的设计标准。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; line-height: 150%;">
						<span style="font-family: 宋体;">为了实现不同工作流产品之间的互操作，</span>
						<span lang="EN-US">WfMC</span>
						<span style="font-family: 宋体;">在
工作流管理系统的相关术语、体系结构及应用编程接口等方面制定了一系列标准。工作流管理联盟给出的工作流定义是：工作流是指整个或部分经营过程在计算机支
持下的全自动或半自动化。在实际情况中可以更广泛地把凡是由计算机软件系统（工作流管理系统）控制其执行的过程都称为工作流。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; line-height: 150%;">
						<span style="font-family: 宋体;">一
个工作流包括一组活动及它们的相互顺序关系，还包括过程及活动的启动和终止条件，以及对每个活动的描述。工作流管理系统指运行在一个或多个工作流引擎上用
于定义、实现和管理工作流运行的一套软件系统，它与工作流执行者（人、应用）交互，推进工作流实例的执行，并监控工作流的运行状态。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; line-height: 150%;">
						<span lang="EN-US">WFMC</span>
						<span style="font-family: 宋体;">主要提出了五个接口与工作流执行服务一起共同组成了工作流系统：</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 48pt; text-indent: -21pt; line-height: 150%;">
						<span style="font-family: Wingdings;" lang="EN-US">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">         </span></span>
						</span>
						<span style="font-family: 宋体;">接口一</span>
						<span lang="EN-US">(</span>
						<span style="font-family: 宋体;">工作流定义交换</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">，用于在建模和定义工具与执行服务之间交换工作流定义。主要是数据交换格式和</span>
						<span lang="EN-US">API</span>
						<span style="font-family: 宋体;">。数据交换通过</span>
						<span lang="EN-US">XPDL</span>
						<span style="font-family: 宋体;">，</span>
						<span lang="EN-US">API</span>
						<span style="font-family: 宋体;">通过</span>
						<span lang="EN-US">WAPI</span>
						<span style="font-family: 宋体;">。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 48pt; text-indent: -21pt; line-height: 150%;">
						<span style="font-family: Wingdings;" lang="EN-US">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">         </span></span>
						</span>
						<span style="font-family: 宋体;">接口二</span>
						<span lang="EN-US">(</span>
						<span style="font-family: 宋体;">工作流客户端应用接口</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">，用于工作流客户端应用访问工作流引擎和工作列表，通过</span>
						<span lang="EN-US">WAPI</span>
						<span style="font-family: 宋体;">完成。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 48pt; text-indent: -21pt; line-height: 150%;">
						<span style="font-family: Wingdings;" lang="EN-US">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">         </span></span>
						</span>
						<span style="font-family: 宋体;">接口三</span>
						<span lang="EN-US">(</span>
						<span style="font-family: 宋体;">被调用的应用接口</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">，用于调用不同的应用系统。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 48pt; text-indent: -21pt; line-height: 150%;">
						<span style="font-family: Wingdings;" lang="EN-US">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">         </span></span>
						</span>
						<span style="font-family: 宋体;">接口四</span>
						<span lang="EN-US">(</span>
						<span style="font-family: 宋体;">工作流系统互操作接口</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">，用于不同工作流系统之间的互操作。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 48pt; text-indent: -21pt; line-height: 150%;">
						<span style="font-family: Wingdings;" lang="EN-US">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">         </span></span>
						</span>
						<span style="font-family: 宋体;">接口五</span>
						<span lang="EN-US">(</span>
						<span style="font-family: 宋体;">系统管理和监控</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">，用于系统管理应用访问工作流执行服务。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.25pt; text-indent: -21.25pt; line-height: 150%;">
						<b style="">
								<span style="font-size: 14pt; line-height: 150%;" lang="EN-US">
										<span style="">四.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 14pt; line-height: 150%; font-family: 宋体;">核心调度算法</span>
						</b>
						<b style="">
								<span style="font-size: 14pt; line-height: 150%;" lang="EN-US">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21.25pt; line-height: 150%;">
						<span style="font-family: 宋体;">通常流程引擎采用的核心调度算法主要有</span>
						<span lang="EN-US">FSM</span>
						<span style="font-family: 宋体;">以及</span>
						<span lang="EN-US">PetriNet</span>
						<span style="font-family: 宋体;">两种，基于调度算法来完成流程的流转。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">4.1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">FSM(</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">有限状态机</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">)<o:p></o:p></span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; line-height: 150%;">
						<span lang="EN-US">FSM</span>
						<span style="font-family: 宋体;">的定义为包含一组状态集（</span>
						<span lang="EN-US">states</span>
						<span style="font-family: 宋体;">）、一个起始状态（</span>
						<span lang="EN-US">start state</span>
						<span style="font-family: 宋体;">）、一组输入符号集（</span>
						<span lang="EN-US">alphabet</span>
						<span style="font-family: 宋体;">）、一个映射输入符号和当前状态到下一状态的转换函数（</span>
						<span lang="EN-US">transition function</span>
						<span style="font-family: 宋体;">）的计算模型。当输入符号串，模型随即进入起始状态。它要改变到新的状态，依赖于转换函数。在有限状态机中，会有有许多变量，例如，状态机有很多与动作（</span>
						<span lang="EN-US">actions</span>
						<span style="font-family: 宋体;">）转换</span>
						<span lang="EN-US">(Mealy</span>
						<span style="font-family: 宋体;">机</span>
						<span lang="EN-US">)</span>
						<span style="font-family: 宋体;">或状态（摩尔机）关联的动作，多重起始状态，基于没有输入符号的转换，或者指定符号和状态（非定有限状态机）的多个转换，指派给接收状态（识别者）的一个或多个状态，等等。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; line-height: 150%;">
						<span style="font-family: 宋体;">遵循</span>
						<span lang="EN-US">FSM</span>
						<span style="font-family: 宋体;">流程引擎通过状态的切换来完成流程的流转。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 1cm; text-indent: -1cm; line-height: 150%;">
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">
										<span style="">4.2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">       </span></span>
								</span>
						</b>
						<b style="">
								<span style="font-size: 12pt; line-height: 150%;" lang="EN-US">PetriNet<o:p></o:p></span>
						</b>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; line-height: 150%;">
						<span style="font-family: 宋体;">信息流的一个抽象的、形式的模型。指出一系统的静态和动态性质。</span>
						<span lang="EN-US">petrinet</span>
						<span style="font-family: 宋体;">通常表示成图。图中有两类用弧彼此相连的结点（称为地点和变换）和指示其动态性能的标记（称为记号）。</span>
				</p>
				<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; line-height: 150%;">
						<span style="font-family: 宋体;">遵循</span>
						<span lang="EN-US">PetriNet</span>
						<span style="font-family: 宋体;">流程引擎通过令牌来决定流程的流转。</span>
				</p>
		</div>
<img src ="http://www.blogjava.net/alex/aggbug/63071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alex/" target="_blank">Alex</a> 2006-08-11 18:26 <a href="http://www.blogjava.net/alex/archive/2006/08/11/63071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]工作流大局势</title><link>http://www.blogjava.net/alex/archive/2006/08/11/63070.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Fri, 11 Aug 2006 10:25:00 GMT</pubDate><guid>http://www.blogjava.net/alex/archive/2006/08/11/63070.html</guid><wfw:comment>http://www.blogjava.net/alex/comments/63070.html</wfw:comment><comments>http://www.blogjava.net/alex/archive/2006/08/11/63070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alex/comments/commentRss/63070.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alex/services/trackbacks/63070.html</trackback:ping><description><![CDATA[
		<b>1. 从奴隶社会到封建后期</b>
		<br />
		<br />工作流(WorkFlow)的概念是在现代信息系统的建设中逐步形成的，它有一个从局部到整体、从初级到高级、从简单到复杂、从奴隶社会到封建盛世的发展过程，按其发展历程，我们一般把它分为三个阶段:<br /><br /><b>﹡ EDF(电子数据流)阶段</b><br /><br />EDF(电子数据流)阶段是工作流的奴隶社会阶段。此时的工作流在信息技术中的应用,仅着眼于利用信息技术减轻人们在流程中的计算强度,如设计一个流程用来协调多个会计统计帐目。所以,EDF最主要的特点是仅对企业单项业务进行处理,基本不涉及管理的内容。<br /><br /><b>﹡ TPF(事务处理流)阶段</b><br /><br />TPF(事务处理流)阶段是工作流的封建初期。TPF并没有形成对企业的全局业务的管理,而着眼于对企业局部业务的管理,比如,设计一套工作流程,来管理物资的采购和供应。<br /><br /><b>﹡ IMF(信息管理流)阶段</b><br /><br />当
今的工作流已经发展到封建后期-------IMF(信息管理流)阶段,
IMF强调对企业业务的全局的整体性的管理。在这个阶段,工作流就是为了完成同一目标而相互衔接、自动进行的一系列业务活动或任务。目前,工作流技术与信
息技术以及企业管理紧密结合,已经悄悄渗入MIS系统、ERP系统和CRM系统等企业级关键系统中,并迅速成为这些系统的核心。在这个阶段,保皇派工作流
经历了大发展,革新派工作流也风涌而现。<br /><br /><b>2. 保皇派与革新派</b><br /><br />与其它信息技术相比,工作流技术属于较新的
一个,
它现在仍处于标准的制定阶段,目前已有的标准按采用的技术分为两大派别,第一派是保皇派,基于纯XML技术;第二派是革新派,基于Web服务技术。保皇派
与革新派打得难分难解,所以,现在仍有一些工作流引擎没有采用任何标准而独立实现,也就是说,它们不依靠保皇派,也不依靠革新派。<br /><br /><b>2.1 保皇派分支</b><br /><br /><b>﹡ XPDL（Xml Process Definition Language）</b><br /><br />XPDL
是保皇派最得人心的一派,因为它是太子。在工作流领域第一个致力于标准化工作的是Workflow Management Coalition
(WfMC)，它成立于1993年。1994年11月，wfmc发布了工作流管理系统的参考模型。参考模型提出了五类接口，有关过程模型的定义则构成了接
口一的核心内容。接口一早期的标准为WPDL（Workflow Process Definition
Language），后来,这一接口的规范变更为XPDL。XPDL是至今工作流领域最为重要的一个标准,目前大多数工作流引擎是依据该标准设计开发的。<br /><br /><b>﹡ BPML(Business Process Model Language)</b><br /><br />因为对太子派的工作方式不满意，BPMI发布BPML规范,成立新的八爷党。由于八爷党发展的非常之快，WfMC和BPMI在2002年6月26日宣布将合作制定业务流程和工作流标准，即采用BPML来描述工作流过程，同时采用XPDL所定义的工作流模型。<br /><br /><b>﹡ OMG的Workflow Management Facility</b><br /><br />四
爷OMG是支持太子的,不过四爷这个人很有报负,在其他领域也做的有声有色。四爷OMG的Workflow Management
Facility联合太子的WfMC规范，定义如何将工作流向CORBA转换---要知道,
CORBA可是四爷的强项。现在很多老百姓支持四爷OMG的Workflow Management
Facility。四爷这招,发展了自己的势力,又不惹太子生气,真是妙啊!<br /><br />保皇派其它分支势力很小,这里就不多说了。<br /><br /><b>2.2 革新派分支</b><br /><br /><b>﹡ WSCI</b><br /><br />2002
年6月26日，BEA,Intalio,SAP,Sun四家公司提出了基于xml的WSCI规范，推动Web服务进入了一个全新的阶段。这个规范主要描述
了一个参与和其它服务进行协作交互的Web服务所交换的消息流。WSCI是第一个革新派,后来又发展了几个新的革新派,<br /><br />如WSFL(属IBM),Xlang(属MS),因有天生缺陷,均没有很大起色。<br /><br /><b>﹡ ebXML</b><br /><br />ebXML
是一组支持模块化电子商务框架的规范。ebXML支持一个全球化的电子市场，它使得任意规模的企业通过交换基于XML的信息，不受地域限制地接洽和处理生
意。ebXML是联合国（UN/CEFACT，贸易促进和电子商务中心）和OASIS（结构化信息标准发展组织）共同倡导、全球参与开发和使用的规范。由
于现在老百姓都不喜欢抬着羊去换米,而喜欢在网上来个B2C,所以革新派ebXML最近发展很快。<br /><br /><b>﹡ BPEL</b><br /><br />2002
年8月9日，Microsoft, BEA, IBM, SAP &amp; Siebel联合提交发布了BPEL规范。
BPEL联合了一系列革新派/保皇派力量（ XLANG, WSFL,
BPML）。此规范描述如何处理输入的消息，它不是一个关于业务流程规格化定义的规范。简单的说，可以将它看作XML形式的编程语言，提供将WSDL-
Services组合成控制流的能力。顾名思义，此规范重点在（也不只限于）Web Service。<br /><br />还有其它的革新派如RosettaNet等，因为势力很小,这里也不多说了。<br /><br /><b>3. 大户人家</b><br /><br />这里所谈的大户人家指工作流领域的商业软件供应商，他们都背靠靠山,或穷或富。我们这里按地区来划分他们。<br /><br /><b>3.1中国之外的大户</b><br /><br />﹡ BEA 的WLI<br /><br />﹡ Fujitsu的 i-Flow<br /><br />﹡ IBM的 Holosofx<br /><br />﹡ SAP 的NetWeaver<br /><br />﹡ Sonic 的Orchestration Server<br /><br />﹡ Ultimus<br /><br />﹡ Versata<br /><br />这些人家大都非常富有;如果需要,请自己搜索他们的信息。<br /><br /><b>3.2国内的大户人家</b><br /><br />﹡ 信雅达的SunFlow 这个公司留给我的印象很好,包括他们的总经理石总。<br /><br />﹡ 西安协同的协同工作流<br /><br />﹡ 上海东兰的DLFlo<br /><br />这里对公司就不多介绍了,否则有做广告的嫌疑J。本人有国内工作流产品的比较报告,大家需要可以给我发邮件索取。<br /><br /><b>4. 寒门傲骨</b><br /><br />这里的寒门傲骨指的是开源工作流引擎的实现，寒门子弟也是有政治取向的,我们还是按保皇派和革新派来区分他们，而自由派指没有按固定的标准来实现的工作流门派。<br /><br /><b>4.1保皇派寒门</b><br /><br />﹡ OFBiz<br /><br />OFBiz
最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具。其中包括实体引擎, 服务引擎, 消息引擎, 工作流引擎,
规则引擎等。OFBiz先前的工作流引擎基于WfMC和OMG的规范，使用XPDL作为流程定义语言,也就是说,它是支持太子XPDL的,而且和十三爷
OMG的关系非常之好。OFBiz新版的工作流引擎采用Shark工作流引擎,我们不建议再去学习OFBiz自身的工作流引擎。<br /><br />﹡ OBE<br /><br />OBE
是由Adrian
Price主持开发的一个开放源码的Java工作流引擎，支持WfMC规范，包括接口1（XPDL）、接口2/3（WAPI）和接口5。OBE主要基于
J2EE实现。OBE的接口1实现得非常好,可惜,OBE的载体公司Zaplet已经于前不久被合并，合并后的公司没有继续发展OBE的打算。
Adrian
Price离开了原来的公司,投奔我们前面说过的大户Versata。Versata也不打算继续OBE。OBE至今没有release版，很是可惜。<br /><br />﹡ Shark<br /><br />Shark
是完全根据WFMC规范实施的，可扩展功能的工作流引擎，它利用xpdl来定义流程，同时还包括服务器端的用于活动节点执行的WFMC工具代理API。
Shark中的每个组件例如持久层，事物管理器，脚本引擎，流程库，都是可以按照标准实施运用的，而且还可以被具体项目的模块扩展和替换。Shark和
XPDL定义工具的事实标准JAWE同出名门,市场前景被很多人看好。OFBiz新版的工作流引擎采用Shark工作流引擎，OBE的载体公司
Zaplet被合并，对Shark的发展将很有利。2004年9月9日，shark发布1.0版本,对它的发展无疑是一剂强心针。笔者从Shark发展的
早期就在国内力推它,有幸成为Shark工作流引擎在国内的主要推广者之一(http://blog.csdn.net/hongbo781202/),
感到十分荣幸。Shark的讨论请看http://211.95.124.238:22/cgi-bin/forums.cgi?forum=24。<br /><br /><b>4.2 革新派寒门</b><br /><br />﹡ OpenebXML<br /><br />OpenebXML项目致力于提供一个ebXML框架，主要支持 UN/CEFACT和OASIS发布的ebXML规范2.0版。<br /><br />﹡ Bonita<br /><br />Bonita是一个符合WfMC规范、灵活的协同工作流系统。Bonita基于浏览器、使用SOAP和XML数据绑定技术的Web Services封装了已有的工作流业务方法并将它们以基于J2EE的Web Service形式发布。<br /><br />﹡ Twister<br /><br />Twister的目标是提供新一代、易集成、应用Java领域中最新成果、面向B2B的工作流解决方案。流程引擎基于BPEL业务流程规范和Web Service标准。<br /><br />﹡ ActiveBpel<br /><br />ActiveBPEL
引擎是一个于今年7月发布的健壮的运行时环境,它能执行用户按BPWL4WS规范编写的业务流程。ActiveBPEL引擎由Active
Endpoints公司开发和维护,该公司同时在它的多个商业产品中使用了该技术。本人将密切观注ActiveBPEL引擎的技术发展和产品状态。<br /><br /><b>4.3 自由派寒门</b><br /><br />﹡ OSWorkflow<br /><br />OSWorkflow的最大特点是灵活<br /><br />﹡ OpenWFE<br /><br />OpenWFE是一个开放源码的Java工作流引擎。 它的思想来源于 Scheme，包括可升级的三个组件：引擎、工作列表和Web界面。<br /><br />﹡jBpm<br /><br />jBpm
是tom
baeyens编写的一个灵活可扩展的工作流管理系统。jBmp将工作流应用开发的便利性和杰出的企业应用集成（EAI）能力结合了起来。jBmp包括一
个Web应用程序和一个日程安排程序。jBmp是一组J2SE组件，可以作为J2EE应用集群部署。国内目前有部分人研究jBpm。<br /><br /><b>5 大局势</b><br /><br />目前是封建社会后期，以太子党XPDL为首的保皇派还将辉煌一段时间。我个人认为，在Ofbiz投靠Shark，强势派OBE倒台，自由派不得人心的情况下，Shark工作流引擎依靠与XPDL定义工具JAWE的兄弟关系，将坐上保皇派头把交椅。<br /><br />目
前，革新派和保皇派的争夺并不激烈。因为在现在的情况下,
革新派的根基Web服务并不劳靠，在老百姓中的影响不太大，所以革新派只求从保皇派嘴边分口食就行了。但随着社会的发展,
Web服务将越来越流行，现在，MS/IBM/BEA等跨国巨头越来越主推BPEL4WS标准，并且已经发布基于BPEL4WS标准的系列产品，而且，他
们还主推Integration/Portal的概念，这些概念将把工作流带入资本主义阶段。<img src ="http://www.blogjava.net/alex/aggbug/63070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alex/" target="_blank">Alex</a> 2006-08-11 18:25 <a href="http://www.blogjava.net/alex/archive/2006/08/11/63070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]利用osworkflow实现业务流程</title><link>http://www.blogjava.net/alex/archive/2006/08/11/63068.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Fri, 11 Aug 2006 10:16:00 GMT</pubDate><guid>http://www.blogjava.net/alex/archive/2006/08/11/63068.html</guid><wfw:comment>http://www.blogjava.net/alex/comments/63068.html</wfw:comment><comments>http://www.blogjava.net/alex/archive/2006/08/11/63068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alex/comments/commentRss/63068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alex/services/trackbacks/63068.html</trackback:ping><description><![CDATA[
		<span id="LblContent">Osworkflow完全用java语言编写的开放源代码的工作流引擎，具有显著的灵活性及完全面向有技术
背景的用户的特点。用户可以根据自身的需求利用这款开源软件设计简单或是复杂的工作流。通过使用，用户就可以把工作中心放在业务和规则的定义上，而不需通
过硬编码的方式实现一个Petri网或是一个有穷自动机。用户可以以最小的代价把osworkflow整合到自己的程序中来。Osworkflow几乎提
供了所有用户可能在实际流程定义中需要用到的工作流构成元素，如：环节（step）、条件（conditions）、循环（loops）、分支
（spilts）、合并（joins）、角色（roles）等等。(假如读者对这些概念还不熟悉，笔者将在Osworkflow基本概念一节中进行简单描
述。)<br /><br />但是，这款开源软件的文档十分匮乏，而且在大多数现实情形中并不适用。本文将尝试为读者填平实际的用例需求与十分简单的说明文档间的鸿沟。<br /><br />用户可以在OpenSymphony的网站上下载osworkflow的发布。当前的最高版本是2.7（译者注：最新版本为2.8）. 解压缩发布的软件包，即得到二进制程序、源代码、API文档、说明文档等。用户可以在软件的论坛和维基上获得进一步的帮助。<br /><br /><span style="color: Red;">版权声明：任何获得Matrix授权的网站，转载时请务必保留以下作者信息和链接</span><br />作者:Diego Naya;<a href="http://www.matrix.org.cn/user.shtml?username=bugaboo" target="_new">bugaboo</a>(作者的blog:<a href="http://blog.matrix.org.cn/page/bugaboo" target="_new">http://blog.matrix.org.cn/page/bugaboo</a>)<br />Matrix原文:<a href="http://www.matrix.org.cn/resource/article/44/44467_osworkflow.html" target="_new">http://www.matrix.org.cn/resource/article/44/44467_osworkflow.html</a><br />关键字:osworkflow;business<br /><br /><b><span style="font-size: 16px;">什么是工作流？</span></b><br /><br />维基百科（Wikipedia，WP）把工作流定义为“一份工作的操作过程”：任务如何组成、如何操作、相关顺序如何、如何同步、信息如何流动以支持这些任务、以及任务如何被跟踪等。<br />一个工作流引擎实现了业务的流程处理。用户应可以自动跟踪过程，这将使得引擎更具效率。同时用户可以对工作流进行建模，监控及统计引擎数据等。<br /><br /><b><span style="font-size: 16px;">示例业务过程：贷款程序</span></b><br /><br />本
文的示例业务过程研究一个贷款应用程序的实例。我们将通过一个利用osworkflow工作流引擎的工作流来实现它。这个过程会在每家银行及金融机构中出
现, 其区别仅仅体现为有更过的部门或更多地文档需要处理. 在本示例中,
我们会用尽量简单的方法来实现这个业务流程以便于用户理解。图一描述了这个业务流程<br /><br /><img src="http://www.matrix.org.cn/resource/upload/article/2006_06_06_193824_vFZNBvFgtP.jpg" alt="image" style="display: inline;" onmouseover="javascript:imgShowTip(this);" onload="javascript:imgLoad(this);" onclick="javascript:imgClick(this);" border="0" /><br />图一 贷款业务流程<br /><br />过程非常简单，分为如下4步，如下所示：<br />1）        填写表格：银行客户填写表格申请贷款。<br />2）        风险分析：一位风险分析家评估不良贷款的风险。<br />3）        财务历史审查：财务管理官员负责检查客户历史贷款、应付账单、信用卡历史纪录等信息。<br />4）        最终决定（同意/拒绝）：银行部门主管根据风险分析情况及财务历史审查情况最终决定是否贷款给该客户。<br /><br />正如我们之前看到的，每个工作流都包含角色，每个角色都包含被分配的任务。下文说明了业务流程中涉及到的角色：<br />1）        前台职员：在某个银行部门向顾客提供信贷申请表的雇员。<br />2）        财务官员：负责检查申请者历史财务情况（往期贷款、未支付帐单等等）的职员。<br />3）        风险分析家：负责分析将钱给予借贷申请者的外部因素（比如社会经济情况等）及借贷者本人的个人情况。<br />4）        银行部门经理：负责最终决定是否给予借贷者贷款的经理。<br />请记住，“信贷申请表”是一个重要的概念（我们将在系统实现一节看到其重要性）因为它是流经整个工作流的业务数据。<br /><br /><b><span style="font-size: 16px;">基本工作流概念</span></b><br /><br />笔者在开篇曾介绍osworkflow提供了一些特有的构造，现在笔者将逐一介绍它们。<br /><br />首
先，在osworkflow中读者需要了解得最重要的概念是环节，每个工作流包含了多个环节，读者可以把环节想象成工作流中每一个重要的活动。每个环节可
以有一些诸如“已完成”、“正在处理”、“已添加至处理队列”、“未处理”等的状态，设计工作流的人可以根据需要自己定义状态。<br /><br />在每个环节，动作被用户指定为自动或手动地执行。每个动作执行后，都有一个结果（result）。结果决定了工作流的流转方向：可以停留在同一环节，跳转到另一环节，跳转到一个分支，或者汇集到一个合并等。<br />最后两个概念涉及用户对业务流程的并发执行，分支把工作流分解为两个并行的环节，合并则在用户满足一定条件后，把两个并行的环节合并成一个。<br /><br />动
作的执行代表了业务流程的执行，每个动作都有一组预处理功能（pre-functions）和一组后处理功能（post-functions）。其作用正
如读者想象的那样，一个在动作触发之前执行，一个在动作触发之后执行。一个简单的例子是：可以在预处理功能中检验申请表格数据的正确性，而后在后处理贡功
能中把经检验的数据保存至数据库。<br /><br />动作的执行结果可以是有条件的（conditional）或无条件的（unconditional）。
对于有条件的结果，引擎将首先检查是否条件被满足，然后再交给工作流来处理。如果条件不满足的话，引擎将进一步判断下一个有条件结果是否得到满足，以此类
推，直到系统最终执行到无条件结果进行处理。<br /><br />读者可能会问，如果所有的条件结果都没有得到满足会如何呢？事实上，每个动作都强制要求具有唯一一个无条件结果。与此对应的，可以有多个有条件的结果。<br /><br />业务规则常常在最终结果中带有条件判断，比如，“如果申请来自于一个老客户，则流转到环节1”或者“如果当前系统的用户的角色是经理的话，直接流转道最后一个环节”。<br /><br />最
后一个重要的概念是步骤状态（process
state），在osworkflow中，当前步骤状态是所有当前环节状态的集合。读者可能会认为工作流在运行过程中只能有一个状态，但现实的情况是：因
为对分支和合并的支持，引擎能够做到对环节的并发控制，因此工作流的当前状态就可能出现：“等待风险分析及已核查财务历史”的情况。<br />激活动作的用户被顺理成章地称为触发者（caller），每个环节都有一个所有者（owner），以代表在当前环节中负责执行动作的角色或用户。<br /><br />当用户在环节中运转流程的时候，已完成的环节被保存至历史表中（history），用户当前所处的环节成为当前环节（current steps）。<br /><br />最
后，读者可能注意到，在osworkflow中并不存在其他工作流引擎中所包含的工作项（workitem）的概念。这是因为osworkflow是“十
分底层”的工作流实现，怎样实现或定义工作项完全交由用户来决定。笔者认为工作项的概念太过抽象，用业务数据来称呼它或许更为贴切一些。<br /><br />Osworkflow
的文档中介绍了更多的构造元素，如寄存器（Registers），共用方法（common
functions）等，但笔者建议在建立好第一个工作流以后再去研究它们。它们是osworkflow基本元素外的高级特性，而我们前面所认识的元素则
是osworkflow的根本所在。<br /><br /><br /><b><span style="font-size: 16px;">Osworkflow体系结构</span></b><br /><br />我们将在本节分析控制osworkflow的体系结构，我们需要理解它是怎样适用到我们的程序中来的。如我们所猜想的，Osworkflow最主要的接口是Workflow，这个接口也是整个工作流引擎的入口点。是整个系统的门面（facade）。<br /><br />接口的实现主要关注具体的业务操作能力，这个接口定义了工作流查询，获取当前的可执行动作，执行动作，显示历史环节等。<br />工作流被持久化在工作流存储体（Workflow Store）中，osworkflow提供了几种持久化的方法，包括Hibernate持久化集成，JDBC持久化集成等。一个存储体包含了环节信息，变量，工作流自身的描述信息等等。<br /><br />用户可能遇到的最常见的应用模式如下所示：<br />1）通过给定的状态在工作流存储体中查询工作流信息，通常还根据某一个工作流程中具有需执行动作的用户来进行查询。这种查询时通过WorkflowQuery对象中的Workflow.query()方法实现的。<br />2）通过getAvailableActions()方法列出所有在满足条件查询结果中可执行的操作。<br />3）通过doAction()方法执行用户选择的动作。在执行动作的时候一些执行参数可以以java.util.Map的形式传递，以实现在工作流定义的运行期进行信息的传递。<br />4）用户可以有选择地通过调用initialize()实例化一个工作流。<br /><br />在理想情况下，由业务逻辑层负责调用osworkflow中的方法，如图二所示：<br /><br /><img src="http://www.matrix.org.cn/resource/upload/article/2006_06_06_193833_DCysYoRzdW.jpg" alt="image" style="display: inline;" onmouseover="javascript:imgShowTip(this);" onload="javascript:imgLoad(this);" onclick="javascript:imgClick(this);" border="0" /><br />图二 在业务逻辑中集成工作流<br /><br />在osworkflow
中，业务逻辑描述在一个XML文件中，称为工作流描述符（workflow
descriptor.）。我们将在实现小节中建立一个简单的描述符。在工作流描述符中的功能（functions）和条件（conditions）中，
用户可以定义自己的业务逻辑。笔者将在把工作流集成到应用程序中一节中进行论述。<br /><br /><b><span style="font-size: 16px;">实现</span></b><br /><br />本小节介绍如何把一个业务逻辑抽象成一个工作流。首先我们要在业务流程图中识别出工作流的环节。如图一所示，显然，我们共有四个环节，同时包含一个分支及一个合并。在下面的bank.xml文件中，读者将看到它们在描述符中是如何被表示的。<br /><br />建立好环节以后，必须在每个环节中添加一些动作以便于工作流运转。每个动作有唯一的无条件结果，条件结果由读者有选择地来实现。<br /><pre class="overflow">&lt;step id="1" name="Form Filling"&gt;<br /> &lt;actions&gt;<br />  &lt;action id="2" name="Fill Form"&gt;<br />   &lt;results&gt;<br />        &lt;unconditional-result old-status="Finished" split="1"/&gt;<br />   &lt;/results&gt;<br />  &lt;/action&gt;<br /> &lt;/actions&gt;<br />&lt;/step&gt;</pre><br /><br />接下来要并行地执行风险分析和财务历史核查，这里是放置分支的最理想地点。<br /><pre class="overflow">&lt;splits&gt;<br /> &lt;split id="1"&gt;<br />  &lt;unconditional-result old-status="Finished"<br />    status="Underway" owner="Risk Analyst" step="2"/&gt;<br />  &lt;unconditional-result old-status="Finished"<br />    status="Underway" owner="Financial Officer" step="3"/&gt;<br /> &lt;/split&gt;<br />&lt;/splits&gt;</pre><br /><br />在
部门经理最终确认以前，并发的工作流环节必须得到合并。我们可以通过应用一个合并（join）来实现它，合并通过一个条件告诉工作流引擎，是否可以合并并
进行到下一环节。在本例中，我们假设这个条件为：前面两个环节都已具有“Finished”的结束状态。即当风险分析或财务审核任何一个未完成前，不能进
行到下一步：<br /><pre class="overflow">&lt;joins&gt;<br /> &lt;join id="1"&gt;<br />  &lt;conditions type="AND"&gt;<br />   &lt;condition type="beanshell"&gt;<br />    &lt;arg name="script"&gt;&lt;![CDATA[<br />     "Finished".equals(jn.getStep(2).getStatus()) &amp;&amp;<br />        "Finished".equals(jn.getStep(3).getStatus())<br />      ]]&gt;&lt;/arg&gt;<br />    &lt;/condition&gt;<br />   &lt;/conditions&gt;<br />  &lt;unconditional-result old-status="Finished"<br />    status="Underway" owner="Manager" step="4"/&gt;<br /> &lt;/join&gt;<br />&lt;/joins&gt;</pre><br /><br />下面在描述符中加入每个环节的所有者，正如我们在基本概念一节看到的那样，所有者通常代表了环节间交互的角色，角色的引入默认情况下通过osuser框架来实现。<br />用户既可以手写XML描述符文件，也可以通过osworkflow提供的设计器来实现。读者可以在OpenSymphony的网站上试用这个工具。<br /><br /><b>测试实现</b><br />测试时，我们可以应用osworkflow提供的例子，把bank.xml放到WEB-INF/classes文件夹下，在文件workflows.xml中添加一行以使引擎能够识别这个工作流。<br /><br /><b>把工作流集成到应用程序</b><br /><br />在建模及测试工作流之后，我们即可以通过下面的几行代码把osworkflow集成到我们的程序中。<br /><pre class="overflow">orkflow wf = new BasicWorkflow(username); <br />HashMap inputs = new HashMap();<br />inputs.put("docTitle", request.getParameter("title"));<br />wf.initialize("workflowName", 1, inputs);</pre><br /><br />inputs
哈希表包含了初始工作流动作中需要传出的参数,有几个实现了Workflow接口的类，其中BasicWorkflow是不支持事务的简单实现。在工作流
执行过程中可以在流程中调用外部的方法，这种方法应该是实现了FunctionProvider接口的方法类。然后我们就可以用以下的方式调用它：<br /><br /><pre class="overflow">&lt;action id="1" name="Execute business rule"&gt;<br /> &lt;pre-functions&gt;<br />  &lt;function type="class"&gt;<br />   &lt;arg name="class.name"&gt;java.net.DroolsExecutorFunction&lt;/arg&gt;<br />   &lt;arg name="ruleBaseName"&gt;BusinessRules.drl&lt;/arg&gt;<br />  &lt;/function&gt;<br />&lt;/pre-functions&gt;<br />...</pre><br /><br />用户可以通过实现Condition接口，添加自己的条件控制。FunctionProvider及Condition接口可以调用工作流中的已知方法，这两个接口都可以接受来自于XML描述符文件中的参数。<br /><br /><b><span style="font-size: 16px;">结论</span></b><br /><br />把
一个业务流程抽象成一个工作流的任务并不容易，需要好的方法和合适的工具，osworkflow是一个为我们提供了许多可重用结构的理想工具。希望通过对
本文的阅读，读者能够理解最基本的osworkflow概念。本文论述过程中所采用的方法非常基础和简单，但却值得借鉴。</span>
<img src ="http://www.blogjava.net/alex/aggbug/63068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alex/" target="_blank">Alex</a> 2006-08-11 18:16 <a href="http://www.blogjava.net/alex/archive/2006/08/11/63068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>