說說如何使用 Activiti 建立並執行第一個流程
摘要:
1 第一個流程定義
首先,我們定義一個只包含開始與結束節點的流程:
流程定義描述檔案:
<?xml version="1.0" encoding="UTF-8"?>
<definitions ...

1 第一個流程定義
首先,我們定義一個只包含開始與結束節點的流程:

流程定義描述檔案:
<?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:xsd="http://www.w3.org/2001/XMLSchema" 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="firstProcess" name="firstProcess" isExecutable="true"> <startEvent id="startevent1" name="startevent1"></startEvent> <endEvent id="endevent1" name="End"></endEvent> <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="endevent1"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_firstProcess"> <bpmndi:BPMNPlane bpmnElement="firstProcess" id="BPMNPlane_firstProcess"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"> <omgdc:Bounds height="35.0" width="35.0" x="270.0" y="200.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> <omgdc:Bounds height="35.0" width="35.0" x="350.0" y="200.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> <omgdi:waypoint x="305.0" y="217.0"></omgdi:waypoint> <omgdi:waypoint x="350.0" y="217.0"></omgdi:waypoint> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions>
分析如下:
- 流程定義描述檔案符合 BPMN 2.0 規範。
- definitions 標籤表示定義開始,內部可以包含多個 process 標籤。
- definitions 標籤定義了 XMLSchema 內容規範以及名稱空間。
- process 標籤表示流程定義。
- startEvent 標籤表示流程啟動事件。
- endEvent 標籤表示流程結束事件。
- sequenceFlow 標籤表示流程節點之間的關係;sourceRef 定義了源節點;targetRef 定義了目標節點。
- bpmndi:BPMNDiagram 標籤是流程的圖形定義。
2 單元測試
@Test public void test() { //使用記憶體資料庫,建立流程引擎 ProcessEngine engine = ProcessEngineConfiguration .createStandaloneInMemProcessEngineConfiguration().buildProcessEngine(); //部署 RepositoryService repositoryService = engine.getRepositoryService(); repositoryService.createDeployment().addClasspathResource ("workflow/diagrams/xx.bpmn") .deploy(); //驗證 ProcessDefinition definition = repositoryService.createProcessDefinitionQuery() .singleResult(); final String key = "firstProcess"; assertEquals(key, definition.getKey()); //啟動流程並返回例項 RuntimeService runtimeService = engine.getRuntimeService(); ProcessInstance instance = runtimeService.startProcessInstanceByKey(key); assertNotNull(instance); System.out.println("id=" + instance.getId() + ",definitionId=" + instance .getProcessDefinitionId()); }
- 首先建立流程引擎例項,這裡我們使用了 createStandaloneInMemProcessEngineConfiguration() 方法,建立了一個使用 H2 記憶體資料庫的流程引擎例項(預設 JdbcUrl 為
jdbc:h2:mem:activiti
)。此外,還有多種建立流程引擎例項的方法:
- 得到 ProcessEngine 例項之後,就可以獲取 Activiti 定義的各個 Service 介面啦:

- 使用 RuntimeService 啟動流程並返回例項,它提供了多種啟動流程的方法:

執行結果:
id=5,definitionId=firstProcess:1:4
Key:版本號:流程定義庫表 ID