关闭

Jbpm工作流介绍

标签: Jbpm工作流Jbpm4.4
1817人阅读 评论(1) 收藏 举报
分类:

工作流介绍:

  • 工作流(workFlow),就是"业务过程的部分或整体在计算机应用环境化的自动化"。它主要解决的是"使多个参与者之间按照某种预定义的规则转递文档,信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现"。
    • 通俗的说就是"流程就是将多个人在一起合作完成的事情的步骤,把步骤变成计算机能理解的形式就是工作流。"
  • 工作流管理系统(WFMS,workflow Management System)的主要功能是通过计算机技术的支持去定义,执行和管理工作流,协调工作流执行过程中工作间以及群体成员之间的信息交互。应能提供以下三个方面的功能支持:
    • 定义工作流:包括具体的活动,规则等。
    • 运行控制功能:在运行环境中管理工作流程,对工作流程过程中的活动进行调度。
    • 运行交互功能:指在工作流运行中,WFMS与用户(活动的参与者)及外部应用程序工具交互的功能。
  • 采用工作流关系的优点:
    • 提高系统的柔性,适应业务流程的变化。
    • 实现更好的业务过程控制,提高顾客服务质量。
    • 降低系统开发和维护成本。
  • 工作流框架有:JBPM(Java Business Process Management),OSWorkflow,ActiveBPEL,YAWL等。

