﻿<?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-jeffy-随笔分类-Workflow</title><link>http://www.blogjava.net/jeffy/category/6851.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 06:50:43 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 06:50:43 GMT</pubDate><ttl>60</ttl><item><title>WBISF来构建面向服务的业务流程－相关参考url</title><link>http://www.blogjava.net/jeffy/archive/2006/06/27/55246.html</link><dc:creator>Live-in Java</dc:creator><author>Live-in Java</author><pubDate>Mon, 26 Jun 2006 16:08:00 GMT</pubDate><guid>http://www.blogjava.net/jeffy/archive/2006/06/27/55246.html</guid><wfw:comment>http://www.blogjava.net/jeffy/comments/55246.html</wfw:comment><comments>http://www.blogjava.net/jeffy/archive/2006/06/27/55246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jeffy/comments/commentRss/55246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jeffy/services/trackbacks/55246.html</trackback:ping><description><![CDATA[
		<h1>
				<font color="#000000" size="2">
						<a class="l" onmousedown="return clk(0,'','','res','1','')" href="http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0502_butt/0502_butt.html" target="_blank">
								<font color="#cc0033">长期运行的BPEL 流程中staff 动作的程序化控制</font>
						</a> (有例子，web调用)</font>
		</h1>
		<p>
				<a href="http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0502_butt/0502_butt.html#download">http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0502_butt/0502_butt.html#download</a>
				<br />
				<br />
				<a class="l" onmousedown="return clk(0,'','','res','14','')" href="http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0508_simmons/0508_simmons.html" target="_blank">
						<font color="#551a8b">通过WebSphere </font>
						<font color="#cc0033">Process Choreographer</font>
						<font color="#551a8b">使用设计模式实现工作流，第1 部分</font>
				</a>
				<br />
				<a href="http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0508_simmons/0508_simmons.html">http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0508_simmons/0508_simmons.html</a>
				<br />
		</p>
		<h1>
				<font color="#000000" size="2">基于表单的技术与业务流程整合</font>
		</h1>
		<p>
				<a href="http://www.mywelt.net/?q=node/1571">http://www.mywelt.net/?q=node/1571</a>
				<br />
				<br />
				<strong>使用 WebSphere 工具开发业务流程门户应用程序</strong>  （protal整合流程）<br /><a href="http://www.chinaitpower.com/2005September/2005-09-09/191760.html">http://www.chinaitpower.com/2005September/2005-09-09/191760.html</a></p>
		<h1>
				<font color="#000000" size="2">使用 Process Choreographer 5.1 对 BPEL 流程进行增强的审核日志数据分析和查询</font>
		</h1>
		<h1>
				<font color="#000000" size="2">
						<a href="http://www.chinakb.net/html/31/7425.html">http://www.chinakb.net/html/31/7425.html</a>
				</font>
		</h1>
		<h1>
				<font color="#000000" size="2">BPEL中的用户解析技术剖析  <a href="http://www-128.ibm.com/developerworks/cn/webservices/ws-userresolution/index.html?ca=dwcn-newsletter-webservices">http://www-128.ibm.com/developerworks/cn/webservices/ws-userresolution/index.html?ca=dwcn-newsletter-webservices</a></font>
		</h1>
		<p>
				<br />IBM WebSphere Process Server V6  <a href="http://blog.china-pub.com/more.asp?name=jiangsukid&amp;id=32620">http://blog.china-pub.com/more.asp?name=jiangsukid&amp;id=32620</a><br /><br /><a href="http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0512_zhangyu/index.html">http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0512_zhangyu/index.html</a><br /><a href="http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0512_zhangyu/index2.html">http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0512_zhangyu/index2.html</a><br /><br /><a href="http://www-128.ibm.com/developerworks/cn/webservices/">http://www-128.ibm.com/developerworks/cn/webservices/</a><br /><br />长期运行的 BPEL 流程中 staff 动作的程序化控制<br /><br /><font face="Verdana"><font style="BACKGROUND-COLOR: #ffffff" color="#ff1493">IBM® WebSphere® Business Integration Server Foundation's</font> Process Choreographer <br /></font><br /><font color="#676e04">IBM的业务流程建模</font><br /><font face="宋体"><strong>WBI Modeler，</strong><font face="Verdana">WebSphere Business Integration Modeler  </font><strong>它的核心流程元素有五个，控制流，子流程，规则，角色，OTMPS场景的度量<br /><span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt">创建模型首先要定义流程元</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></strong></font></p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 27.0pt; mso-pagination: widow-orphan" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol; mso-bidi-font-size: 9.0pt; mso-font-kerning: 0pt; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol">
						<span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">控制流</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 27.0pt; mso-pagination: widow-orphan" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol; mso-bidi-font-size: 9.0pt; mso-font-kerning: 0pt; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol">
						<span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">子流程</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 27.0pt; mso-pagination: widow-orphan" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol; mso-bidi-font-size: 9.0pt; mso-font-kerning: 0pt; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol">
						<span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">策略</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 27pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 27.0pt; mso-pagination: widow-orphan" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Symbol; mso-bidi-font-size: 9.0pt; mso-font-kerning: 0pt; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol">
						<span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">度量</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
						<br />
						<span style="FONT-SIZE: 9pt; COLOR: black; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">
								<font face="å®‹ä½“">
										<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">所以我们应从下面这些来开始描述建模方法：</span>
								</font>
						</span>
						<br />
				</span>
		</p>
		<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; COLOR: black; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt; mso-pagination: widow-orphan">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">标识和列出任务，就是指的用例，</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">每项任务说明包含输入、输出和完成该任务所需的资源。</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</li>
		<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; COLOR: black; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt; mso-pagination: widow-orphan">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">任务排序，当然就是指用例的执行顺序</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</li>
		<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; COLOR: black; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt; mso-pagination: widow-orphan">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">任务之间控制流的创建</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
				</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">，业务流的走向，它包括数据流和控制流</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</li>
		<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; COLOR: black; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt; mso-pagination: widow-orphan">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">流程里面数据的引入</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
				</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">，应该是指</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">data repository</span>
				<font size="3">
						<span lang="EN-US" style="COLOR: windowtext">,</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
								<o:p>
								</o:p>
						</span>
				</font>
		</li>
		<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; COLOR: black; LINE-HEIGHT: 14.25pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt; mso-pagination: widow-orphan">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">流程模型内部服务的集成</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-font-kerning: 0pt">
						<span lang="EN-US">
								<span style="mso-spacerun: yes">  </span>web service integration</span>
				</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial">，这个有点不懂，还待研究。</span>
				<o:p>
				</o:p>
		</li>
