JBPM

JBPM简介

什么是jbpm

JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。

为什么用jbpm

业务分析师和开发人员使用的是同一种语言来交谈,大大降低了开发的风险,如果要开发一个项目,速度也更快了,因为开发人员不用再将用户需求转化成软件设计了。其次,JBPM采用的不是一般的开发工具,而是自己的图形化开发工具,非常方便随时了解和掌握运行的进程。最后,JBPM的流程框架非常灵活,使用起来也非常安全,它经过了安全认证,因此可以保证一些商业机密不被

JBPM所需要的jar包

1.创建表结构

@Test
public void create(){

new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory();
System.out.println("ok");

}

2.创建ProcessEngine对象

    ProcessEngine pro=Configuration.getProcessEngine();

3.部署流程定义

@Test
    //部署流程定义
    public void getDeploy(){

        String re=pro.getRepositoryService()
                .createDeployment()
                .addResourceFromClasspath("jbpms.jpdl.xml")
                .addResourceFromClasspath("jbpms.png").deploy();
        System.out.println(re);
     }
    

4. 启动流程实例  通过key,key是process节点中的key,如果不写,默认为name的值

@Test
    public void testStart(){
         //启动流程实例  通过key,key是process节点中的key,如果不写,默认为name的值
      ProcessInstance pi=pro.getExecutionService().startProcessInstanceByKey("jbpms");
      System.out.println("start ok!");
      System.out.println("id:"+pi.getId()+",状态:"+pi.getState()+",流程定义的ID:"+pi.getProcessDefinitionId());
    }
    

5.查看任务列表

    @Test
    public void selectTask(){
        //查看任务列表
        String user="hh";
        String user2="boss";
        List<Task> tasks = pro.getTaskService().findPersonalTasks(user);
        for (Task task : tasks) {
            System.out.println("任务ID:"+task.getId()+"\t任务名称:"+task.getName()+"\t任务的办理人:"+task.getAssignee());
        }
        

6.查询当前任务所在点

    @Test
    public void findSelect(){
        //查询当前任务所在点
        String name=pro.getExecutionService().createProcessInstanceQuery().processInstanceId("jbpms.130001").uniqueResult().findActiveActivityNames().toString();
        System.out.println(name);
    }

7.办理任务

@Test
    public void testCompleteTask(){
        pro.getTaskService().completeTask("130002");
        System.out.println("ok");
    }

流程管理

public class ProcessTest {

    ProcessEngine pro=Configuration.getProcessEngine();

    @Test
    public void findAll(){
        //查询所有流程定义
        List<ProcessDefinition> list=pro.getRepositoryService().createProcessDefinitionQuery().list();

        for (ProcessDefinition pd : list) {
            System.out.println("id:"+pd.getId()+"\tname:"+pd.getName()+"\tkey:"+pd.getKey()+"\t版本号:"+pd.getVersion()+"\t部署的id:"+pd.getDeploymentId());
        }

    }

查看所有流程定义的信息

@Test

public void findAll(){

List<ProcessDefinition> 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());

}

}

删除指定id流程信息

  @Test
    public void deleteByid(){
        pe.getRepositoryService().deleteDeploymentCascade("100001");
        System.out.println("删除成功");
    }

删除指定key的所有流程信息

 @Test
    public void deleteByids(){
        //01.取出当前key对应的版本信息
    List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("jbpmtest").list();
        for (ProcessDefinition pd : list) {
              pe.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());
        }
        System.out.println("删除成功");
    }

获取流程图

 @Test
    public void getImage() throws Exception{
        String deploymentId="10001";
        String resouceName="jbpmtest.png";
        //根据id去查询所有对应的资源名
        Set<String> 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("成功");
    }
    

部署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);
    }

找到所有最新版本的流程定义

@Test
    public void findNewVersionInfo(){
        //查询所有
        List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery()//
        .orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)
                .list();
        Map<String,ProcessDefinition> map=new java.util.HashMap<String,ProcessDefinition>();
        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());
        }
    }

设置流程变量

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);
    }

 

时间: 2024-10-13 00:12:24

JBPM的相关文章

JBPM工作流(八)——流程实例(PI)Process Instance