Jbmp快速入门:

  • 首先是环境的搭建:在Jbmp下载下载。下载jbmp4.4的。下载下来进行解压得到一个Jbmp4.4文件。先是在eclipse或myeclipse中安装流程设计器,myeclipse是绿色版的好像安装不了。安装方法见另外一篇博客。另外还要添加xsd文件,xml文件约束具体也见另外一篇博客
  • 现在,开始导入Java包。显示核心包jbpm.jar。还有就是lib下面的大部分包,不是所有的,还有这个文件下有些不是Java包。如下介绍:
    • JBPM_HOME/lib/*.jar,不添加以下jar包:servlet-api.jar, junit.jar。其中junit.jar一定不要添加,因为是3.8.2版本,与我们使用的junit4有冲突。
    • 由于slf4j-jdk14.jar、slf4j-log4j12.jar都具有处理日志的功能,会避免出现冲突,所以可去掉slf4j-jdk14.jar。
    • 所使用的数据库对应的驱动的jar包(第2步所添加的jar包中已包含mysql的jdbc驱动jar包)。
  • 添加配置文件:
    • 配置文件可以从JBPM_HOME/examples/src/中拷贝: jbpm.cfg.xml、 logging.propertiehibernate包下/project/etc/log4j.properties即可)、 jbpm.hibernate.cfg.xml,配置文件放到项目的src下。
    • 修改logging.properties中的日志输出级别s(拷贝为Error: log4j.rootLogger=ERROR, stdout
    • 修改jbpm.hibernate.cfg.xml中的数据库连接信息。如果使用MySql,使用的方言一定要是org.hibernate.dialect.MySQL5InnoDBDialect。
    • 数据库连接编码一定要是UTF-8。否则可能会在部署含有中文字符的流程定义时会抛异常,说sql语法错误。
    • 连接数据库的时候,建议使用
          jdbc:mysql://localhost:3306/itcastjbpm?useUnicode=true&characterEncoding=utf8可防止存储到数据库的值是乱码
    • 注意:如使用MySQLDialect,就会在流程实例结束时抛异常:com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException:Cannot delete or update a parent row: a foreign key constraint fails(`jbpm44_20101028/jbpm4_execution`, CONSTRAINT `FK_EXEC_INSTANCE` FOREIGN KEY(`INSTANCE_`) REFERENCES `jbpm4_execution` (`DBID_`))。。


  • 初始化数据库:
    • 执行sql脚本文件${JBPM4.4_HOME}/install/src/db/create/jbpm.*.create.sql。
    • 使用Hibernate的自动建表,在jbpm.hibernate.cfg.xml中配置:hibernate.hbm2ddl.auto=update。
      可以初始化程序创建表,例如:
      public void testCreateSchema() { // hbm2ddl.auto=update
      new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory();
      }
    • 因为Jbmp是底层是基于Hibernate的。
  • 到此环境搭建完成。数据库会生成18张表。
  • 先通过上面安装的gdp软件画一张简单的流程图,安装成功的话,在新建文件中有一个JBoss Jbpm,只需输入名称就行。如下:
  • 保存,通过source可以查看生成的xml文件。这里点击具体的任务在properties视图,选择general,name。输入“申请”。assignment中的type选择assignee。expression输入“张三”。第二个也是一样。选择general,name。输入“经理批阅”,assignment中的type选择assignee。expression输入“李四”。
  • 在创建一个Java类就可以了,具体内容如下:
    package cn.itcast.hello;
    
    import java.util.List;
    
    import org.jbpm.api.Configuration;
    import org.jbpm.api.ProcessEngine;
    import org.jbpm.api.ProcessInstance;
    import org.jbpm.api.task.Task;
    import org.junit.Test;
    
    public class TestClass {
    	//得到流程引擎
    	ProcessEngine engine = org.jbpm.api.Configuration.getProcessEngine();
    	/***
    	 * 一。部署流程定义
    	 */
    	@Test
    	public void deploymentPorcessDefintion(){
    		String deploymentId = engine.getRepositoryService()//与部署相关对象和流程定义相关Service
    		.createDeployment()//创建部署对象
    		.addResourceFromClasspath("cn\\itcast\\hello\\helloworld.jpdl.xml")//从类路径下加载资源文件
    		.addResourceFromClasspath("cn\\itcast\\hello\\helloworld.png")
    		.deploy();//完成部署
    		System.out.println("部署对象ID:"+deploymentId);
    		
    	}
    	/***
    	 * 二。启动流程实例
    	 */
    	@Test
    	public void startProcessInstance(){
    		String key="helloworld";
    		ProcessInstance pi = engine.getExecutionService()//管理流程实例和执行对象
    					.startProcessInstanceByKey(key);//按照流程的key启动流程实例,默认会按照最新版本的key启动流程实例
    		System.out.println("流程实例Id"+pi.getId());
    		System.out.println("流程定义的ID:"+pi.getProcessDefinitionId());
    	}
    	/**
    	 * 查询我的个人任务列表
    	 */
    	@Test
    	public void findMyPersonTaskList(){
    		String userId="张三";
    		List<Task> listTask= engine.getTaskService()//与任务相关的service
    				.findPersonalTasks(userId);
    		if(listTask!=null&&listTask.size()>0){
    			for(Task task:listTask){
    				System.out.println("任务id:"+task.getId());
    				System.out.println("任务名称:"+task.getName());
    				System.out.println("任务的办理人:"+task.getAssignee());
    			}
    		}
    	}
    	/***
    	 * 完成我的个人任务
    	 */
    	@Test
    	public void complateMytask(){
    		String taskId = "20001";
    		engine.getTaskService().//与任务相关的service
    			completeTask(taskId);//使用任务Id,完成任务。
    		System.out.println("完成任务,任务id是:"+taskId);
    	}
    }
    

  • 这个时候查看数据库表,就会有数据。但是通过上面的流程查看,这个任务并没有完成。因为需要经过两个人批阅。所以可以查看jbpm4_task表来查看任务Id。接下来是李四完成任务,在执行完成我的个人任务方法就行。
  • 到此一个简单的入门就OK了。




0
1
查看评论

工作流-jbpm入门例子

原文地址:http://blog.csdn.net/hxirui/article/details/1221911 1.      jBPM的简单介绍 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于H...
  • I_Am_Zou
  • I_Am_Zou
  • 2016-09-07 15:04
  • 7574

(jbpm4)工作流引擎描述

