`

Fixflow引擎解析(二)(模型) - BPMN2.0读写

阅读更多

1.关于BPMN2.0

网上的资料比较多下面引用一段维基百科对BPMN的定义:

业务流程建模标记法(BPMN, Business Process Modeling Notation)是对象管理组织(OMG, Object Management Group)

维护的关于业务流程建模的行业性标准。它建立在与UML的活动图非常相似的流程图法(flowcharting)基础上,

为“业务流程图”(BPD, Business Process Diagram)中的特定业务流程提供一套图形化标记法。BPMN的目标是,

通过提供一套既符合业务人员直观又能表现复杂流程语义的标记法,同时为技术人员和业务人员从事业务流程管理提供支持。

BPMN规范还提供从标记法的图到执行语言基础构造的映射,尤其是业务流程执行语言(BPEL, Business Process Execution Language)。
BPMN的首要目的是提供全体业务相关者易于理解的标准标记法。业务相关者包括创造与梳理流程的业务分析师、负责实施流程的技术开发者、

以及管理和监督流程的经理人。BPMN旨在充当公共语言,跨越业务流程设计和实施之间常见的鸿沟。当前有多种竞争的业务流程建模语言标准供建模过程和工具选用。

广泛采用BPMN将有助于统一基本的业务流程概念的表达(例如:公共或私有的流程、编排),就像一些高级的业务概念一样(例如:例外处理、事务补偿)。

关于BPMN元素的一些介绍可以去看看ronghao大神的blog http://ronghao.iteye.com/category/82912

 

2.关于BPMN和BPEL:

BPMN2.0开始已经明确了执行语意,所以Fixflow引擎执行BPMN2.0定义的时候并不需要讲BPMN转换成BPEL才能执行,而是直接能够运行在BPMN标准上。

 

3.读写BPMN文件:

既然说引擎需要支持BPMN2.0标准,那么最先要解决的问题就是BPMN2.0文件格式的读写。

Fixflow读写BPMN2.0文件采用的是EMF框架来完成读写工作。

我们采用的是Eclipse 的开源EMF项目 https://github.com/eclipse/bpmn2 , 其中的org.eclipse.bpmn2项目为EMF读写BPMN2.0的核心项目,

只需要这个项目加上EMF的jar就可以完成读写BPMN2.0文件的工作了。

 

下面是一个通过EMF加载标准BPMN2.0文件的例子:(下面的例子是将EMF框架从Eclipse插件环境中剥离出来使用)

 

3.1创建项目

创建一个JavaProject,并创建一个Java类,一个main方法。

 

3.2 从Github中拉取org.eclipse.bpmn2项目

进入这个地址 https://github.com/eclipse/bpmn2 ,使用git拉取这个项目org.eclipse.bpmn2

 

由于我们暂时不需要修改这个开源项目的源代码,所以直接将他打成jar就可以了,将生成好的jar添加到EmfBPMN项目的引用中如下图:

 

下面我们需要添加EMF框架运行所需要的基础jar,所需的jar如下图所示,这些jar都是RCP版本的eclipse中提供的可以去Eclipse 的plugin目录中寻找

 

依赖jar添加完毕后形成如下结构:

 

下面是通过EMF框架读取BPMN文件的代码:

package com.fixflow;

import java.io.IOException;

import org.eclipse.bpmn2.Bpmn2Package;
import org.eclipse.bpmn2.Definitions;
import org.eclipse.bpmn2.di.BpmnDiPackage;
import org.eclipse.bpmn2.util.Bpmn2ResourceFactoryImpl;
import org.eclipse.dd.dc.DcPackage;
import org.eclipse.dd.di.DiPackage;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

public class EmfLoad {
	
	private static ResourceSet getResourceSet() {
		ResourceSet resourceSet = new ResourceSetImpl();
		//注册
		(EPackage.Registry.INSTANCE).put("http://www.omg.org/spec/BPMN/20100524/MODEL", Bpmn2Package.eINSTANCE);
		(EPackage.Registry.INSTANCE).put("http://www.omg.org/spec/DD/20100524/DI", DiPackage.eINSTANCE);
		(EPackage.Registry.INSTANCE).put("http://www.omg.org/spec/DD/20100524/DC", DcPackage.eINSTANCE);
		(EPackage.Registry.INSTANCE).put("http://www.omg.org/spec/BPMN/20100524/DI", BpmnDiPackage.eINSTANCE);
		Bpmn2ResourceFactoryImpl bpmn2ResourceFactory = new Bpmn2ResourceFactoryImpl();
		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("bpmn", bpmn2ResourceFactory);
		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("bpmn", bpmn2ResourceFactory);
		return resourceSet;
	
	}

	@SuppressWarnings("unused")
	public static void main(String[] args) {
		ResourceSet resourceSet = getResourceSet();
		Resource bpmnResource = null;
		//指定资源路径
		bpmnResource = resourceSet.createResource(URI.createURI("bpmn/SampleProcess.bpmn"));
		
		try {
			//加载BPMN文件
			bpmnResource.load(null);
		} catch (IOException e) {
			e.printStackTrace();
		}
		//获取BPMN文件的根元素
		Definitions definitions = (Definitions) bpmnResource.getContents().get(0).eContents().get(0);
	}

}

 

我们拷贝一个标准的BPMN2.0文件到bpmn目录下:

 

下载地址:  SampleProcess.bpmn.7z

 

下面运行这个main方法就能顺利加载标准的BPMN2.0文件了:

写入的方法:只要将修改过后的模型根元素放置到容器中,调用保存方法既可。

1 resource.getContents().add(definitions);
2 
3 try {
4      resource.save(Collections.EMPTY_MAP);
5   } catch (IOException e) {
6        e.printStackTrace();
7   }

  

上面是对一个标准的BPMN2.0进行读写操作,做为一个实现BPMN2.0引擎来说,

肯定是需要对官方的BPMN元素进行扩展的,以后的章节我们会讲到如果通过EMF读写扩展BPMN2.0元素。

 

分享到:
评论

相关推荐

    BPMN 2.0 示例 - BPMN 2.0 by Example

    BPMN 2.0 示例 - BPMN 2.0 by Example

    BPMN2.0标准规范-机器翻译中文版

    2. BPMN模型执行引擎:用于执行BPMN模型的引擎。 3. BPMN模型分析工具:用于分析和优化BPMN模型的工具。 BPMN2.0标准规范的相关架构文件包括: 1. XMI文件:用于交换BPMN模型的XML表示。 2. XSLT文件:用于将BPMN...

    BPMN 2.0 - 业务过程模型和符号(中文版).pdf

    BPMN 2.0 业务过程模型和符号 BPMN 2.0 是业务过程模型和符号的国际标准,用于描述和分析业务过程。它提供了一种通用的符号和规则来描述业务过程,从而帮助业务分析师、开发人员和业务用户之间的沟通和协作。 业务...

    BPMN 2.0 规范 PDF

    ### BPMN 2.0 规范解析 #### 一、概述 《Business Process Model and Notation (BPMN)》版本2.0是Object Management Group(OMG)发布的一个重要标准文档,它定义了一套统一的图形符号及规则来表示业务流程。此...

    BPMN2.0规范文档

    BPMN2.0规范是业务流程模型和符号(Business Process Model and Notation)的第二个版本,由对象管理组织(Object Management Group, OMG)发布。BPMN是一种图形化语言,用于描绘业务流程的建模方法。它提供了一套标准化...

    eclipse插件-Activiti BPMN 2.0 designer

    eclipse插件之Activiti BPMN 2.0 designer,activiti开发必备的可视化插件,当前版本为5.9.3,适 用于eclipse3.7以上版本,已经在eclipse3.7、3.8版本中亲自测试通过。 使用方法: 将解压后的文件夹“Activiti BPMN...

    BPMN2.0正式规范

    ### BPMN 2.0 正式规范:深入解析 #### 一、概述 Business Process Model and Notation (BPMN) 2.0 是一项由 Object Management Group(OMG)发布的国际标准,用于图形化地表示业务流程。此版本为 BPMN 的第二次...

    Eclipse 插件 离线安装 Activity Bpmn 2.0 Designer-5.18.0全部包

    Activity Bpmn 2.0 Designer是Eclipse的一款插件,它提供了图形化的界面,使得开发者能够方便地创建、编辑和理解BPMN 2.0流程图。 离线安装Activity Bpmn 2.0 Designer-5.18.0插件的过程如下: 1. **准备工作**:...

    zeebe-bpmn-moddle:BPMN 2.0的Zeebe模块扩展

    zeebe-bpmn-模块 该项目将BPMN 2.0的命名空间扩展定义为描述符。用法将其与一起使用以验证Zeebe BPMN 2.0扩展。 var BpmnModdle = require ( 'bpmn-moddle' ) ;var zeebeModdle = require ( 'zeebe-bpmn-moddle/...

    BPMN2.0规范中文文档

    这里较为详细的介绍了BPMN2.0: 1.1. BPMN 2.0是什么 1.2. 历史和目标 1.3. JPDL vs BPMN 2.0 1.4. Bpmn 2.0 执行 1.5. 配置 1.6. 实例 1.7. 流程根元素 1.8. 基本结构(事件、顺序流、网关、任务) 1.9. ...

    camunda-bpmn-moddle:BPMN 2.0的Camunda模块扩展

    camunda-bpmn-模块 该项目将BPMN 2.0的名称空间扩展定义为描述符。 用法 将其与一起使用以验证Camunda BPMN 2.0扩展。 var BpmnModdle = require ( 'bpmn-moddle' ) ; var camundaModdle = require ( 'camunda-...

    BPMN2.0 Modeler for Visio

    - **BPMN-Collaboration.vsx、BPMN-Process.vsx**:这可能是两个Visio模板文件,分别对应BPMN的协作流程和独立过程。 - **Trisotech BPMN.vtx**:可能是Visio的扩展模板文件,包含插件的定制界面和功能。 - **common...

    BPMN2.0标准规范英文

    ### BPMN 2.0标准规范详解 #### 一、概述 《Business Process Model and Notation (BPMN) Version 2.0》是Object Management Group(OMG)发布的一个重要标准文档,它定义了一套用于图形化表示业务流程的标准符号和...

    yaoqiang-bpmn-editor-5.5.1.jar

    一个方便和易于使用的图形化编辑器业务流程图,符合OMG规范(BPMN 2.0的)。遥墙BPMN编辑器是在Java编程语言编写,并可以帮助你创建你在任何时候需要在所有的图表。 特点: 无需安装 快速轻松地创建,查看,编辑和...

    BPMN2.0规范.zip

    BPMN 2.0是什么呢,JPDL vs BPMN 2.0,Bpmn 2.0 执行,配置,实例, 流程根元素,基本结构,网关,任务,Java服务任务,内部捕获事件:定时器,完全的实例(包括控制台任务表单)

    BPMN2.0中文介绍

    BPMN 2.0是业务流程模型与符号的第二版标准,旨在提供一套广泛适用于业务分析、流程设计、实现以及用户管理监控的流程建模符号。它主要被业务用户和建模者使用,通过一套清晰的图形化表示方法,允许业务流程的各个...

    BPMN2.0标准规范(英文版和中文版).zip

    BPMN2.0标准规范英文版和中文版 1 范围 1.1 一般 对象管理组(OMG)已开发了标准的业务流程模型和表示法(BPMN)。 BPMN的主要目标是提供一种易于理解的符 号,从创建流程初始草稿的业务分析人员到负责实施将执行...

    yaoqiang-bpmn-editor-2.0.91.jar.zip_bpmn_yaoqiang

    该软件的核心是其内含的`yaoqiang-bpmn-editor-2.0.91.jar`文件,这是一个Java编写的可执行JAR(Java Archive)文件,包含了整个编辑器的运行环境和功能实现。用户通过这个JAR文件可以启动并使用yaoqiang BPMN2.0...

    BPMN2.0 工作流 实例

    **BPMN2.0(业务流程模型与notation 2.0)**是业务流程建模的国际标准,它提供了一种图形化的方式来描述、设计和执行企业的业务流程。这个标准由 OMG(对象管理组)制定,旨在提高业务流程的可视化、标准化和可执行...

    bpmn2.0规范

    ### BPMN 2.0规范解析 #### 一、概述 **BPMN 2.0**(Business Process Model and Notation Version 2.0)是业务流程建模与标注的一种标准化规范,由**Object Management Group (OMG)**发布。该规范旨在提供一套...

Global site tag (gtag.js) - Google Analytics