使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现。
工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递。
2.Jbpm4.4介绍
jbpm 即java Business Process Management,是基于java的业务流程管理系统引擎底层基于Active Diagram模型。jBPM4.4使用了hibernate(3.3.1版)。jBPM4.4共有18张表,用于存储业务流程数据。 概况如图:
官方主页:http://www.jboss.org/jbpm
3.准备jbpm环境
1>Eclipse3.5或以上版本,个人使用eclipse-jee-galileo-win32,下载地址
http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/galileosr2
2>Jbpm4.4
http://sourceforge.net/projects/jbpm/files/jBPM%204/jbpm-4.4/
3>eclipse流程设计器插件(GPD,Eclipse插件 )
插件位于上面下载的jbpm4.4包中,具体位置:jbpm-4.4\install\src\gpd\jbpm-gpd-site.zip
插件安装方法:
Help --> Install New Software-->Add 如图:
Archive-->指定本地jbpm-gpd-site.zip这个路径 如图:
勾选 JBPM JPDL4选项,且去掉Contact all update sites..选项-->Next 如图:
查看是否成功安装了插件:WindowPreference中是否有Jboss jBPM项
4>在Eclipse中添加jPDL4.4 Schema校验
流程定义文件的xsd文件的路径为:jbpm-4.4\src\jpdl-4.4.xsd
添加方法:
Window --> Preferences 如图:
4.Jbpm测试案例test
1>新建java项目Test
2>导入jar包
3>加入配置文件,具体可从下载的jbpm4.4包中拷贝,位置:jbpm-4.4\examples\src,本人引入三个配置jbpm.cfg.xml、jbpm.hibernate.cfg.xml、log4j.properties,修改jbpm.hibernate.cfg.xml文件,修改对应数据库配置。
4>建表,修改jbpm.hibernate.cfg.xml设置hibernate.hbm2ddl.auto为update
5>测试程序
新建流程图new --jbpm 4 process definetion 如图:
测试代码
package cn.yang.test;
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 Test1 {
//核心对象
/**
* 创建流程引擎对象
* .setResource(resource):表示加载类路径下的jbpm.cfg.xml
*/
ProcessEngine processEngine =new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
//部署流程定义
@Test
public void testDeployDefinitionProcess(){
String deployementID = processEngine.getRepositoryService()//
.createDeployment()//
.addResourceFromClasspath("helloworld/helloworld.jpdl.xml")//
.addResourceFromClasspath("helloworld/helloworld.png")//
.deploy();
System.out.println("deployementID:"+deployementID);
}
//启动流程实例
@Test
public void startProcessInstance(){
String processDefinitionKey = "helloword";
ProcessInstance pi = processEngine.getExecutionService()//
.startProcessInstanceByKey(processDefinitionKey);
System.out.println("id:"+pi.getId());//helloword.1001
System.out.println("key:"+pi.getKey());
System.out.println("processDefinitionId:"+pi.getProcessDefinitionId());
}
//查询我的个人任务列表
@Test
public void testFindMyTaskList(){
String userId = "test1";//指定任务办理人
List
.findPersonalTasks(userId);
for(Task task:list){
System.out.println("id:"+task.getId());//任务的ID
System.out.println("name:"+task.getName());//任务的名称
System.out.println("assignee:"+task.getAssignee());//任务的办理人
System.out.println("createTime:"+task.getCreateTime());//任务的创建日期
System.out.println("executionID:"+task.getExecutionId());//任务的执行ID(暂时就是流程实例ID)
}
}
//办理我的个人任务
@Test
public void testCompleteMyTask(){
String taskId = "30001";
processEngine.getTaskService()//
.completeTask(taskId);
System.out.println("办理完成!");
}
}