JBPM4学习经验总结第1季

1.       前言

JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源代码项目,它使用要遵循 Apache License jBPM20041018日,发布了2.0版本,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分,它的名称也改成JBoss jBPM。随着jBPM加入JBoss组织,jBPM也将进入一个全新的发展时代,它的前景是十分光明的。目前官方网站上最新的版本是JBPM5,不过它还尚未成熟,建议大家不要做实验室里面的小白鼠。

2.       配置JBPM4开发环境

JBPM4目前最稳定的版本是4.4

https://sourceforge.net/projects/jbpm/files/jBPM%204/jbpm-4.4/可以下载最新的开发包jbpm-4.4.zip。下载之后解压缩,将里面的一个jbpm.jarlib下面所有的jar包拷贝到实际项目工程当中。下面我们安装JBPMEclipse插件,让我们的Eclipse具有JBPMFeature。在已经下载的{%JBPM4_PATH%}/install/src/gpd下面就是插件包,利用eclipseupdateSite方式即可安装JBPM4插件,安装完成后。在EclipseNew-Other下面会这样的效果。

 

 

 

 

之后就可以利用可视化编辑器编辑(GEF)流程了,效果如下

 

 

 

 

 

加入JPDL4schema效验,在{%JBPM4_PATH%}/src/文件夹下面有jpdl-4.0.xsd——jpdl-4.4.xsdxml效验,将其引入到Eclipse中来,就可以使用快捷键编辑xml流程了。引入步骤如下:

Preferences->Myeclipse->files and editors->XML->XML schema-> XML schema Source即可添加新的schema验证了。

1.       JBPM默认的配置文件说明

jbpm.cfg.xml:整个工作流引擎总配置文件,它描述了该引擎需要加载的其他配置文件,它相当于一个所有配置文件的核心管理配置。内容如下:

xml version="1.0" encoding="UTF-8"?>

<jbpm-configuration>

  <import resource="jbpm.default.cfg.xml" />

  <import resource="jbpm.businesscalendar.cfg.xml" />

  <import resource="jbpm.tx.hibernate.cfg.xml" />

  <import resource="jbpm.jpdl.cfg.xml" />

  <import resource="jbpm.bpmn.cfg.xml" />

  <import resource="jbpm.identity.cfg.xml" />

jbpm-configuration>

当然我们可以按照自己定义的总配置文件来加载自定义配置,比如自己新建一个myjbpm.cfg.xml,而真正开始流程发布的时候就可以显示的在代码中明确加载myjbpm.cfg.xml配置文件,而不去加载默认的配置,此为后话以后再表。

jbpm.mail.properties:描述了邮件信息,当流程中引发了邮件处理的时候,会按照其中的配置信息发送相关邮件。

jbpm.hibernate.cfg.xml:工作流引擎是依靠自身的一些数据库的,这个就是数据库相关的配置信息,因为JBPM底层就是引用了Hibernate来做持久层维护的,所以此文件就是Hibernate配置文件。内容如下:

xml version="1.0" encoding="utf-8"?>

DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<hibernate-configuration>

    <session-factory>

      

       <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectproperty>

       <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>

       <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm4demo?useUnicode=true&characterEncoding=UTF-8property>

       <property name="hibernate.connection.username">liuyanproperty>

       <property name="hibernate.connection.password">111111property>

      

       <property name="hibernate.hbm2ddl.auto">updateproperty>

       <property name="hibernate.format_sql">trueproperty>

       <mapping resource="jbpm.repository.hbm.xml" />

       <mapping resource="jbpm.execution.hbm.xml" />

       <mapping resource="jbpm.history.hbm.xml" />

       <mapping resource="jbpm.task.hbm.xml" />

       <mapping resource="jbpm.identity.hbm.xml" />

    session-factory>

hibernate-configuration>

 

2.       发布流程模板

当我们通过流程编辑器编辑好了流程之后就可以将这个流程模板发布到数据库中。我觉得定义一个流程模板更像是定义一个Java Class类,发布一个流程模板就好像是编译这个类成为class,而流程实例就好像是一个Java类的一个实例对象。

最常用的是用Java代码的方式发布流程~~~还有一个是利用Ant脚本发布流程,不过一般在开发阶段十分少用。

// 加载默认的jbpm.cfg.xml文件

ProcessEngine processEngine = new Configuration().buildProcessEngine();

 

/**

 * 发布流程

 */

public void test01Deploy() {

 

         String deployId = repositoryService.createDeployment()

                            .addResourceFromClasspath("decision.jpdl.xml").deploy();

 

         System.out.println(deployId);

}

这样就把流程模板为decision的流程发布到了数据库中,发布成功后,jbpm相关表会变化如下:

 

 

 

 

jbpm4_lob

 

 

 

jbpm4_property

 

 

比较重要的几个服务接口,其他服务接口都是从主接口——引擎服务接口ProcessEngine获得的。

// 引擎服务接口

ProcessEngine processEngine = new Configuration().buildProcessEngine();

 

// 资源服务,流程模板的部署、查询、删除

RepositoryService repositoryService = processEngine.getRepositoryService();

 

// 执行服务,设置流程实例的发起、执行

ExecutionService executionService = processEngine.getExecutionService();

 

// 流程管理接口、异步工作相关执行

ManagementService managementService = processEngine.getManagementService();

 

// 人工任务服务接口,对任务task的查询、提交、删除、保存

TaskService taskService = processEngine.getTaskService();

 

// 历史记录操作接口

HistoryService historyService = processEngine.getHistoryService();

 

// 身份验证服务

IdentityService identityService = processEngine.getIdentityService();

 

1.       根据流程模板发起一个流程实例

定义好了模板后,就可以建立此流程模板的实例对象了,实例对象就是现实中一个个真正的流程事件了。

1.       直接发起StateChoice流程实例

// 开始process流程

ProcessInstance processInstance = executionService.startProcessInstanceByKey("StateChoice");

 

2.       发起流程时加入流程实例变量

HashMap parm = new HashMap();

parm.put("MyId", "13000000000");

parm.put("MyName", "liuyan");

parm.put("MyDate", new Date());

 

ProcessInstance processInstance = executionService.startProcessInstanceById("StateChoice -1", parm);

这样在发起流程的时候通过一个HashMap将流程变量传到整个流程中,可能以后的某一个节点会用到“当初”传入的变量。

startProcessInstanceByKey:根据StateChoice找到最新的部署版本去发起流程。

startProcessInstanceById:根据StateChoice的版本(1就是第1版本)去发起流程。

如果传入流程实例的是一个自定义的复杂对象,则该对象必须实现Serializable接口,以便流程实例上下文的变量持久化。

 

2.       State(状态活动)

流程实例流到State状态活动时,就陷入了一个中断、等待状态,必须得收到外部的干预操作后才能继续运行,

最简单的State流程图如下

 

 

 

 

 

 

 

 

 

 

 

jbpm4_deployprop

jbpm4_deployment

以上是建立一个工作流程,点击next后输入流程模板的名字,如下图

你可能感兴趣的:(jbpm,工作流引擎,import,eclipse,jboss,eclipse插件)