前言
之前做.net的时候,工作流用过.net的workflow。在Java中,用到的工作流框架有Jbpm、OSWorkflow、ActiveBPEL、YAWL等,下面就简单介绍一下Jbpm框架实现的工作流。
工作流
工作流就是业务过程的部分或整体在计算机应用环境下的自动化,它主要解决的是使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行的问题,从而提高工作效率。
工作流管理系统(Workflow Manage System)的主要功能是通过计算机技术的支持去定义、执行、管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。工作流管理系统是定义、创建、执行工作流的系统,应该提高一下三个方面的功能支持:
1、定义工作流:包括具体的活动规则等
2、运行控制功能:在运行环境中管理工作流过程,对工作流过程中的活动进行调度。
3、运行交互功能:指在工作流运行中,WfMS与用户及外部应用程序工具交互的功能。
Jbpm
Jbpm即Java Business Process Management,是基于Java的业务流程管理系统。Jbpm是比较流行的一款开源工作流引擎,引擎底层基于Active Diagram模型,同样Jbpm使用了hibernate,因此可以很好的支持主流数据库。
下面就以Jbpm4.4为例,简单介绍Jbpm工作流执行过程。
准备开发环境
1、安装JDK:Java项目都要安装JDK,Jbpm4.4要求JDK版本要在JDK5.0或者以上版本。
2、安装ANT:Ant是Jbpm开发必须的工具,安装过程类似于Tomcat,下载zip包,解压到某一个路劲下,配置系统变量ANT_HOME,指向解压的路径,并把ANT_HOME路径放到Path下。
3、安装JBPM:Jboss Jbpm Starters Kit是一个综合包,包括 jBPM 软件包、开发插件、一个配置好了的基于 JBoss 的 jBPM 示例、一些数据库配置文件示例。
jbpm:jBPM 的软件包
jbpm-bpel:只含有一个网页
jbpm-db:各种数据库hibernate配置文件示例,有些还包含了相应的jdbc驱动程序。
jbpm-designer:辅助开发jBPM的Eclipse插件,具体在jbpm-gpd-feature子目录中
jbpm-server:一个已经配置好了的基于JBoss的jBPM示例
4、配置Jbpm配置文件:
添加Jbpm配置文件到编译路径下,一个jbpm.cfg.xml。另一个jbpm.hibernate.cfg.xml,配置数据库连接信息。
jbpm.cfg.xml:
[html] view plain copy print?
jbpm.hibernate.cfg.xml:
[html] view plain copy print?
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
org.hibernate.dialect.MySQL5InnoDBDialect
com.mysql.jdbc.Driver
jdbc:mysql:///jbpm4_20120229
root
root
update
4、创建数据库
[java] view plain copy print?
public void createSchema() throws Exception { // hbm2ddl.auto=update
new org.hibernate.cfg.Configuration()//
.configure("jbpm.hibernate.cfg.xml")//
.buildSessionFactory();
}
创建完成后,会在库中生成Jbpm的18张表,用来存放工作流的信息。
5、使用工作流
补充:
首先需要创建工作流引擎,然后部署流程定义,接下来启动流程实例,最后就可以查看任务列表和办理任务了。Jbpm工作流所有的操作都是通过Service API来完成的,它的API有以下几类:
[java] view plain copy print?
processEngine.getRepositoryService();//管理流程定义的相关操作(部署,查询,删除等)
processEngine.getExecutionService();//管理执行的,流程实例的管理操作,一次具体执行的信息,包括启动、推进、删除Execution等操作
processEngine.getTaskService();//管理任务的(查询任务,办理任务)
processEngine.getHistoryService();//管理历史的数据(执行完的数据管理,主要是查询)
[java] view plain copy print?
//创建工作流引擎
private static ProcessEngine processEngine = new Configuration()//
.setResource("jbpm.cfg.xml")//
.buildProcessEngine();
//部署流程定义
public void deployProcessDefintion() throws Exception {
processEngine.getRepositoryService()//
.createDeployment()//
.addResourceFromClasspath("helloworld/helloworld.jpdl.xml")//定义好的工作流程生成的xml文件
.addResourceFromClasspath("helloworld/helloworld.png")//定义好的工作流程生成的图片文件
.deploy();
}
//启动流程实例
public void startProcessInstance() throws Exception {
processEngine.getExecutionService().startProcessInstanceByKey(
"helloworld"); //传入工作流程的key值,默认为name
}
//查看个人任务列表
public void findMyPersonalTaskList() throws Exception {
String userId = "员工";
//查询
List
taskList = processEngine.getTaskService().findPersonalTasks( userId);
//显示
System.out.println("============= "+userId+"的个人任务列表============");
for (Task task : taskList) {
System.out.println("id=" + task.getId()//
+ ", name=" + task.getName()// 人物名称
+ ", assignee=" + task.getAssignee()); //办理人
}
}
//任务办理
public void completeTask() throws Exception {
String taskId = "30001";
processEngine.getTaskService().completeTask(taskId);
}
到这里为止,工作流的过程就执行完了。在查看个人任务列表这一步,输入不同的用户Id,可以得到不同用户的任务列表。办理任务时,根据不同的任务id可以从库中得到相应任务。
总结
Jbpm作为Java中的工作流框架,和.NET中的WorkFlow是有很大相似之处的。首先都要用户自己定义一个流程,然后将这个流程部署,接着需要启动该流程,最后这个流程就可以被使用。在.NET中,10的VS是有工作流控件的,但是到了12版本的VS就没有可视化界面了。在Java中,只要给Eclipse安装Jbpm的流程设计器,即可看到可视化的流程定义界面,同时还可以生成xml和图片。有了.NET的基础,再理解Jbpm就简单多了。