Jbpm工作流引擎学习日志

标签: jbpm 工作流 引擎 | 发表时间:2015-01-24 13:36 | 作者:caixu52110
出处:http://www.iteye.com

1.jbpm介绍

     jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储。下载地址:http://pan.baidu.com/s/1ntr8t6L

 

2.jbpm环境搭建

    安装gpd、配置runtime环境、导入jbpm所需的jar包、创建配置文件jbpm.cfg.xml和jbpm.hibernate.cfg.xml

 

    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.spring.cfg.xml" /> 
  <import resource="jbpm.jpdl.cfg.xml" /> 
  <import resource="jbpm.bpmn.cfg.xml" /> 
  <import resource="jbpm.identity.cfg.xml" /> 
  

</jbpm-configuration> 

    jbpm.hibernate.cfg.xml 配置如下:

 

     

<?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="connection.url">jdbc:sqlserver://localhost:1433;databaseName=Jbpm</property>
		<property name="connection.username">sa</property>
		<property name="connection.password">woaixua52110</property>
		<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
		<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
		<property name="hibernate.hbm2ddl.auto">create-drop</property>
		<property name="hibernate.format_sql">true</property>
		<property name="show_sql">true</property>

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


   这里这用的是Sql server的配置,这里需要注意的是<property name="hibernate.hbm2ddl.auto">create-drop</property>这个属性。  有两种:update和create-drop,不建议使用create-drop,因为如果数据库里已经存在表,他会先drop然后再创建。

 

  新建一个jpdl流程文件

 

    

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

<process name="test" key="test" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="272,85,48,48">
      <transition name="提交到科长" to="科长审批" g="-52,-22"/>
   </start>
   <task assignee="张三" name="科长审批" g="258,212,92,52">
      <transition name="提交到主任" to="主任审批" g="-52,-22"/>
   </task>
   <task assignee="李四" name="主任审批" g="261,341,92,52">
      <transition name="通过" to="end1" g="-50,-22"/>
   </task>
   <end name="end1" g="284,448,48,48"/>
</process>

    设计图如下:

 



 

配置文件啥的都弄好后,开始测试 

 

package com.jbpm.demo;

import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;

import junit.framework.TestCase;

public class JbpmDemo extends TestCase {
	
	/**
	 * 部署、初始化 创建jbpm所需的表
	 */
	public void deploy(){
		ProcessEngine processEngine = Configuration.getProcessEngine();
		RepositoryService repositoryService = processEngine.getRepositoryService();
		repositoryService.createDeployment().addResourceFromClasspath("test.jpdl.xml").deploy();
	}
	
	
}

   单元测试成功后,数据库里会新那18张jbpm相应表,如下图

 

 3.jbpm简单的例子

 

package com.jbpm.demo;

import java.util.List;

import junit.framework.TestCase;

import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;

public class JbpmDemo extends TestCase {

	public ProcessEngine processEngine = Configuration.getProcessEngine();

	/**
	 * 部署、初始化 创建jbpm所需的表
	 */
	public void deploy() {
		RepositoryService repositoryService = processEngine
				.getRepositoryService();
		repositoryService.createDeployment()
				.addResourceFromClasspath("test.jpdl.xml").deploy();
	}

	/**
	 * 创建流程实例
	 */
	public void createInstance() {
		ExecutionService executionService = processEngine.getExecutionService();
		ProcessInstance processInstance = executionService
				.startProcessInstanceByKey("leave");
		System.out.println("流程实例Id:" + processInstance.getId());
	}

	/**
	 * 获取对应人员任务
	 */
	public void getTask() {
		TaskService taskService = processEngine.getTaskService();
		List<Task> tasks = taskService.findPersonalTasks("李四");
		for (Task task : tasks) {
			System.out.println("当前任务ID:" + task.getId());
			System.out.println("当前任务名:" + task.getActivityName());
			System.out.println("当前任务分配人员:" + task.getAssignee());
		}
	}

	/**
	 * 查询流程实例当前所在节点
	 */
	public void getCurrectActivity() {
		ExecutionService executionService = processEngine.getExecutionService();
		String activityName = executionService.createProcessInstanceQuery()
				.processInstanceId("leave.10001").uniqueResult()
				.findActiveActivityNames().toString();
		System.out.println("当前流程节点:" + activityName);
	}

	/**
	 * 完成任务
	 */
	public void completeTask() {
		TaskService taskService = processEngine.getTaskService();
		taskService.completeTask("10002");
	}
}

 4.jbpm服务介绍

     jpbm主要对象包括:Configuration 和ProcessEngine

     Configuration是jbpm的配置文件管理对象即资源加载对象.负责加载jbpm的各种配置如数据库连接配置,事务配置,身份认证,jpdl等相关配置.

     ProcessEngine是一个服务工厂,有点类似hibernate的sessionFactory负责创建jbpm的每个服务.

     

