首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

通用页面流程框架及实例介绍(4)BTT 通用页面流程设计和各种流程

通用页面流程框架及实例介绍(4)BTT 通用页面流程设计和各种流程

在 BTT 中,流程(Flow Processor)是最基本的,然后可以基于流程,扩展出业务流程(Operation Flow Processor)、Web 页面流程(HTML Flow Processor)和 Java 富客户端页面流程(Java Flow Processor)。对于 Java 富客户端页面流,BTT 有两种,一种是导航 Swing 和 SWT 页面的页面流程,另外一种是导航由 XML 生成的页面的页面流程。
流程(Flow Processor)流程是一个状态机框架,它是各种流程的基础,所有的 BTT 的业务流程和页面流程都是基于流程(Flow Processor)扩展而来。开发人员,也可以根据自己的需要扩展自己需要的页面流程。
流程本质上是一个状态机,它由一系列的状态组成。一个流程包含一个初始状态,一个或多个的结束状态,和一系列中间状态。流程的所有状态和步骤都可以定义在 XML 文件中。在 BTT 中,可以定义在流程定义文件中 (processor.xml) 或者独立流程定义文件(Self-Defined)中。
图 4. 流程的状态机结构BTT 提供了一系列关于实现流程的接口:Action(动作), GuardCondition(条件), Processor(流程), State(状态)和 Transition(跳转)。同时还有 entry actions(入口动作),exit actions(出口动作)和 event(事件)。
流程中还有一个重要的概念:状态。流程管理器根据状态来管理流程的生命周期。状态是流程的执行情况,BTT 中的流程有以下几种状态:
  • 未初始化– 引擎已经建立了流程实例,但还没有初始化。
  • 初始化– 流程引擎已经初始化了流程实例,但是还没有执行。
  • 执行– 流程引擎开始执行流程实例
  • 停止– 流程引擎在流程未结束前停止,并且不能被重新启动。
  • 挂起- 流程引擎在流程未结束前停止,但可以被重新启动。
  • 完成– 流程执行结束,流程执行到结束状态。
业务流程(Operation Flow Processor)业务流程是由业务操作组成的流程。它是对流程的扩展,业务流程中的每一个状态都可以用于执行一个或多个的业务操作。架构上它实现了业务操作接口,流程中的状态可以执行业务操作。业务流程和流程之间的关系如下图所示:
图 5. 业务流程和流程之间的关系BTTOperationProcessor 类是业务流程的实现类,它实现了流程类 BTTProcessor 。下面是业务流程的一个实例:
清单 1. 业务流程(Operation Flow Processor)实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!-- 业务流程 -->
<opProcessor id="genFlow">
  <!—开始状态 -->
  <state id="initial" type="initial">
    <!— 状态入口动作 -->
    <entryActions>
      <!— Step是业务操作,执行用户编写的业务逻辑 -->
      <Step  id="dummyJournalAct"
      implClass="com.ibm.btt.samples.appl.JournalHostRequestDataStep"/>
    </entryActions>
    <!— 根据业务操作的执行结果,流程相应进行到下一个状态,
    如果业务操作成功就进入state2,如果业务操作执行失败,则到状态finalNotOk。 -->
    <transitions>
      <transition id="dummyJournalAct.ok" targetState="state2"/>
      <transition id="dummyJournalAct.error" targetState="finalNotOk"/>
    </transitions>
  </state>
  <state id="state2">
    <entryActions>
      <Step implClass="com.ibm.btt.samples.appl.SendHostStep"
      id="dummyHostAct"/>
    </entryActions>
    <transitions>
      <transition id="dummyHostAct.ok" targetState="state3"/>
      <transition id="dummyHostAct.error" targetState="finalNotOk"/>
    </transitions>
  </state>
  <state id="state3">
    <entryActions>
      <Step implClass="com.ibm.btt.samples.appl.JournalHostReplyDataStep"
      id="dummyJournalAct"/>
    </entryActions>
    <transitions>
      <transition id="dummyJournalAct.ok" targetState="finalOk"/>
      <transition id="dummyJournalAct.error" targetState="finalNotOk"/>
    </transitions>
  </state>
  <state id="finalOk" type="final" typeIdInfo="ok"/>
  <state id="finalNotOk" type="final" typeIdInfo="error"/>
</opProcessor>




Web 页面流程(HTML Flow Processor)BTT 为 B/S 的应用系统提供了 Web 页面流程,用于把一个交易中的所有 HTML 页面、JSP 页面、业务流程和业务操作组织成一个流程,并根据状态机进行业务的执行和页面的导航。通用页面流程中的 BTTHtmlProcessor 就是用于驱动 Web 页面流程的。
图 6. Web 页面流程和流程之间的关系Web 页面流程为了支持导航 Web 页面,在流程状态机中增强了下面特性:
  • Web 页面流程是异步执行的,流程的状态可以和状态机的外部产生交互,也就是和前端的用户界面产生关联。 Web 页面流程执行到页面状态时,流程就缓存在服务器端,直到客户端用户触发了页面操作,才根据页面上触发的操作重新继续未完成的 Web 页面流程。而上面介绍的业务流程只有同步执行的功能。
  • Web 页面流程有两个扩展的状态:页面和子流程。当 Web 页面流程执行到这两个状态时,流程就释放流程控制权,直到页面状态和子流程执行完毕,控制权重新回到 Web 页面流程。
  • 当执行到页面状态时,只有当从浏览器接收到相应的事件,流程才继续往下执行。用户页面数据含有隐藏字段 <dse_nextEventName>,后台的 Web 页面流程根据前端页面发送 <dse_nextEventName> 的事件值,转到下一个状态。
  • 当执行到子流程状态时,页面流程的控制权就转移到子流程,只有从子流程结束后,父流程才能继续。父流程根据子流程结束状态中的 <typeIdInfo> 的值,转移到下一个状态。
  • Web 页面流程是异步的,所以存在超时的情况。可以定义 processorTimeout 属性来指定 Web 页面流程实例的超时等待时间。当 Web 页面流程超时时,引擎会发送超时事件,清空流程实例以及内存等资源。下面是相应的定义:<field id="defaultProcessesTimeout" value="1000"/> 。值以毫秒为单位,默认值是 0,表示永远不超时。



返回列表