<img src ="http://www.blogjava.net/jeffy/aggbug/55246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jeffy/" target="_blank">Live-in Java</a> 2006-06-27 00:08 <a href="http://www.blogjava.net/jeffy/archive/2006/06/27/55246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>osworkflow核心概念 (转载)</title><link>http://www.blogjava.net/jeffy/archive/2006/03/02/33160.html</link><dc:creator>Live-in Java</dc:creator><author>Live-in Java</author><pubDate>Thu, 02 Mar 2006 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/jeffy/archive/2006/03/02/33160.html</guid><wfw:comment>http://www.blogjava.net/jeffy/comments/33160.html</wfw:comment><comments>http://www.blogjava.net/jeffy/archive/2006/03/02/33160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jeffy/comments/commentRss/33160.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jeffy/services/trackbacks/33160.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在osworkflow中最最核心的东西就是工作流定义的xml文件。尽管它并不是一定要定义成xml文件。但是xml格式是一种标准的通用的格式。OSWorkflow引擎只负责了“流程的运转”，当然这个运转会根据你所定义的Action和condtion来判断。这个xml文件为某一个给定的工作流进行描述steps、states，transitions，和functionality。下面阐述一下此xml...&nbsp;&nbsp;<a href='http://www.blogjava.net/jeffy/archive/2006/03/02/33160.html'>阅读全文</a><img src ="http://www.blogjava.net/jeffy/aggbug/33160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jeffy/" target="_blank">Live-in Java</a> 2006-03-02 11:48 <a href="http://www.blogjava.net/jeffy/archive/2006/03/02/33160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>osworkflow相关URL</title><link>http://www.blogjava.net/jeffy/archive/2006/03/02/33133.html</link><dc:creator>Live-in Java</dc:creator><author>Live-in Java</author><pubDate>Thu, 02 Mar 2006 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/jeffy/archive/2006/03/02/33133.html</guid><wfw:comment>http://www.blogjava.net/jeffy/comments/33133.html</wfw:comment><comments>http://www.blogjava.net/jeffy/archive/2006/03/02/33133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jeffy/comments/commentRss/33133.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jeffy/services/trackbacks/33133.html</trackback:ping><description><![CDATA[
		<p>银狐999：<a href="http://blog.csdn.net/james999/archive/2004/10/29/158653.aspx">http://blog.csdn.net/james999/archive/2004/10/29/158653.aspx</a><br />gigix:          <a href="http://gigix.blogdriver.com/gigix/113138.html">http://gigix.blogdriver.com/gigix/113138.html</a>   <br /><a href="http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=12#4_1_2">http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=12#4_1_2</a></p>
