JBPM「建议收藏」

JBPM

大家好,又见面了,我是全栈君。

JBPM简介

什么是jbpm

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

为什么用jbpm

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

 

JBPM所需要的jar包

JBPM「建议收藏」

JBPM「建议收藏」

JBPM「建议收藏」

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:\.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);
    }

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Smile-123/p/6150630.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108733.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Java零基础快速入门的方法

    Java零基础快速入门的方法各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java。因此,也是吸引了不少年轻人投入到Java的学习之中。​所以,今天就跟大家分享一份系统的Java学习教程路线图,零基础也可以无压力的走进Java,学习Java!第一阶段:Java语言入门到精通学习任何一门编程语言,首先要学习的是基础语法,开启Java学习的第一步,当然就是深入掌握计算机基础、编程基础语法,面向对象,集合、IO流、线程、并发、异常及网络编程,这些我

  • maven打包加时间戳[通俗易懂]

    maven打包加时间戳[通俗易懂]maven打包加时间戳方法总结基于Maven的项目,发布时需要打包,如tar.gz。web项目打成war格式包。每次打包时希望自己加上时间戳,假如我的项目名是myproject,默认打包后名为myproject.war。而我希望的名字为myproject-1.0.0-20160217。方便以后对包进行查找与管理,如何实现这种效果呢?

  • HandlerSocket_handlermapping原理

    HandlerSocket_handlermapping原理HandlerSocket的应用场景:MySQL自身的局限性,很多站点都采用了MySQL+Memcached的经典架构,甚至一些网站放弃MySQL而采用NoSQL产品,比如Redis/MongoDB等。不可否认,在做一些简单查询(尤其是PK查询)的时候,很多NoSQL产品比MySQL要快很多,而且前台网站上的80%以上查询都是简洁的查询业务。MySQL通过HandlerSock…

  • Oracle ORA-01017: invalid username/password;logon denied问题解决「建议收藏」

    Oracle ORA-01017: invalid username/password;logon denied问题解决「建议收藏」问题描述:ORA-01017:invalidusername/password;logondenied问题分析:1、该登录用户没有权限。解决办法:第一步,打开SQLPlus第二步,输入用户名和密码。第三步,输入alterusersystemaccountlock;给用户解锁。第四步,输入connectsystem/123456assysdba给用户授权。注:system是用户名,123456是用户的密码。…

  • ubuntu 16.04 更改系统语言为简体中文[通俗易懂]

    ubuntu 16.04 更改系统语言为简体中文[通俗易懂]使用VMwareWorkstation安装64位ubuntu16.04系统,系统默认使用英文,而使用virtualbox安装,可以选择使用简体中文作为系统语言。由于英文水平有限,所以使用简体中文作为系统语言。下面是VMwareWorkstation安装的ubuntu16.04的系统语言由英文改为中文的教程。前前后后折腾的不轻,也许是水平问题吧。注意:里面有一个坑,勾选简体中文的同时…

  • 热部署和冷部署有什么区别_weblogic热部署

    热部署和冷部署有什么区别_weblogic热部署热部署,就是不需要停掉服务,可以线上改,改完立马生效。

    2022年10月29日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号