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); } }
輸出結果,如果輸出有結果,就說明你成功了:
Activiti實戰03_Hello World