activiti流程开发基本步骤
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
activiti流程开发指南
•一、BPMN
•二、activiti主要接口
•三、如何实现一个业务流程
•四、如何管理所有流程与实例
•五、开发流程
•六、api
一、BPMN
1. 什么是BPMN
首先BPMN规范是由标准组织BPMI发布的.BPMN 1.0规范发布于2004年5月。此规范展示了BPMI组织两年多的努力成果。BPMN的主要目标就是要提供被所有业务用户理解的一套标记语言,包括业务分析者、软件开发者以及业务管理者与监察者。BPMN还将支持生成可执行的
BPEL4WS语言。所以,BPMN在业务流程设计与流程实现之间搭建了一条标准化的桥梁。
BPMN定义了业务流程图,其基于流程图技术,同时为创建业务流程操作的图形化模型进行了裁减。业务流程的模型就是图形化对象的网图,包括活动(也可以说工作)和定义操作顺序的流控制。
2. BPMN基础
业务流程图由一系列的图形化元素组成。这些元素简化了模型的开发,且业务分析者看上去非常熟悉。这些元素每个都有各自的特性,且与大多数的建模器类似。比如,活动是矩形,条件是菱形。应该强调的是:开发BPMN的动力就是为了在创建业务流程模型时提供一个简单的机制,同时又能够处理来自业务流程的复杂性。要处理这两个矛盾的需求的方法就是将标记的图形化方面组织分类为特定的类别。这里提供标记类别中的一小部分,以便业务流程图的读者可以简单地识别出元素的基本类型从而理解图形。以下是四种基本的类型:
1)流对象
2)连接对象
3)泳道
4)人工信息
BPMN2.0概要:/workclass/201206272.asp
二、activiti主要接口
ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
ManagementService managementService = processEngine.getManagementService();
IdentityService identityService = processEngine.getIdentityService();
HistoryService historyService = processEngine.getHistoryService();
FormService formService = processEngine.getFormService();
ProcessEngines.getDefaultProcessEngine()会在第一次调用时初始化并创建一个流程引擎,以后再调用就会返回相同的流程引擎。使用对应的方法可以创建和关闭所有流程引擎:ProcessEngines.init()和ProcessEngines.destroy()。
ProcessEngines会扫描所有activiti.cfg.xml和activiti-context.xml文件。对于activiti.cfg.xml文件,流程引擎会使用Activiti的经典方式构建:
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream (inputStream).buildProcessEngine(). 对于activiti-context.xml文件,流程引擎会使用Spring方法构建:先创建一个Spring的环境,然后通过环境获得流程引擎。
所有服务都是无状态的。这意味着可以在多节点集群环境下运行Activiti,每个节点都指向同一个数据库,不用担心哪个机器实际执行前端的调用。无论在哪里执行服务都没有问题
RepositoryService可能是使用Activiti引擎时最先接触的服务。它提供了管理和控制发布包和流程定义的操作。这里不涉及太多细节,流程定义是BPMN 2.0流程的java实现。它包含了一个流程每个环节的结构和行为。发布包是Activiti引擎的打包单位。一个发布包可以包含多个BPMN 2.0 xml文件和其他资源。开发者可以自由选择把任意资源包含到发布包中。既可以把一个单独的BPMN 2.0 xml文件放到发布包里,也可以把整个流程和相关资源都放在一起。(比如,'hr-processes'实例可以包含hr流程相关的任何资源)。可以通过RepositoryService来部署这种发布包。发布一个发布包,意味着把它上传到引擎中,所有流程都会在保存进数据库之前分析解析好。从这点来说,系统知道这个发布包的存在,发布包中包含的流程就已经可以启动了。
除此之外,服务可以
•
o查询引擎中的发布包和流程定义。
o暂停或激活发布包,对应全部和特定流程定义。暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。
o获得多种资源,像是包含在发布包里的文件,或引擎自动生成的流程图。
o获得流程定义的pojo版本,可以用来通过java解析流程,而不必通过xml。
正如RepositoryService负责静态信息(比如,不会改变的数据,至少是不怎么改变
的),RuntimeService正好是完全相反的。它负责启动一个流程定义的新实例。如上所述,流程定义定义了流程各个节点的结构和行为。流程实例就是这样一个流程定义的实例。对每个流程定义来说,同一时间会有很多实例在执行。RuntimeService也可以用来获取和保存流程变量。这些数据是特定于某个流程实例的,并会被很多流程中的节点使用(比如,一个排他网关常常使用流程变量来决定选择哪条路径继续流程)。Runtimeservice也能查询流程实例和执行。执行对应BPMN 2.0中的'token'。基本上执行指向流程实例当前在哪里。最后,RuntimeService可以在流程实例等待外部触发时使用,这时可以用来继续流程实例。流程实例可以有很多暂停状态,而服务提供了多种方法来'触发'实例,接受外部触发后,流程实例就会继续向下执行。
任务是由系统中真实人员执行的,它是Activiti这类BPMN引擎的核心功能之一。所有与任务有关的功能都包含在TaskService中:
•
o查询分配给用户或组的任务
o创建独立运行任务。这些任务与流程实例无关。
o手工设置任务的执行者,或者这些用户通过何种方式与任务关联。
o认领并完成一个任务。认领意味着一个人期望成为任务的执行者,即这个用户会完成这个任务。完成意味着“做这个任务要求的事情”。通常来说会有很多种处理形式。
IdentityService非常简单。它可以管理(创建,更新,删除,查询...)群组和用户。请注意,Activiti执行时并没有对用户进行检查。例如,任务可以分配给任何人,但是引擎不会校验系统中是否存在这个用户。这是Activiti引擎也可以使用外部服务,比如ldap,活动目录,等等。
FormService是一个可选服务。即使不使用它,Activiti也可以完美运行,不会损失任何功能。这个服务提供了启动表单和任务表单两个概念。启动表单会在流程实例启动之前展示给用户,任务表