在BPMN的帮助下,可以很容易地理解JBPM流程。
什么是BPMN 2.0?
- 它代表业务流程模型和表示法。
- 它基于OMG(对象管理组)规范。
- 它类似于流程图。
- 其主要目标是提供一个易于所有业务用户理解的符号,即从业务分析员,技术人员,最后到管理和监控这些流程的业务用户。
- 它不仅定义了如何以图形方式表示业务流程的标准,还包括为定义的元素执行语义以及存储流程定义的XML格式。
- BPMN由使用序列流相互连接的不同类型的节点组成。 BPMN由三种不同类型的节点组成。 他们是:
- 事件:开始事件,结束事件和中间事件。
- 活动:脚本任务,用户任务,服务任务,业务规则任务等。
- 网关:Divergent Gateway,Convergent Gateway
流程创建
有三种方法可用于创建流程:
- 使用图形化BPMN2编辑器
- 使用XML定义流程
- 通过使用流程API直接创建流程。
使用图形BPMN2编辑器
BPMN2是一个Eclipse插件。 它提供了一个编辑器,允许我们使用拖放选项创建一个过程。 使用拖放选项创建节点后,可以编辑其属性。
要在jBPM项目中打开BPMN编辑器,请右键单击要保留进程的目录,然后选择“新建”,然后单击“文件”,提供文件名并以.bpmn
扩展名保存。 这将打开下面屏幕中显示的流程编辑器。
在此编辑器中,我们可以通过添加节点来创建流程,该节点表示要在业务流程中指定的业务逻辑。
使用XML定义流程
还可以直接使用BPMN2.0 XML指定进程。 这些XML进程的语法是使用BPMN2.0 XML模式定义定义的。 进程XML文件由两部分组成:上部和下部。
上半部分具有不同节点及其属性的定义,下半部分具有所有图形信息。 进程XML只包含一个元素。
示例: 在这里,我们创建一个包含启动事件,打印“Hello World”和结束事件的脚本任务的流程。
<?xml version="1.0" encoding="UTF-8"?>
<definitions id="Definition"
targetNamespace="http://www.jboss.org/drools"
typeLanguage="http://www.java.com/javaTypes"
expressionLanguage="http://www.mvel.org/2.0"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"Rule Task
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
xmlns:g="http://www.jboss.org/drools/flow/gpd"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:tns="http://www.jboss.org/drools">
<process processType="Private" isExecutable="true" id="com.sample.hello" name="Hello Process" >
<!-- nodes -->
<startEvent id="_1" name="Start" />
<scriptTask id="_2" name="Hello" >
<script>System.out.println("Hello World");</script>
</scriptTask>
<endEvent id="_3" name="End" >
<terminateEventDefinition/>
</endEvent>
<!-- connections -->
<sequenceFlow id="_1-_2" sourceRef="_1" targetRef="_2" />
<sequenceFlow id="_2-_3" sourceRef="_2" targetRef="_3" />
</process>
<bpmndi:BPMNDiagram>
<bpmndi:BPMNPlane bpmnElement="com.sample.hello" >
<bpmndi:BPMNShape bpmnElement="_1" >
<dc:Bounds x="16" y="16" width="48" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_2" >
<dc:Bounds x="96" y="16" width="80" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_3" >
<dc:Bounds x="208" y="16" width="48" height="48" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="_1-_2" >
<di:waypoint x="40" y="40" />
<di:waypoint x="136" y="40" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="_2-_3" >
<di:waypoint x="136" y="40" />
<di:waypoint x="232" y="40" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>