??xml version="1.0" encoding="utf-8" standalone="yes"?>
http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0502_butt/0502_butt.html#download
http://www.mywelt.net/?q=node/1571
·
控制?/span>
·
子流E?/span>
·
{略
·
度量
通过WebSphere
Process Choreographer
使用设计模式实现工作,W? 部分
http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0508_simmons/0508_simmons.html
Z表单的技术与业务程整合
使用 WebSphere 工具开发业务流E门户应用程?/strong> Qprotal整合程Q?br />http://www.chinaitpower.com/2005September/2005-09-09/191760.html
使用 Process Choreographer 5.1 ?BPEL 程q行增强的审核日志数据分析和查询
http://www.chinakb.net/html/31/7425.html
BPEL中的用户解析技术剖析?http://www-128.ibm.com/developerworks/cn/webservices/ws-userresolution/index.html?ca=dwcn-newsletter-webservices
IBM WebSphere Process Server V6 http://blog.china-pub.com/more.asp?name=jiangsukid&id=32620
http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0512_zhangyu/index.html
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0512_zhangyu/index2.html
http://www-128.ibm.com/developerworks/cn/webservices/
长期q行?BPEL 程?staff 动作的程序化控制
IBM] WebSphere] Business Integration Server Foundation's Process Choreographer
IBM的业务流E徏?/font>
WBI ModelerQ?/strong>WebSphere Business Integration Modeler 它的核心程元素有五个,控制,子流E,规则Q角ԌOTMPS场景的度?br />创徏模型首先要定义流E元
所以我们应从下面这些来开始描q徏模方法:
gigix: http://gigix.blogdriver.com/gigix/113138.html
http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=12#4_1_2
本文没有抛出可运行的范例Q仅仅是E序片断而已Q不q在 OSWorkflow ?Wiki 上,Quake Wang 已把官方入门教程完整地翻译成中文了,有兴的读者可去阅诅R关?OSWorkflow 更加l节性的内容Q可参考官Ҏ册,怿你在了解了入门教E后Q可L阅读官方手册?BR>
OSWorkflow 概念
在商用和开源世界里QOSWorkflow 都不同于q些已有的工作流pȝ。最大不同在?OSWorkflow 有着非常优秀的灵zL。在开始接?OSWorkflow 时可能较难掌握(有h说不适合工作新手入门)Q比如,OSWorkflow 不要求图形化工具来开发工作流Q而推荐手工编?xml 格式的工作流E描q符。它能ؓ应用E序开发者提供集成,也能与现有的代码和数据库q行集成。这一切似乎给正在L快速“即插即用”工作流解决Ҏ的h刉了ȝQ但研究发现Q那些“即插即用”方案也不能在一个成熟的应用E序中提供够的灉|性来实现所有需求?BR>
OSWorkflow 优势
OSWorkflow l你l对的灵zL。OSWorkflow 被认为是一U“低U别”工作流实现。与其他工作系l能用图标表现“loops(回\)”和“conditions(条g)”相比,OSWorkflow 只是手工“编?coded)”来实现的。但qƈ不能说实际的代码是需要完全手工编码的Q脚本语a能胜任这U情形。OSWorkflow 不希望一个非技术用户修改工作流E,虽然一些其他工作流pȝ提供了简单的 GUI 用于工作编辑,但像q样改变工作,通常会破坏这些应用。所以,q行工作调整的最佳h选是开发h员,他们知道该怎么改变。不q,在最新的版本中,OSWorkflow 也提供了 GUI 设计器来协助工作的~辑?/FONT>
OSWorkflow Z有限状态机概念。每?state ?step ID ?status 联合表现Q可单理解ؓ step 及其 status 表示有限状态机?stateQ。一?state 到另一 state ?transition 依赖?action 的发生,在工作流生命期内有至一个或多个zd?state。这些简单概念展C OSWorkflow 引擎的核心思想Qƈ允许一个简?XML 文g解释工作业务流E?/FONT>
OSWorkflow 核心概念
stepQ步骤)
一?step 是工作流所处的位置。可能从一?step {到另外一?stepQ或者有时候还是停留在一L stepQ。D例来_一?OA pȝ的请假流E,它的 step 名称可能有“本部门审批阶段”,“办公室审批阶段”,“ȝ理审扚wD”等?BR>
statusQ状态)
工作?status 是一个用来描q工作流E中具体步骤状态的字符丌ӀOSWorkflow 的有 UnderwayQ进行中Q、QueuedQ等候处理中Q、FinishedQ完成)三种 status?BR>
actionQ动作)
action 指定了可能发生在 step 内的转变Q会D step 的变更。在 OA pȝ中,“本部门审批阶段”可能有“拒l”或“批准”两?action。action ?step 之间的关pLQstep 说明“在哪里”,action 说明“可以去哪里”?一?action 典型地由两部分组成:可以执行此动作的 conditionQ条ӞQ以及执行此动作?resultQ结果)?BR>
conditionQ条Ӟ
cM于逻辑判断Q可包含“AND”和“OR”逻辑。比如一个请假流E中的“本部门审批阶段”,该阶D利用“AND”逻辑Q判断流E状态是否ؓ{候处理中Q以及审批者是否ؓ本部门主?BR>
resultQ结果)
Result 代表指向新的 step 及其 step statusQ也可能q入 split 或?join。Result 分ؓ两种Q?contidional-result Q有条gl果Q,只有条g为真时才使用该结果,?unconditional-resultQ无条gl果Q,当条件不满或没有条件时使用该结果?/FONT>
split/joinQ分?q接Q?/STRONG>
程的切分和融合。很单的概念Qsplit 提供多个 resultQjoin 则判断多?current step 的状态,提供一?result?/FONT>
OSWorkflow 包用途分析及代码片断
com.opensymphony.workflow
该包为整?OSWorkflow 引擎提供核心接口。例?com.opensymphony.workflow.Workflow 接口Q可以说Q实际开发中的大部分工作都是围绕该接口展开的,该接口有 BasicWorkflow、EJBWorkflow、OfbizWorkflow 三个实现cR?/FONT>
com.opensymphony.workflow.basic
该包有两个类QBasicWorkflow ?BasicWorkflowContext。BasicWorkflow 不支持事务,管依赖持久实现Q事务也不能包裹它。BasicWorkflowContext 在实际开发中很少使用?/FONT>
public void setWorkflow(int userId) { Workflow workflow = new BasicWorkflow(Integer.toString(userId)); } |
com.opensymphony.workflow.config
该包有一个接口和两个该接口的实现cR在 OSWorkflow 2.7 以前Q状态由多个地方的静态字D늻护,q种方式很方便,但是有很多缺陷和U束。最主要的缺Ҏ无法通过不同配置q行多个 OSWorkflow 实例。实现类 DefaultConfiguration 用于一般的配置文g载入。?SpringConfiguration 则是?Spring 容器理配置信息?/FONT>
public void setConfiguration(SpringConfiguration configuration) { SpringConfiguration configuration = configuration; workflow.setConfiguration(configuration); } |
com.opensymphony.workflow.ejb
该包有两个接?WorkflowHome ?WorkflowRemote。该包的若干cMQ最重要的是 EJBWorkflowQ该cd BasicWorkflow 的作用一P?OSWorkflow 的核心,q利?EJB 容器理事务Q也作ؓ工作?session bean 的包装器?/FONT>
com.opensymphony.workflow.loader
该包有若q类Q用得最多的?XxxxDescriptorQ如果在工作引擎运行时需要了解指定的动作、步骤的状态、名字,{信息时Q这些描q符会v到很大作用?/FONT>
public String findNameByStepId(int stepId,String wfName) { WorkflowDescriptor wd = workflow.getWorkflowDescriptor(wfName); StepDescriptor stepDes = wd.getStep(stepId); return stepDes.getName(); } |
com.opensymphony.workflow.ofbiz
OfbizWorkflow ?BasicWorkflow 在很多方面非常相|除了需要调?ofbiz ?TransactionUtil 来包装事务?/FONT>
com.opensymphony.workflow.query
该包主要为查询而设计,但不是所有的工作存储都支持查询。通常QHibernate ?JDBC 都支持,而内存工作流存储不支持。值得注意的是 Hibernate 存储不支持合型查询Q例如,一个查询同时包含了 history step 上下文和 current step 上下文)。执行一个查询,需要创?WorkflowExpressionQuery 实例Q接着调用 Workflow 对象?query Ҏ来得到最l查询结果?/FONT>
public List queryDepAdmin(int userId,int type) { //构造表辑ּ for (int i = 0; i < arr.length; i++) { //查询未完成流~号 |
com.opensymphony.workflow.spi
该包可以说是 OSWorkflow 与持久层打交道的途径Q如当前工作的实体Q其中包括:EJB、Hibernate、JDBC、Memory、Ofbiz、OJB、Prevayler?/FONT>
HibernateWorkflowEntry hwfe = (HibernateWorkflowEntry) getHibernateTemplate() .find("from HibernateWorkflowEntry where Id=" + wfIdList.get(i)).get(0); |
com.opensymphony.workflow.util
该包?OSWorkflow 的工具包Q包括了?BeanShell、BSF、EJB Local、EJB Remote、JNDI 的支持?/FONT>
?l?/FONT>
׃本h所在公司希望在 OA pȝ中引入工作流引擎Q经q分析决定采?OSWorkflow 引擎。利?OSWorkflowQ已l在pȝ中实C请假条流E原型,该流E结?OA pȝ中已有的 RBAC 模型q行逐审核。我个h认ؓ要用 OSWorkflow 让某个流E跑hg很麻烦,主要是需要扩展和自己实现的太多?BR>
另外Q引用一D?Quake Wang 的原话:电子政务/OA 如果要用workflow engine的话QsharkQjbpm 之类的workflow engine有点杀鸡用牛刀的味道。shark ?jbpm 都强q你使用它的用户模型Q怎样把企业现有的用户模型Q包括组l结构)映射q来是很J琐的事情,比如常见?OA 应用中,甌者对应的部门负责Zؓ下一个流E的人工参与者,使用 shark 或?jbpm 都得l一圈,通过现有的h力资源系l,获得用户Q再对应q来。这q仅仅是一个简单的需求,更不用说国内企业千奇百怪的l织l构Q以及各U特D流E,?wfmc 或者其他所谓的 workflow 通用标准d不怎么标准的事情。吃力不讨好。用 osworkflow q种Z状态机?workflow engine 反而会L很多Q而且它也没有你用它的用h型。另外纠正一点:osworkflow 不仅仅支持简单的 BeanShellQ还支持 java classQbsfQejb。如果做电子政务/OA 的话Q觉得目?osworkflow 是最适用?opensource workflow engine?BR> Q申明:本文来源于网l,摘录于此Q仅为日后方便查看)