《2020(流程管理)基于C的BPEL流程引擎原型的设计与实现》由会员分享,可在线阅读,更多相关《2020(流程管理)基于C的BPEL流程引擎原型的设计与实现(51页珍藏版)》请在金锄头文库上搜索。
1、本科毕业设计(论文)说明书 基于C+的BPEL流程引擎原型的设计与实现 学 院 软 件 学 院 专 业 软 件 工 程 学生姓名 指导教师 提交日期 2009 年 6 月 3 日 华 南 理 工 大 学毕 业 设 计 (论文) 任 务 书兹发给 班学生 毕业设计(论文)任务书,内容如下: 1.毕业设计(论文)题目:基于C+的BPEL流程引擎原型的设计与实现 2.应完成的项目: (1)2009年4月10日前拟定提纲并提交开题报告 (2)2009年5月25日前完成论文初稿 (3)进行基于C+的BPEL引擎原型的设计与开发 (4)参考外文文献资料并提交外文翻译译文 3.参考资料以及说明: (1)杨开
2、诚. 数据结构M. 电子工业出版社. 2008(9). (2)James Gosling, Bill Joy, Guy Steele and Gilad Bracha, The Java language specification third editionM. Addison-Wesley, 2005. (3)Stanley B. Lippman, Jose Lajoie, C+ Primer, 清华大学出版社2003. (4)杨洪波. BPEL4People思想解读J. 软件世界. 2008(11). (5)万露. 基于SOA和BPEL的业务流程管理研究与应用J. 计算机与现代化. 20
3、09(8). (6)APACHE ODE. http:/ode.apache.org/ (7)Jacob . http:/ode.apache.org/jacob.html (8)Boost Serialize. http:/pleted(null, CompensationHandler.emptySet();当onRequestRcvd()方法结束后,会马上通知父序列。那我们的顺序活动(Sequence)如何取回控制权呢?让我们再次回到通道的另一端方法集上。处理通道援引和方法集是虚拟处理单元最重要的工作之一,顺序化活动的父级活动范围的实现如下:class SEQUENCE extends
4、ACTIVITY . private class ACTIVE extends BpelJacobRunnable . public void run() . object(new ParentScopeML(_child.parent) public void compensate(OScope scope, SynchChannel ret) _pensate(scope,ret); instance(ACTIVE.this); public void completed(FaultData faultData, Set compensations) HashSet comps = new
5、 HashSet(_compensations); comps.addAll(compensations); if (faultData != null | _terminateRequested | _remaining.size() = 1) _pleted(faultData, comps); else /* !fault & ! terminateRequested & !remaining.isEmpty */ ArrayList remaining = new ArrayList(_remaining); remaining.remove(0); instance(new SEQU
6、ENCE(_self, _scopeFrame, _linkFrame, remaining, comps); ); .completed()方法理所当然的会让这个方法执行起来,除非抛出了一个错误、请求了一个终端、没有子活动余留。身为乐观派,我们应当仔细检查以确认一切正常,在第二个例子中,剩余的活动被移除,然后顺序活动抽象回到了原来的位置,代码如下:public void run() final ActivityInfo child = new ActivityInfo(genMonotonic(), _remaining.get(0),newChannel(TerminationChanne
7、l.class), newChannel(ParentScopeChannel.class); instance(createChild(child, _scopeFrame, _linkFrame); instance(new ACTIVE(child);如上代码例示了下一个子活动抽象和另一个叫做ACTIVE的抽象。那么这个ACTIVE抽象到底是什么呢?他其实是一个用于持续跟随执行着的子活动的抽象,有点类似于PXE中基于所有容器(while, sequence, pick等等用于各种处理的活动抽象)的协议。那么一个ACTIVE(有时候也是等待器WAITER)抽象主要照顾其子活动。然后,我们例
8、示了一个条件重复活动(WHILE)抽象,这是顺序活动(SEQUENCE)的下一个子活动,那么接下来会发生什么事情呢?public void run() boolean condResult = false; try condResult = checkCondition(); catch (FaultException fe) _pleted(createFault(fe.getQName(), _self.o),_compHandlers); return; if (condResult) ActivityInfo child = new ActivityInfo(genMonotonic(
9、),getOWhile().activity, newChannel(TerminationChannel.class), newChannel(ParentScopeChannel.class); instance(createChild(child, _scopeFrame, _linkFrame); instance(new WAITER(child); else /* stop. */ _pleted(null, _compHandlers); 现在我们分析这些代码。第一步是评估条件重复活动状态。如果返回值为真(True),那么就创建一个子抽象,并且创建一个等待器(WAITER)去跟踪
10、他的执行。等待器的实现如下,非常简单易懂:private class WAITER extends BpelJacobRunnable private ActivityInfo _child; private boolean _terminated; WAITER(ActivityInfo child) _child = child; public void run() object(false, new TerminationML(_self.self) public void terminate() _terminated = true; _child.self.terminate();
11、instance(WAITER.this); .or(new ParentScopeML(_child.parent) public void compensate(OScope scope, SynchChannel ret) _pensate(scope,ret); instance(WAITER.this); public void completed(FaultData faultData, Set compensations) _compHandlers.addAll(compensations); if (_terminated | faultData != null) _pleted(faultData, compensations); Else instance(WHILE.this); ); 终止符和补偿符实际意义不大。例如顺序活动完成的时候(Completion),重新例示了条件重复活动抽象。这也展示我们处理循环的方法,即通过重新例示主条件重复活动抽象,再次