JBPM4 学习笔记 转
关于JBPM工作流
- 2. JBPM
jBPM,全称是Java Business Process Management,是一种基于J2EE的轻量级工作流管理系统。JBPM使用Hibernate进行数据库操作,也就是说只要Hibernate支持的数据库它都可以使用,数据库主要是存放流程的定义,流程实例的信息,还有用户的信息等。
Jbpm工作流适用于:
n 项目流程比较多,流程复杂的项目。
n 系统运行和维护、升级时,流程可能需要修改、调整和跟踪、控制的项目。
全称是jBoss jPBM Process Definition Language,这种一种构建于jBPM架构之上的流程语言之一。jPDL提供了图形化处理的界面,跟VB语言差不多,拖拖拽拽就能做出个东西来,非常直观。这里面提供了很多图形化节点:
start和end节点在每个jBPM项目中都会用到,分别为开始节点和结束节点;
- //如果是读取默认的jbpm.cfg.xml文件
- ProcessEngine engine = Configuration.getProcessEngine();
- //如果不是读取默认的jbpm.cfg.xml文件
- ProcessEngine engine = new Configuration()
- .setResource("ccjbpm.cfg.xml")
- .buildProcessEngine();
- RepositoryService repositoryService = processEngine.getRepositoryService();
- repositoryService.createDeployment()
- .addResourceFromClasspath("cn/javass/jbpm4/hello/hello.jpdl.xml")
- .deploy();
- ProcessEngine processEngine = Configuration.getProcessEngine();
- RepositoryService repositoryService = processEngine.getRepositoryService();
- List<ProcessDefinition> pdList = repositoryService.createProcessDefinitionQuery().list();
- for (ProcessDefinition pd:pdList){
- System.out.println("id:"+pd.getId());
- System.out.println("name:"+pd.getName());
- System.out.println("version:"+pd.getVersion());
- System.out.println("deploymentId:"+pd.getDeploymentId());
- System.out.println("---------------");
- }
- ProcessEngine processEngine = Configuration.getProcessEngine();
- ExecutionService executionService = processEngine.getExecutionService();
- Map map = new HashMap();
- map.put("pm","ProjectManager");
- map.put("dm", "DepartmentManager ");
- map.put("ceo", "Manager");
- executionService.startProcessInstanceByKey("MyProcess",map);
- ProcessEngine processEngine = Configuration.getProcessEngine();
- ExecutionService executionService = processEngine.getExecutionService();
- List<ProcessInstance> piList = executionService.createProcessInstanceQuery().list();
- for (ProcessInstance pi : piList) {
- System.out.println("id:"+pi.getId());
- System.out.println("activeActivityNames:“+pi.findActiveActivityNames());
- System.out.println("state:"+pi.getState());
- System.out.println("-----------------");
- ProcessEngine processEngine = Configuration.getProcessEngine();
- TaskService taskService = processEngine.getTaskService();
- List<Task> list = taskService.createTaskQuery().list();
- for(Task t : list){
- System.out.println("activityName="+t.getActivityName()+",user="
- +t.getAssignee()+",id="+t.getId());
- ProcessEngine processEngine = Configuration.getProcessEngine();
- TaskService taskService = processEngine.getTaskService();
- String taskId = “70003”;//这个是流程运行中生成的任务id
- Map map = new HashMap();
- map.put("dmResult", 1);
- map.put("days", 15);
- taskService.completeTask(taskId,map);
- ProcessEngine engine = Configuration.getProcessEngine();
- HistoryService hs = engine.getHistoryService();
- List<HistoryProcessInstance> list = hs.createHistoryProcessInstanceQuery().list();
- for(HistoryProcessInstance hpi : list){
- System.out.println("state="+hpi.getState()+" ,pdid=“+hpi.getProcessDefinitionId()+
- ",piid="+hpi.getProcessInstanceId()+",startTime="+hpi.getStartTime());
- }
- ExecutionService exe = engine.getExecutionService();
- Execution e = exe.createProcessInstanceQuery()
- .processInstanceId(piid).uniqueResult()
- .findActiveExecutionIn(“state活动名称");
- exe.signalExecutionById(e.getId());
- <decision name="evaluate document">
- <handler class="org.jbpm.examples.decision.handler.ContentEvaluation" />
- <transition name="good" to="submit document" />
- <transition name="bad" to="try again" />
- <transition name="ugly" to="give up" />
- </decision>
- public class ContentEvaluation implements DecisionHand
- public String decide(OpenExecution execution) {
- String content = (String) execution.getVariable("content");
- if (content.equals("you're great")) {
- return "good";
- }
- if (content.equals("you gotta improve")) {
- return "bad";
- }
- return "ugly";
- }
- }
- <decision>
- <transition name="good" to="submit document" />
- <transition name="bad" to="try again" />
- <transition name="ugly" to="give up" />
- </decision>
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("content", "good");
- ProcessInstance processInstance =
- executionService.startProcessInstanceByKey("DecisionExpression", variables);
- <decision name="evaluate document">
- <transition to="submit document">
- <condition expr="#{content=="good"}" />
- </transition>
- <transition to="try again">
- <condition expr="#{content=="not so good"}" />
- </transition>
- <transition to="give up" />
- </decision>
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("content", "good");
- ProcessInstance processInstance =
- executionService.startProcessInstanceByKey("DecisionConditions", variables);
- <task name="review" assignee="#{order.owner}" > 《或者assignee="johndoe"》
- <transition to="wait" />
- </task>
- public class Order implements Serializable {
- String owner;
- public Order(String owner) {
- this.owner = owner;
- }
- public String getOwner() {
- return owner;
- }
- public void setOwner(String owner) {
- this.owner = owner;
- }
- }
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("order", new Order("johndoe"));
- ProcessInstance processInstance = executionService
- .startProcessInstanceByKey("TaskAssignee", variables);
- List<Task> taskList = taskService.findPersonalTasks("johndoe");
- <task name="review" candidate-groups="sales" >
- <transition to="wait" />
- </task>
- IdentityService identityService = processEngine.getIdentityService();
- identityService.createGroup("sales");
- identityService.createUser(“zhang", “zhang", “san");
- identityService.createUser(“li", “li", “si");
- identityService.createMembership(“zhang", "sales");
- identityService.createMembership(“li", "sales");
- taskService.findGroupTasks("zhang");
- taskService.findGroupTasks("li");
- <task name="review" g="96,16,127,52">
- <assignment-handler class="org.jbpm.examples.task.assignmenthandler.AssignTask">
- <field name="assignee">
- <string value="johndoe" />
- </field>
- </assignment-handler>
- <transition to="wait" />
- </task>
- public class AssignTask implements AssignmentHandler{
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) { this.name = name; }
- public void assign(Assignable assignable, OpenExecution execution)
- throws Exception {
- assignable.setAssignee(name);
- }
- }
- <java g="246,135,92,52" name="java1" class="cn.javass.test.java.MyJava"
- method="sayHello" var="manager">
- <field name="user1"><object expr="#{user1}"/></field>
- <field name="user2"><string value="user2"/></field>
- <arg><string value="xyz"/></arg>
- <arg><object expr="#{abc}"/></arg>
- <transition to="task1"/>
- </java>
- public class MyJava{
- private String user1;
- private String user2;
- …user1和user2的setter
- public String sayHello(String arg1,String arg2){
- System.out.println("user1=="+user1);
- System.out.println("user2=="+user2);
- System.out.println("arg1=="+arg1);
- System.out.println("arg2=="+arg2);
- return “Hello";
- }
- }
- <sql g="192,438,92,52" name="sql1" unique="true" var="sqlV">
- <query>
- select * from tbl_user where uuid=:uuid
- </query>
- <parameters>
- <object name="uuid" expr="#{uuid}"></object>
- </parameters>
- <transition to="hql1"/>
- </sql>
- <hql name="hql1" g="404,457,92,52" unique="true" var="hqlV">
- <query>
- select o from Parent o where o.id=:id
- </query>
- <parameters>
- <string name="id" value="22"/>
- </parameters>
- <transition to="task2"/>
- </hql>
- <foreach name="foreach1" in="D1,D2,D3" var="nowDep">
- <transition to="task5"/>
- </foreach>
- <task name="task5">
- <transition to="join1"/>
- </task>
- <join name="join1" multiplicity="3">
- <transition to="task6"/>
- </join>
- <on event="start">
- <event-listener class="org.jbpm.examples.eventlistener.LogListener">
- <field name="msg"><string value="start on process definition"/></field>
- </event-listener>
- </on>
- <start>
- <transition to="wait"/>
- </start>
- <state name="wait">
- <on event="start">
- <event-listener class="org.jbpm.examples.eventlistener.LogListener">
- <field name="msg"><string value="start on activity wait"/></field>
- </event-listener>
- </on>
- <on event="end">
- <event-listener class="org.jbpm.examples.eventlistener.LogListener">
- <field name="msg"><string value="end on activity wait"/></field>
- </event-listener>
- </on>
- <transition to="park">
- <event-listener class="org.jbpm.examples.eventlistener.LogListener">
- <field name="msg"><string value="take transition"/></field>
- </event-listener>
- </transition>
- </state>
- public class MyEventListener implements EventListener{
- public void notify(EventListenerExecution exection) throws Exception {
- System.out.println("走出Decistion");
- }
- }
JBPM4 学习笔记 转的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- FFMPEG学习----分离视音频里的PCM数据
/** * 参考于:http://blog.csdn.net/leixiaohua1020/article/details/46890259 */ #include <stdio.h> # ...
- 基于TensorFlow的MNIST手写数字识别-深入
构建多层卷积神经网络时需要多组W和偏移项b,我们封装2个方法来产生W和b 初级MNIST中用0初始化W和b,这里用噪声初始化进行对称打破,防止产生梯度0,同时用一个小的正值来初始化b避免dead ne ...
- BeautifulSoup入门
BeautifulSoup库入门 BeautifulSoup库的理解 BeautifulSoup库是解析.遍历.维护”标签树”的功能库 示例代码: from bs4 import BeautifulS ...
- JMeter+Grafana+Influxdb搭建可视化性能测试监控平台(待继续完善。。。)
influxdb下载.安装.配置.启动 InfluxDB是一个当下比较流行的时序数据库,InfluxDB使用 Go 语言编写,无需外部依赖,安装配置非常方便,适合构建大型分布式系统的监控系统. 下载: ...
- HSRP 详解
简介 HSRP(Hot Standby Router Protocol 热备份路由器协议)是Cisco的专有协议.HSRP把多台路由器组成一个“热备份组”,形成一个虚拟路由器.这个组内只有一个路由器是 ...
- centos7.5下一键安装nginx-1.8.1
#!/usr/bin/bash #安装依赖软件 yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg ...
- matplotlib如何显示中文
问题:matplotlib不能渲染中文 想设定为中文字体,网上搜索的方法几乎都是下面这样,已经把字体拷贝到了程序目录下了,然而并没有生效 plt.rcParams [ font.sans-serif' ...
- Cassandra 在 360 的实践与改进
分享嘉宾:王锋 奇虎360 技术总监 文章整理:王彦 内容来源:Cassandra Meetup 出品平台:DataFunTalk 注:欢迎转载,转载请留言. 导读:2010年,Dropbox 在线云 ...
- redis的基础知识
select切换数据库 remoteSelf:0>select 0 "OK" dbsize查看当前数据库的key数量 remoteSelf:0>dbsize " ...
- linux中shell内置命令和外置命令
shell内置命令 无法通过which或者whereis去查找命令的位置 例如cd,cp这些命令是shell解释器内置的命令 当shell内置命令传入shell解释器,shell解释器通过内核获取相关 ...