JBPM中的基本概念 JBPM工作流
程序员文章站
2022-03-17 16:53:16
...
前段时间学习JBPM,刚开始有点迷茫,不知道从何下手。现在回过头来和大家分享一下我的学习经验,希望可以对即将要学习JBPM而不知道如何学习的人一点点的帮助。
首先,JBPM是什么,有什么作用?
打开百度,即可搜索到:JBPM是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。可以看出JBPM主要的处理方向在流程上。
什么是流程? 比如一个报销流程, 由申请人发起申请,再由部门主管审批,部门经理审批,接着财务、出纳等等这样的一个审批过程就是一个流程。
好了,知道的JBPM的处理方向,接下来就需要了解JBPM由什么组成的。
一、JBPM的服务接口都可以通过流程引擎(ProcessEngine)获得,而流程引擎是由 org.jbpm.api.Configuration 来获得的。其构建方式有以下三种:
1、ProcessEngine pe = Configuration.getProcessEngine();
通过静态方法直接按照默认的配置文件名称构建流程引擎,该方法会直接加载classpath下名为jbpm.cfg.xml 的配置文件,通过该配置文件中的生命去构建引擎。
jbpm.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <import resource="jbpm.default.cfg.xml" /> <import resource="jbpm.businesscalendar.cfg.xml" /> <import resource="jbpm.tx.hibernate.cfg.xml" /> <import resource="jbpm.jpdl.cfg.xml" /> <import resource="jbpm.bpmn.cfg.xml" /> <import resource="jbpm.identity.cfg.xml" /> <!-- Job executor is excluded for running the example test cases. --> <!-- To enable timers and messages in production use, this should be included. --> <!-- <import resource="jbpm.jobexecutor.cfg.xml" /> --> </jbpm-configuration>
这个文件中的内容是对一些配置的引,现在也不用管里面都有什么东西,知道生成流程引擎需要此东西就可以了。
2、ProcessEngine processEngine = new Configuration().buildProcessEngine();通过实例化Cofiguration后的buildProcessEngine方法构建引擎,该方法与上述方法过程类似。
3、ProcessEngine pe = new Configuration(). setResource(“my.jbpm.cfg.xml”).buildProcessEngine();此方法通过自定义JBPM配置文件名称后,构建流程引擎,熟练之后可以使用这种方式。
二、获取了流程引擎之后,接下来要获取服务接口。JBPM中一共有以下5个服务接口:
1、RepositoryService repositoryService = processEngine.getRepositoryService();管理流程资源服务,该服务中定义了流程的发布、删除、挂起/恢复、查询等操作。
2、ExecutionService executionService = processEngine.getExecutionService();执行服务,该服务定义了流程多种方式的启动、等待流程的执行等操作。
3、TaskService taskService = processEngine.getTaskService();任务服务,该服务定义了流程任务列表、读写相关数据、完成任务等操作。
4、HistoryService historyService = processEngine.getHistoryService();历史服务,该服务定义了对流程实例运行历史进行访问,如已办列表等。
5、ManagementService managementService = processEngine.getManagementService();管理服务,该服务通常用来管理job
三、JBPM中的流程节点
1、启动节点start:每个流程里面至少有一个start节点,并且必须有一个向外的流向,这个流向会在流程启动的时候执行。
2、状态节点state:State是一个等待状态节点,流程实例执行到state节点时会一直处于等待状态,知道外部触发器调用API。state节点和其他节点不同,没有任何属性或元素。
3、决策节点decision:在多条路径中选择一条。一个决策节点拥有多个transition,当一个流向达到一个决策点时,会自动执行并决定交给哪个tansition。
4、结束节点end:流程的结束,只有流向达到结束节点时整个流程才会结束并且其他发布流程会放弃活动。一个流程可以有多个结束节点。
5、任务节点task:JBPM中最常用的节点之一,作用是为某人或某组人创建一个任务
6、子流程sub-process:创建一个子流程,当自流程执行完成之后,父流程的流向就会继续。
7、自定义节点custom:调用用户代码,实现一个自定义的活动行为。
8、分支节点fork:把一条执行路径分离成多条并发进行执行。
9、合并流程节点join:fork后一般会有join节点来合并流程,join节点中可以设置在执行该节点前需要到达该节点的执行数目。
10、事件event:流程节点的事件监听器,当流程通过这一节点时,会触发事件监听器,监听器不会在流程图中显示。
11、Java节点:当流程执行到Java节点时,会在执行该节点上配置相应的方法。如果有返回值,则通过var属性设置,我们可以通过variables拿到该返回值。
12、HQL节点:我们可以执行HQL Query并将结果集存放到variables中。
13、SQL节点:和HQL相似,不同的是SQL使用session.createSQLQuery(...) 。
14、mail节点:开发人员可以指定邮件内容,通过mail活动发送给多个收件人。
四、一些其它相关重要概念
1、流程变量
我们可以在流程启动的时候通过Map的形式绑定到流程中
Map<String,Object> vars = new HashMap<String,Object>(); vars.put("customer","John"); vars.put("amount",new Float(123.4)); executionService.startProcessInstanceByKey("leave",vars);2、流程中的用户
task节点中 我们可以设置 assignee来指定用户,或者使用candidate-group和candidate-urses来指定候选人
如:<task assignee="#{onwer}"></task>其中onwer在流程启动时绑定到流程变量的map中。
候选人,eg:
//获取服务 IdentityService identityService = pe.getIdentityService(); //创建用户组 identityService.createGroup("hr-dept"); //创建用户 identityService.createUser("John", "first name", "family name", "email"); //将用户加入组中 identityService.createMembership("John", "hr-dept");
上一篇: Java 身份证号码验证
下一篇: 使用Cookie和用户会话