JPBM是JBOSS旗下的一个开源的基于hibernate的工作流引擎。工作流就是在日常生活中,我们一些常见的如请假流程、采购流程、入职流程,通俗的来讲就是一些在现实生活中的流程以信息化以程序的方式实现。 一个工作流首先需要进行流程定义,流程定义是由节点和跳转组成的,节点又可以称为环节、活动节点、...
  • wg200
  • wg200
  • 2016-07-15 19:13
  • 552

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

最近发现这篇文章挺多人看的,也挺多人有疑问,我很想帮你们解答,但是很无奈,这篇文章只是我当时在自学时看的一个教程的记录,当时对JBPM也没有深入去学习,并且到现在也已经快4年了,这期间我都没用过JBPM,因此JBPM的东西我也忘得差不多了。庆幸的是我把当时看的教程保存了下来,因此如果对此文章有疑问的...
  • v123411739
  • v123411739
  • 2014-05-02 17:32
  • 43917

jbpm工作流框架

整体流程: 用户->流程设计器->流程定义说明文档(xml和png)->工作流引擎(解释和执行工作流,提供的api支持外部调用)->流程信息保存到数据库中(hibernate或mybatis框架) 开发流程: 1:创建一个java项目 2:导入依赖包(15个jar包) 3...
  • u011337556
  • u011337556
  • 2017-08-11 17:08
  • 196

宅急送 项目第八天 JBPM工作流框架

项目第八天和项目第九天 学习 JBPM 理论部分 项目第十天 权限管理模块 项目第十一天 项目第十二天 JBPM 应用 1. 工作流框架概述1.1. 什么是工作流工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化” 工作流技术 是 OA 系统中最关键的一环 !!!...
  • CSDN_AF
  • CSDN_AF
  • 2017-04-23 22:59
  • 1056

jbpm工作流入门教程

jbpm入门例子新一篇: windows下svn-1.4.0环境布置和eclipse集成function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:...
  • huxin1
  • huxin1
  • 2008-04-25 23:13
  • 16859

JBPM(二)---JBPM工作流基本操作

流程定义的管理: 将定义业务流程,部署到 jbpm框架中 (流程定义 jpdl.xml 描述文件) 通过gpd 插件 先根据业务流程,绘制流程图 (holiday.jpdl.xml 和 holiday.png )流程定义部署 : 先获得 ProcessEngine 对象,再获得对应 Servi...
  • qq_36414013
  • qq_36414013
  • 2017-06-08 21:54
  • 1688

Java工作流引擎学习----JBPM(一)

Java工作流引擎学习----JBPM  一、简介 主动性编程: 方法  --->  类 --->  jar ---> 类库    特性:...
  • qq_26504875
  • qq_26504875
  • 2016-01-09 10:53
  • 6127

工作流总结(三)JBPM 六个流程服务接口

在说明六个核心服务之前,需要提到的是ProcessEngine对象。类似一个工厂提供流程过程中所需的服务,抽象工厂设计模式的体现。而ProcessEngine对象是由Configruation对象来创建的,ProcessEngine是一个线程安全的对象,保证我们在开发过程中可以将这个对象放置到静态对...
  • chenfanglincfl
  • chenfanglincfl
  • 2015-10-12 23:40
  • 1890

工作流--JBPM简介及开发环境搭建

一、 工作流简介 项目中不断的接触工作流,点点滴滴积累了一些,下面把一些学习到的东西整理记录下来。 工作流一般的适用场景:公文流转、行政审批、订单处理、产品研发、制造过程等。用专业一点的语言来描述工作流就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与...
  • StubbornPotatoes
  • StubbornPotatoes
  • 2013-06-30 23:11
  • 3039
    欢迎关注个人微信号
      欢迎关注微信账号:在路上的coder .每天一篇java相关或互联网相关的文章




    个人资料
    • 访问:825949次
    • 积分:2956
    • 等级:
    • 排名:第14098名
    • 原创:87篇
    • 转载:4篇
    • 译文:0篇
    • 评论:26条
    资源分享地址
    个人博客地址
    博客专栏
    最新评论