一.开发环境的搭建
1.下载Jbpm4.4
1.1下载地址:
1.2解压后的目录
2.安装GPD插件(eclipse图形化流程设计器)
2.1打开eclipse--------选择help--------选择install new software
2.2选择add添加插件:
点击Archive选择插件目录:
插件目录所在位置就是下载的解压后的路径中找jbpm-4.4\install\src\gpd
2.3选择插件
后续直接下一步就行,等待安装插件。
1.配置运行时的环境
打开eclipse-------------preference
1.配置JPDL xml的schema dtd
4.1目的
有时在建jpdlxml文件的时候没有节点的提示,我们配置一下这个schema dtd,就有提示了。
4.2配置步骤
打开eclipse-------------preference
二.JBPM简介
2.1什么是jbpm
JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。
2.2为什么用jbpm
业务分析师和开发人员使用的是同一种语言来交谈,大大降低了开发的风险,如果要开发一个项目,速度也更快了,因为开发人员不用再将用户需求转化成软件设计了。其次,JBPM采用的不是一般的开发工具,而是自己的图形化开发工具,非常方便随时了解和掌握运行的进程。最后,JBPM的流程框架非常灵活,使用起来也非常安全,它经过了安全认证,因此可以保证一些商业机密不被泄露。
三.开发步骤
1.引入jar包
在jbpm4.4的解压包中根目录Jbpm的jar包还有lib文件夹中除report-engine,war包外所有jar包
注:因为Jbpm4.4是用Mysql作为DB的,如果要用Oracle作为DB需要引入相应的驱动包。
2.创建配置文件
/p>
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
org.hibernate.dialect.Oracle10gDialect
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@localhost:1521:orcl
jbpm
jbpm
update
true
3.画流程图
新建jpdl.xml文件
4.创建表结构
/**
* 创建表结构:有18张表
*/
@Test
public void createTable(){
// 读取配置文件
new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory();
}
18张表的含义:
http://www.cnblogs.com/a757956132/p/4774188.html
5.获取工作流引擎
//获取工作流引擎
//ProcessEngine processEngine = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
//获取工作流引擎
ProcessEngine processEngine =Configuration.getProcessEngine();
6.部署流程定义
//获取工作流引擎
//ProcessEngine processEngine = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
//获取工作流引擎
ProcessEngine processEngine =Configuration.getProcessEngine();
7.启动流程实例
//获取工作流引擎
//ProcessEngine processEngine = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
//获取工作流引擎
ProcessEngine processEngine =Configuration.getProcessEngine();
8.查询任务
@Test
public void selectMyStack(){
//根据指定的人员去查看他的任务
List stacks= processEngine.getTaskService().findPersonalTasks("部门经理");
System.out.println("经理的任务");
for (Task task : stacks) {
System.out.println("任务ID:"+task.getId()+"\t任务名称:"+task.getName()+"\t任务的办理人:"+task.getAssignee());
}
}
9.查询当前任务所在节点
@Test
public void getActivity(){
String name=processEngine.getExecutionService().createProcessInstanceQuery().processInstanceId("jbpm01.10001").uniqueResult().findActiveActivityNames().toString();
System.out.println("当前任务所在节点:"+name);
}
10.办理任务
@Test
public void saveTask(){
processEngine.getTaskService().completeTask("80002");
System.out.println("任务办理成功");
}
四.流程管理
4.1部署流程
4.2查看所有流程定义的信息
@Test
public void findAll(){
List list = pe.getRepositoryService().createProcessDefinitionQuery().list();
for (ProcessDefinition pd : list) {
/**
* id的格式 name-版本号
* name:jbpm.cfg.xml文件中根据点的name属性值
* key,如果在配置文件中指定了,那么就是根据点中的test的 值,如果不指定默认是name的值
* version版本号,同一个名称的第一个为1后续的自增
*/
System.out.println("id:"+pd.getId()+"\tname:"+pd.getName()+"\tkey"+pd.getKey()+"\t版本号:"+pd.getVersion()+"\t部署的id:"+pd.getDeploymentId());
}
}
4.3删除指定id流程信息
@Test
public void deleteByid(){
pe.getRepositoryService().deleteDeploymentCascade("100001");
System.out.println("删除成功");
}
4.4删除指定key的所有流程信息
@Test
public void deleteByids(){
//01.取出当前key对应的版本信息
List list = pe.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("jbpmtest").list();
for (ProcessDefinition pd : list) {
pe.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());
}
System.out.println("删除成功");
}
4.5获取流程图
@Test
public void getImage() throws Exception{
String deploymentId="10001";
String resouceName="jbpmtest.png";
//根据id去查询所有对应的资源名
Set resourceNames = pe.getRepositoryService().getResourceNames(deploymentId);
for(String item: resourceNames){
System.out.println("资源名称:"+item);
}
InputStream in=pe.getRepositoryService().getResourceAsStream(deploymentId, resouceName);
OutputStream os=new FileOutputStream("D:\\1.png");
int a=in.read();
while (a!=-1) {
os.write(a);
a=in.read();
}
in.close();
os.close();
System.out.println("成功");
}
4.6部署zip格式的资源
public void addZipResource(){
InputStream is=this.getClass().getClassLoader().getResourceAsStream("two.zip");
ZipInputStream zs=new ZipInputStream(is);
String id= pe.getRepositoryService().createDeployment().addResourcesFromZipInputStream(zs).deploy();
System.out.println("部署成功:deploymentid:"+id);
}
4.7找到所有最新版本的流程定义
@Test
public void findNewVersionInfo(){
//查询所有
List list = pe.getRepositoryService().createProcessDefinitionQuery()//
.orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)
.list();
Map map=new java.util.HashMap();
for (ProcessDefinition item : list) {
map.put(item.getKey(),item);
}
for (ProcessDefinition pd : map.values()) {
System.out.println("id:"+pd.getId()+"\tname:"+pd.getName()+"\tkey"+pd.getKey()+"\t版本号:"+pd.getVersion()+"\t部署的id:"+pd.getDeploymentId());
}
}
4.8设置流程变量
public void setVariable() {
pe.getExecutionService().setVariable("jbpm01.90001", "请假天数", 18);
}
@Test
public void getVariable() {
Integer days = (Integer) pe.getExecutionService().getVariable("jbpm01.90001", "请假天数");
System.out.println(days);
}
五.JBPM和SSH整合
目的:整合jBPM的目的就是能够通过注入的方式得到ProcessEngine实例,因为ProcessEngine是jbpm 的核心.
1.关于jar包
在Tomcat/lib目录下添加jBPM软件包里的下列三个jar包,删掉Tomact/lib下的el-api
2.关于配置文件
修改jbpm.cfg.xml文件
修改applicationcontext.xml文件
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
classpath:jdbc.properties
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
org.hibernate.dialect.Oracle10gDialect
true
true
update
org.springframework.orm.hibernate3.SpringSessionContext
jbpm.repository.hbm.xml
jbpm.execution.hbm.xml
jbpm.history.hbm.xml
jbpm.task.hbm.xml
jbpm.identity.hbm.xml
factory-method="createProcessEngine" />
class="org.springframework.orm.hibernate3.HibernateTransactionManager">