Activiti实战03_Hello World
Hello World如此经典,以至于几乎学习没一门新的技术都是从Hello World开始,可能意味着开启了新世界的大门吧,接下来就让我们一起步入到Activiti的世界中吧!
本文所使用开发环境
JDK1.8、Maven、Eclipse(Version: Neon Release (4.6.0))
1:最简单的流程定义
1.1 Activiti项目创建
打开Eclipse -> File -> New -> Other -> 输入Activiti -> 选择Activiti Project -> 输入文件名
创建好的项目结构如图所示(典型的Maven项目结构):
项目建好了,就可以开始了,右键diagrams -> New -> Other -> Activiti Diagram ,选定后随便起个名字就行了。
进入文件后会看到在Eclipse的右边有一个控件栏一样的东西
创建一个最简单的流程定义,主要会用到Event控件,至于剩下的其他控件的使用,会在后续做出说明。然后选择一个StartEvent
在开始任务之后在选择一个结束任务(EndEvent),至此,一个最简单的流程定义就完成了,如下图所示:
其实Activiti的Bpmn流程图也是通过Xml进行描述的,右键该流程图 -> Open With -> XML editor
代码清单
<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:activiti="http://activiti.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="http://www.activiti.org/test"> <process id="myProcess" name="My process" isExecutable="true"> <startEvent id="startevent1" name="Start"></startEvent> <endEvent id="endevent1" name="End"></endEvent> <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="endevent1"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_myProcess"> <bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"> <omgdc:Bounds height="35.0" width="35.0" x="140.0" y="120.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> <omgdc:Bounds height="35.0" width="35.0" x="250.0" y="120.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> <omgdi:waypoint x="175.0" y="137.0"></omgdi:waypoint> <omgdi:waypoint x="250.0" y="137.0"></omgdi:waypoint> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions>
代码清单解读:
1:<definitions></definitions>
在该标签之间的内容属于整个流程定义的所有信息
2:<process></process>(非常重要)
在该标签中的是流程相关信息,是能够在Properties中进行修改和添加的。
id:唯一标识符,如果id相同,表明是同一流程,Activiti将会对其进行升级部署
name:流程图名称
<startEvent id="startevent1" name="Start"></startEvent>
这段XML主要是对开始节点的命名和属性设置
<endEvent id="endevent1" name="End"></endEvent>
这段XML主要是对结束节点的命名和属性设置
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="endevent1"></sequenceFlow>
这段XML是对流程图中连线的解读,从哪开始,流向哪里:
sourceRef:连线的起点(对应相关节点的id)
targetRef:连线的终点(对应相关节点的id)
id:连线的标识
3:<bpmndi:BPMNDiagram></bpmndi:BPMNDiagram>(基本不需要关心)
该标签这个是为了给流程图中任务添加显示框所用的定位信息,标注了每个元素的位置信息。
在Activiti的开发中,有一个至关重要的窗口——Properties窗口,在这个窗口内包含了这个流程的所有基本信息,以及对这个流程的所有操作。
Properties窗口的调出方式:Window -> Show View -> Otehr -> Properties即可
2:测试
public class VerySimpleLeaveProcessTest { @Test public void testStartProcess(){ // 创建流程引擎,使用内存数据库 ProcessEngine processEngine = ProcessEngineConfiguration .createStandaloneInMemProcessEngineConfiguration() .buildProcessEngine(); // 部署流程定义文件 RepositoryService repositoryService = processEngine.getRepositoryService(); repositoryService.createDeployment() .addClasspathResource("diagrams/ch02Leave.bpmn") .deploy(); // 验证已部署的流程定义 ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .singleResult(); assertEquals("myProcess",processDefinition.getKey()); // 启动流程并返回流程实例 RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance instance = runtimeService.startProcessInstanceByKey("myProcess"); assertNotNull(instance); } }
输出结果,如果输出有结果,就说明你成功了: