`

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)发布的一个重要标准文档,它定义了一套统一的图形符号及规则来表示业务流程。此...

    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. ...

    BPMN2.0规范文档

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

    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标准规范英文

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

    BPMN2.0 Modeler for Visio

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

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

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

    BPMN2.0中文介绍

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

    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...

    yaoqiang-bpmn-editor-5.5.1.jar

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

    bpmn2.0规范

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

    Activiti Designer bpmn2.0

    *Name:*Activiti BPMN 2.0 designer *Location:*http://activiti.org/designer/update/ 出错,有人说是 是这个网址已经不存在了。 用其他的联网安装确实速度有些让人吃惊,毕竟是连的外面的网。 只好使用离线安装。 ...

    BPMN2.0中文版试读版本

    ### BPMN 2.0中文版试读版关键知识点解析 #### 一、BPMN 2.0概述 **商业流程建模与标注 (BPMN) 版本2.0**是一种开放标准,旨在提供一套通用符号,用于描述业务流程。BPMN 2.0的目标是使业务用户能够理解业务流程的...

Global site tag (gtag.js) - Google Analytics