ProcessEngine又包括以下6个服务

    1>RepositoryService

流程资源服务接口。提供对流程定义的部署、查询、删除和流程图查看等操作。

    2>ExecutionService

流程执行服务接口。提供启动流程实例、推进、删除等操作。

    3>TaskService

人工任务服务接口。提供对任务的创建、提交、查询、保存、删除等操作。

    4>HistoryService

流程历史服务接口。提供对任务的管理操作。提供对流程历史库中历史流程实例、历史活动实例等记录的查询。

    5>ManagementService

流程管理接口,通常用来管理Jop(异步服务)

    6>IdentityService

身份认证服务接口。提供对流程用户、用户组管理



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [jbpm 工作流 引擎] 推荐:

Jbpm工作流引擎学习日志

- - 行业应用 - ITeye博客
     jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储. 下载地址:http://pan.baidu.com/s/1ntr8t6L.     安装gpd、配置runtime环境、导入jbpm所需的jar包、创建配置文件jbpm.cfg.xml和jbpm.hibernate.cfg.xml.

JBPM学习(一):实现一个简单的工作流例子全过程

- - CSDN博客综合推荐文章
. . .

JBPM表结构

- - CSDN博客综合推荐文章
      JBPM全称——Java  Business PrcessManagerment(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开放的、灵活的、易扩展的可执行流程语言框架.        (1)它的业务逻辑定义没有采用目前的一些规范,而是采用了它自己定义的Jboss Jbpm Process Definition Language(jpdl).

jbpm环境搭建

- - 编程语言 - ITeye博客
   使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现.    工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递.   jbpm 即java Business Process Management,是基于java的业务流程管理系统引擎底层基于Active Diagram模型.

activiti工作流引擎思想探究

- - 开源软件 - ITeye博客
       研究activiti有一阵了,逐渐了解了开源activiti的相关api,但对期中的processinstanceId,executeId,taskId相关应用还是有些模糊,得益于activiti开源技术推广者临远同志的启发,明白了很多工作流引擎的核心思想源自佩特里网(英语:Petri net),采用token机制来执行流程.

浅析PM工作流引擎

- - CSDN博客推荐文章
1.      JBPM工作流引擎是用来做什么的. 首先要说明的一点是工作流引擎指的并不只是JBPM,JBPM只是工作流引擎的一种. JBPM利用JPDL流程定义语言将现实生活中处理事务的业务流程进行抽象,形成一套业务流程规则,只要处理该项业务就必须按照这个流程规则进行. 举一个很简单的例子,就拿看医生来讲,看医生的整个流程必须是先挂号,再看病,再抓药,只要你进行看医生这个业务就必须按照这套流程进行.

工作流引擎架构设计

- - 掘金 架构
原文链接: 工作流引擎架构设计. 最近开发的安全管理平台新增了很多工单申请流程需求,比如加白申请,开通申请等等. 最开始的两个需求,为了方便,也没多想,就直接开发了对应的业务代码. 但随着同类需求不断增多,感觉再这样写可要累死人,于是开始了工作流引擎的开发之路. 查找了一些资料之后,开发了现阶段的工作流引擎,文章后面会有介绍.

JBPM之安装配置

- - Java - 编程语言 - ITeye博客
jbpm-4.X.zip) 下载下来,然后解压到你的硬盘上的什么地方. doc: 用户手册,javadoc和开发指南. examples: 用户手册中用到的示例流程. install: 用于不同环境的安装脚本. lib: 第三方库和一些特定的jBPM依赖库. jbpm.jar: jBPM主库归档. migration: 参考开发指南.

JBPM的表相关操作

- - 开源软件 - ITeye博客
--通过流程的编码获取该对应的流程定义. --通过单据号和ID获取任务实例(ID). --通过上条SQL的ID获取该实例下的所有任务. --通过上条SQL的ID获取该实例下的所有变量. --通过jbpm_processinstance 的 PROCESSDEFINITION_ 获取所有的节点. --通过jbpm_processinstance 的 PROCESSDEFINITION_ 获取所有的转向.

关于PHP的工作流引擎EZER简介

- - ITeye博客
        关于PHP的工作流引擎,除了三大主流开源:PorcessMaker(排名第一,因其有拖放式图形定义界面),RadiCore(基于PETRI NET)和CuteFlow以外,另外还有一个不为人知的,但却也是非常强大的开源,叫做EzerPhp..         EzerPhp的主页: http://code.google.com/p/ezerphp/.