<img src ="http://www.blogjava.net/jeffy/aggbug/33133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jeffy/" target="_blank">Live-in Java</a> 2006-03-02 10:12 <a href="http://www.blogjava.net/jeffy/archive/2006/03/02/33133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSWorkflow 介绍 （转载）</title><link>http://www.blogjava.net/jeffy/archive/2006/03/01/32973.html</link><dc:creator>Live-in Java</dc:creator><author>Live-in Java</author><pubDate>Wed, 01 Mar 2006 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/jeffy/archive/2006/03/01/32973.html</guid><wfw:comment>http://www.blogjava.net/jeffy/comments/32973.html</wfw:comment><comments>http://www.blogjava.net/jeffy/archive/2006/03/01/32973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jeffy/comments/commentRss/32973.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jeffy/services/trackbacks/32973.html</trackback:ping><description><![CDATA[<P><STRONG><FONT size=2>前 言&nbsp;&nbsp;&nbsp; </FONT><A href="http://www.365key.com/gluttony/%E5%B7%A5%E4%BD%9C%E6%B5%81/"><FONT size=2>http://www.365key.com/gluttony/%E5%B7%A5%E4%BD%9C%E6%B5%81/</FONT></A></STRONG></P>
<P><FONT size=2>&nbsp;&nbsp;&nbsp; 本文没有抛出可运行的范例，仅仅是程序片断而已，不过在 OSWorkflow 的 Wiki 上，Quake Wang 已把官方入门教程完整地翻译成中文了，有兴趣的读者可去阅读。关于 OSWorkflow 更加细节性的内容，可参考官方手册，相信你在了解了入门教程后，可轻松阅读官方手册。<BR>&nbsp;&nbsp;&nbsp; <BR><STRONG>OSWorkflow 概念</STRONG></FONT></P>
<P><FONT size=2>&nbsp;&nbsp;&nbsp; 在商用和开源世界里，OSWorkflow 都不同于这些已有的工作流系统。最大不同在于 OSWorkflow 有着非常优秀的灵活性。在开始接触 OSWorkflow 时可能较难掌握（有人说不适合工作流新手入门），比如，OSWorkflow 不要求图形化工具来开发工作流，而推荐手工编写 xml 格式的工作流程描述符。它能为应用程序开发者提供集成，也能与现有的代码和数据库进行集成。这一切似乎给正在寻找快速“即插即用”工作流解决方案的人制造了麻烦，但研究发现，那些“即插即用”方案也不能在一个成熟的应用程序中提供足够的灵活性来实现所有需求。<BR>&nbsp;&nbsp;&nbsp; <BR><STRONG>OSWorkflow 优势</STRONG></FONT></P>
<P><FONT size=2>&nbsp;&nbsp;&nbsp; OSWorkflow 给你绝对的灵活性。OSWorkflow 被认为是一种“低级别”工作流实现。与其他工作流系统能用图标表现“loops(回路)”和“conditions(条件)”相比，OSWorkflow 只是手工“编码(coded)”来实现的。但这并不能说实际的代码是需要完全手工编码的，脚本语言能胜任这种情形。OSWorkflow 不希望一个非技术用户修改工作流程，虽然一些其他工作流系统提供了简单的 GUI 用于工作流编辑，但像这样改变工作流，通常会破坏这些应用。所以，进行工作流调整的最佳人选是开发人员，他们知道该怎么改变。不过，在最新的版本中，OSWorkflow 也提供了 GUI 设计器来协助工作流的编辑。</FONT></P>
<P><FONT size=2>&nbsp;&nbsp;&nbsp; OSWorkflow 基于有限状态机概念。每个 state 由 step ID 和 status 联合表现（可简单理解为 step 及其 status 表示有限状态机的 state）。一个 state 到另一 state 的 transition 依赖于 action 的发生，在工作流生命期内有至少一个或多个活动的 state。这些简单概念展现了 OSWorkflow 引擎的核心思想，并允许一个简单 XML 文件解释工作流业务流程。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2><STRONG>OSWorkflow 核心概念</STRONG><BR>&nbsp;&nbsp;&nbsp; <BR></FONT><FONT size=2><STRONG>step（步骤）<BR></STRONG>&nbsp;&nbsp;&nbsp; 一个 step 是工作流所处的位置。可能从一个 step 流转到另外一个 step（或者有时候还是停留在一样的 step）。举例来说，一个 OA 系统的请假流程，它的 step 名称可能有“本部门审批阶段”，“办公室审批阶段”，“总经理审批阶段”等。<BR>&nbsp;<BR></FONT><FONT size=2><STRONG>status（状态）<BR></STRONG>&nbsp;&nbsp;&nbsp; 工作流 status 是一个用来描述工作流程中具体步骤状态的字符串。OSWorkflow 的有 Underway（进行中）、Queued（等候处理中）、Finished（完成）三种 status。<BR>&nbsp;<BR></FONT><FONT size=2><STRONG>action（动作）<BR></STRONG>&nbsp;&nbsp;&nbsp; action 指定了可能发生在 step 内的转变，会导致 step 的变更。在 OA 系统中，“本部门审批阶段”可能有“拒绝”或“批准”两个 action。action 和 step 之间的关系是，step 说明“在哪里”，action 说明“可以去哪里”。 一个 action 典型地由两部分组成：可以执行此动作的 condition（条件），以及执行此动作的 result（结果）。<BR>&nbsp;<BR><STRONG>condition（条件）</STRONG><BR>&nbsp;&nbsp;&nbsp; 类似于逻辑判断，可包含“AND”和“OR”逻辑。比如一个请假流程中的“本部门审批阶段”，该阶段利用“AND”逻辑，判断流程状态是否为等候处理中，以及审批者是否为本部门主管。<BR>&nbsp;&nbsp;&nbsp; <BR><STRONG>result（结果）</STRONG><BR>&nbsp;&nbsp;&nbsp; Result 代表指向新的 step 及其 step status，也可能进入 split 或者 join。Result 分为两种， contidional-result （有条件结果），只有条件为真时才使用该结果，和 unconditional-result（无条件结果），当条件不满足或没有条件时使用该结果。</FONT></P>
<P><FONT size=2><STRONG>split/join（分离/连接）</STRONG><BR>流程的切分和融合。很简单的概念，split 提供多个 result；join 则判断多个 current step 的状态，提供一个 result。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2><STRONG>OSWorkflow 包用途分析及代码片断</STRONG><BR>&nbsp;&nbsp;&nbsp; <BR><STRONG>com.opensymphony.workflow</STRONG> <BR>&nbsp;&nbsp;&nbsp; 该包为整个 OSWorkflow 引擎提供核心接口。例如 com.opensymphony.workflow.Workflow 接口，可以说，实际开发中的大部分工作都是围绕该接口展开的，该接口有 BasicWorkflow、EJBWorkflow、OfbizWorkflow 三个实现类。</FONT></P>
<P><FONT size=2><STRONG>com.opensymphony.workflow.basic <BR></STRONG>&nbsp;&nbsp;&nbsp; 该包有两个类，BasicWorkflow 与 BasicWorkflowContext。BasicWorkflow 不支持事务，尽管依赖持久实现，事务也不能包裹它。BasicWorkflowContext 在实际开发中很少使用。</FONT></P>
<P>
<TABLE style="WIDTH: 417px; HEIGHT: 54px" cellSpacing=1 cellPadding=1 width=417 border=1>
<TBODY>
<TR>
<TD><FONT size=2>&nbsp;&nbsp;public void setWorkflow(int userId) {<BR>&nbsp;&nbsp;Workflow workflow = new BasicWorkflow(Integer.toString(userId));<BR>&nbsp;}</FONT></TD></TR></TBODY></TABLE></P>
<P><FONT size=2><STRONG>com.opensymphony.workflow.config</STRONG><BR>&nbsp;&nbsp;&nbsp; 该包有一个接口和两个该接口的实现类。在 OSWorkflow 2.7 以前，状态由多个地方的静态字段维护，这种方式很方便，但是有很多缺陷和约束。最主要的缺点是无法通过不同配置运行多个 OSWorkflow 实例。实现类 DefaultConfiguration 用于一般的配置文件载入。而 SpringConfiguration 则是让 Spring 容器管理配置信息。</FONT></P>
<P>
<TABLE style="WIDTH: 418px; HEIGHT: 23px" cellSpacing=1 cellPadding=1 width=418 border=1>
<TBODY>
<TR>
<TD><FONT size=2>&nbsp;&nbsp;public void setConfiguration(SpringConfiguration configuration) {<BR>&nbsp;&nbsp;SpringConfiguration configuration = configuration;<BR>workflow.setConfiguration(configuration);<BR>&nbsp;}</FONT></TD></TR></TBODY></TABLE></P>
<P><FONT size=2><STRONG>com.opensymphony.workflow.ejb <BR></STRONG>&nbsp;&nbsp;&nbsp; 该包有两个接口 WorkflowHome 和 WorkflowRemote。该包的若干类中，最重要的是 EJBWorkflow，该类和 BasicWorkflow 的作用一样，是 OSWorkflow 的核心，并利用 EJB 容器管理事务，也作为工作流 session bean 的包装器。</FONT></P>
<P><FONT size=2><STRONG>com.opensymphony.workflow.loader</STRONG> <BR>&nbsp;&nbsp;&nbsp; 该包有若干类，用得最多的是 XxxxDescriptor，如果在工作流引擎运行时需要了解指定的动作、步骤的状态、名字，等信息时，这些描述符会起到很大作用。</FONT></P>
<P>
<TABLE style="WIDTH: 418px; HEIGHT: 23px" cellSpacing=1 cellPadding=1 width=418 border=1>
<TBODY>
<TR>
<TD><FONT size=2>&nbsp;&nbsp;public String findNameByStepId(int stepId,String wfName) {<BR>&nbsp;&nbsp;WorkflowDescriptor wd = workflow.getWorkflowDescriptor(wfName);<BR>&nbsp;&nbsp;StepDescriptor stepDes = wd.getStep(stepId);<BR>&nbsp;&nbsp;return stepDes.getName();<BR>&nbsp;}</FONT></TD></TR></TBODY></TABLE></P>
<P><FONT size=2><STRONG>com.opensymphony.workflow.ofbiz <BR></STRONG>&nbsp;&nbsp;&nbsp; OfbizWorkflow 和 BasicWorkflow 在很多方面非常相似，除了需要调用 ofbiz 的 TransactionUtil 来包装事务。</FONT></P>
<P><FONT size=2><STRONG>com.opensymphony.workflow.query</STRONG> <BR>&nbsp;&nbsp;&nbsp; 该包主要为查询而设计，但不是所有的工作流存储都支持查询。通常，Hibernate 和 JDBC 都支持，而内存工作流存储不支持。值得注意的是 Hibernate 存储不支持混合型查询（例如，一个查询同时包含了 history step 上下文和 current step 上下文）。执行一个查询，需要创建 WorkflowExpressionQuery 实例，接着调用 Workflow 对象的 query 方法来得到最终查询结果。</FONT></P>
<P>
<TABLE style="WIDTH: 419px; HEIGHT: 23px" cellSpacing=1 cellPadding=1 width=419 border=1>
<TBODY>
<TR>
<TD>
<P><FONT size=2>&nbsp;&nbsp;public List queryDepAdmin(int userId,int type) {<BR>&nbsp;&nbsp;int[] arr = getSubPerson(userId,type);</FONT></P>
<P><FONT size=2>&nbsp;&nbsp;//构造表达式<BR>&nbsp;&nbsp;Expression[] expressions = new Expression[1 + arr.length];<BR>&nbsp;&nbsp;Expression expStatus = new FieldExpression(FieldExpression.STATUS,<BR>&nbsp;&nbsp;&nbsp;&nbsp;FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS, "Queued");<BR>&nbsp;&nbsp;expressions[0] = expStatus;</FONT></P>
<P><FONT size=2>&nbsp;&nbsp;for (int i = 0; i &lt; arr.length; i++) {<BR>&nbsp;&nbsp;&nbsp;Expression expOwner = new FieldExpression(FieldExpression.OWNER,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer.toString(arr[i]));<BR>&nbsp;&nbsp;&nbsp;expressions[i + 1] = expOwner;<BR>&nbsp;&nbsp;}</FONT></P>
<P><FONT size=2>&nbsp;&nbsp;//查询未完成流编号<BR>&nbsp;&nbsp;List wfIdList = null;<BR>&nbsp;&nbsp;try {<BR>&nbsp;&nbsp;&nbsp;WorkflowExpressionQuery query = new WorkflowExpressionQuery(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new NestedExpression(expressions, NestedExpression.AND));<BR>&nbsp;&nbsp;&nbsp;wfIdList = workflow.query(query);<BR>&nbsp;&nbsp;} catch (Exception e) {<BR>&nbsp;&nbsp;&nbsp;e.printStackTrace();<BR>&nbsp;&nbsp;}</FONT></P></TD></TR></TBODY></TABLE><BR><FONT size=2><STRONG>com.opensymphony.workflow.soap</STRONG> <BR>&nbsp;&nbsp;&nbsp; OSWorkflow 通过 SOAP 来支持远端调用。这种调用借助 WebMethods 实现。</FONT></P>
<P><FONT size=2><STRONG>com.opensymphony.workflow.spi <BR></STRONG>&nbsp;&nbsp;&nbsp; 该包可以说是 OSWorkflow 与持久层打交道的途径，如当前工作流的实体，其中包括：EJB、Hibernate、JDBC、Memory、Ofbiz、OJB、Prevayler。</FONT></P>
<P>
<TABLE style="WIDTH: 422px; HEIGHT: 23px" cellSpacing=1 cellPadding=1 width=422 border=1>
<TBODY>
<TR>
<TD><FONT size=2>&nbsp;&nbsp;HibernateWorkflowEntry hwfe = (HibernateWorkflowEntry) getHibernateTemplate()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.find("from HibernateWorkflowEntry where Id="<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ wfIdList.get(i)).get(0);</FONT></TD></TR></TBODY></TABLE></P>
<P><FONT size=2><STRONG>com.opensymphony.workflow.util</STRONG> <BR>该包是 OSWorkflow 的工具包，包括了对 BeanShell、BSF、EJB Local、EJB Remote、JNDI 的支持。</FONT></P>
<P><FONT size=2></FONT></P>
<P><FONT size=2></FONT></P>
<P><STRONG><FONT size=2>小 结</FONT></STRONG></P>
<P><FONT size=2>&nbsp;&nbsp;&nbsp; 由于本人所在公司希望在 OA 系统中引入工作流引擎，经过分析决定采用 OSWorkflow 引擎。利用 OSWorkflow，已经在系统中实现了请假条流程原型，该流程结合 OA 系统中已有的 RBAC 模型进行逐级审核。我个人认为要用 OSWorkflow 让某个流程跑起来似乎很麻烦，主要是需要扩展和自己实现的太多。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 另外，引用一段 Quake Wang 的原话：电子政务/OA 如果要使用workflow engine的话，shark，jbpm 之类的workflow engine有点杀鸡用牛刀的味道。shark 和 jbpm 都强迫你使用它的用户模型，怎样把企业现有的用户模型（包括组织结构）映射过来是很繁琐的事情，比如常见的 OA 应用中，申请者对应的部门负责人为下一个流程的人工参与者，使用 shark 或者 jbpm 都得绕一圈，通过现有的人力资源系统，获得用户，再对应过来。这还仅仅是一个简单的需求，更不用说国内企业千奇百怪的组织结构，以及各种特殊流程，用 wfmc 或者其他所谓的 workflow 通用标准去做不怎么标准的事情。吃力不讨好。用 osworkflow 这种基于状态机的 workflow engine 反而会轻松很多，而且它也没有强迫你使用它的用户模型。另外纠正一点：osworkflow 不仅仅支持简单的 BeanShell，还支持 java class，bsf，ejb。如果做电子政务/OA 的话，觉得目前 osworkflow 是最适用的 opensource workflow engine。<BR><FONT color=#ff0000><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</STRONG><FONT size=3><STRONG><FONT color=#ff1493> （申明：本文来源于网络，摘录于此，仅为日后方便查看）</STRONG></FONT></FONT></FONT></FONT></P><img src ="http://www.blogjava.net/jeffy/aggbug/32973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jeffy/" target="_blank">Live-in Java</a> 2006-03-01 10:37 <a href="http://www.blogjava.net/jeffy/archive/2006/03/01/32973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>osworkflow tutorial - chinese </title><link>http://www.blogjava.net/jeffy/archive/2006/02/26/32497.html</link><dc:creator>Live-in Java</dc:creator><author>Live-in Java</author><pubDate>Sun, 26 Feb 2006 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/jeffy/archive/2006/02/26/32497.html</guid><wfw:comment>http://www.blogjava.net/jeffy/comments/32497.html</wfw:comment><comments>http://www.blogjava.net/jeffy/archive/2006/02/26/32497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jeffy/comments/commentRss/32497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jeffy/services/trackbacks/32497.html</trackback:ping><description><![CDATA[<SPAN class=pagetitle style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; TEXT-DECORATION: none"><STRONG>osworkflow tutorial - chinese <BR></STRONG></SPAN><A href="http://wiki.opensymphony.com/display/WF/Tutorial+-+Chinese"><BR>http://wiki.opensymphony.com/display/WF/Tutorial+-+Chinese</A><img src ="http://www.blogjava.net/jeffy/aggbug/32497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jeffy/" target="_blank">Live-in Java</a> 2006-02-26 16:16 <a href="http://www.blogjava.net/jeffy/archive/2006/02/26/32497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>