/** * 流程实例 *    *  启动流程实例 *    *  完成任务 *    *  查询 *      *  查询流程实例 *      *  查询任务 *          *  查询正在执行的任务 *            *  查询所有的正在执行的任务 *            *  根据任务的执行人查询正在执行的任务 *            *  根据executionId查询正在执行的任务 *            *  根据piid查询正在执行的任务 *         

JBPM(四)——把流程部署到服务器上

当我们的业务流程被设计开发完毕之后,会有许多相关的文件"散落"在工程中,其中包括: 定义流程的JPDL文件 根据图形化流程定义同步生成的流程图片文件(PNG格式) 业务流程中用于人机交互的表单页面文件 事件监听器等用户自定义代码的Java类文件 其他流程资源文件,例如小图标.css样式表.脚本文件.属性文件等 jbpm4支持将流程定义及其相关资源打包一个JAR(Java归档)格式的文件,部署到服务器上(其实就是服务所连接的JBPM数据库中),然后流程定义就可以被执行了. 一.如何将流程

JBPM(一)——工作流基础

1.什么是工作流? 全部或者部分由计算机支持或自动处理的业务过程. 2.工作流的目标? 管理工作的流程以确保工作在正确的时间被期望的人员所执行 3.工作流的好处 例如: 简单的业务流程--订货流程: 1>客户提交采购订单 2>业务员执行订单处理 3>如果缺货,转工厂生产 4>仓库发货 5>物流发货 整个流程如图所示: 如果不使用工作流技术,从头开始开发这个订购流程的业务系统,我们需要做 每个活动节点都要开发交互界面和后台处理程序 每次活动的流转都需要硬性判断下一步活动节点及其

JBPM具体应用之decision节点的使用

JBPM工作流引擎为我们提供了许多的节点应用,每一个节点都有其不同的作用,其中有四个比较常用的节点,他们分别decision,fork,state和task.在本文中我们先介绍decision节点,余下的节点在下文介绍.decision节点,顾名思义是一个判断节点,通过判断条件来决定执行哪项任务,decision节点的使用方式又分为三种,他们依次是: (1)handler方式:使用handler标签将具体的执行方向交给java类来决定,jpdl文件如下: [html] view plaincop

Jbpm续结

工作流(work Flow),这两天简单回顾了一下,感觉还是挺轻松的.软件这个行业,首先需要我们知道的要广,知道哪些东西可以干什么,然后需要我们对此进行简单的理解,有了初步的了解后我们就不会对其发憷,从而上手就有了信心,进而就出现了所谓的"上手快",其实并不是说他多么聪明,动手能力多么强,而是他知道的多,用过类似的东西,首先接触有信心,其次就不断的学习,以解决问题为驱动,这样就形成了良性循环. 也就是说,对待技术我们要摆好心态,没有特别难的,尤其是你没有到哪些搞研究的阶段时.一些应用类

jbpm API的helloword实例

1.新建一个jbpm工程 2.在src目录下 新建一个helloworld包导入以下五个文件:helloworld.jpdl.xml <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <process name="helloworld" xmlns="http:/

工作流技术JBPM开发入门(一)

什么是工作流? 对于工作流的官方解释在这里就不在赘述了,通俗的说呢,工作流就是对于我们业务中的流程管理! 由来: 由于我们接触的大部分OA系统中存在着大量的工作流程,而这些流程夹杂着不同领域的业务,无论是状态还是一些操作等都由我们自己维护,而一旦发生业务流程上的变化,修改源代码变成为家常便饭,整个项目举步维艰,况且需求的变更又是无处不在,业务流程的变化更是不可避免. 那么说了这么多,工作流到底帮我们做了什么呢? 工作流的实现原理: 对于工作流,其实它并不是什么高大上的技术,它的实现原理很简单,其

jBPM4.4 no jBPM DB schema: no JBPM4_EXECUTION table. Run the create.jbpm.schema target first in the install tool.

jBPM4.4 no jBPM DB schema: no JBPM4_EXECUTION table. Run the create.jbpm.schema target first in the install tool. 开始钻研工作流的东西,第一颗钉子,笔记之: 错误信息: jBPM4.4 no jBPM DB schema: no JBPM4_EXECUTION table.   Run the create.jbpm.schema target first in the instal

JBPM工作流

1.工作流 工作流是一项分离业务操作和系统流程的技术.工作流由实体(Entity).参与者(Participant).流程定义(Flow Definition).工作流引擎(Engine) 四部分组成. ① 实体是工作流的主体,是需要随着工作流一起流动的物件(Object).例如,在一个采购申请批准流程中,实体就是采购申请单;在公文审批流程中,实体就是公文. ② 参与者是各个处理步骤中的责任人,可能是人,也可能是某个职能部门,还可能是某个自动化的设备; ③ 流程定义是预定义的工作步骤,它规定了实

第六节 JBPM版本控制以及Token对象

1.JBPM版本 2.Token 3.流程上下文