深入浅出JBPM读书笔记(四)_jbpm基础

1.JbpmConfiguration和JbpmContext讲解
它们是操作jbpm流程的对象,通过它们可以实现针对jbpm流程的所有操作。
JbpmConfiguration:
用来读取JBPM配置文件的对象。
通过该对象,可以获取JBPM配置文件里的所有配置信息。
该对象提供了JBPM流程在运行过程中所需要的各种服务对象。

JBPM默认配置文件:jbpm-jpdl-3.2.3\src\jpdl\org\jbpm\default.jbpm.cfg.xml
如果要修改默认配置文件,只需要在工程的Classpath下建一个名为jbpm.cfg.xml文件,然后重写default.jbpm.cfg.xml里面的相应内容即可。
修改例子如下:
<jbpm-configuration>
<string name="jbpm.mail.smtp.host" value="smtp.163.com"/>
<bean name="jbpm.mail.address.resolver" class="test.TestMailResolver" singleton="true"/>
<string name="jbpm.mail.from.address" value="neng862121861@163.com"/>
</jbpm-configuration>

是一个单例对象,可通过JbpmConfiguration.getInstance()得到一个对象。

最大的作用:创建一个JbpmContext对象。jbpmConfiguration.createJbpmContext()

JbpmContext:
封装了大部分操纵JBPM流程的方法。
通过该对象,可以开始一个新的流程实例、根据任务的参与者快速找到该参与者的所有待办任务以及根据任务实例的ID加载对应的任务实例对象,可以快速拿到Hibernate Session(可以直接操作数据库)、Job Session(对JBPM里的Job进行管理)和Log Session(可以进行Log的读写操作)等。默认情况下,通过JbpmContext对象对流程数据进行持久化操作会自动产生一个事务。

2.构建JBPM数据库
两种方法:
1).利用schema文件进行创建;
打开JBPM开发套件下的db目录,在该目录下可以找到目前主流数据库的建库脚本,找到和目标数据库相吻合的数据库脚本,在目标数据库当中执行JBPM数据库的建库工作。
2).通过JbpmConfiguration对象提供的createSchema方法进行创建。
jbpmConfiguration.createSchema();
注:该方法主要是生成表,所以执行之前要创建好数据库,配置好hibernate.cfg.xml中的数据库数据和目标数据库方言,同时加相关的jar包

<property name="format_sql">true</property>
<property name="myeclipse.connection.profile">MySql</property>
<property name="connection.url">jdbc:mysql://localhost:3306/jbpm_test</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>

3.JBPM流程定义的三个文件:
gpd.xml:节点位置的定位文件
processdefinition.xml:流程定义文件
processimage:产生的流程图片
4.流程发布
将流程设计器里产生的流程模板文件(流程定义的三个文件)发布到数据库中,这样流程引擎就可以直接对数据库进行操作,从而实现流程的控制。
流程发布的两种方法:
1).利用JBPM的流程设计器结合可以发布流程的Servlet实现
2).将流程文件从设计器里导出一个zip包文件,然后利用应用程序将其发布到数据库中。方法如下:
切换到Deployment视图,可分为四个区域:
区域A:流程发布时的流程文件选择区,processdefinition.xml必选,一般情况下三个都选
区域B:选择当前流程模板中所依赖的java类。
流程模板所依赖的java类指的是在流程模板中自定义的ActionHandler.java,AssignmentHandler.java,DecisionHandler.java
对于将jbpm流程引擎用一个无状态的SessionBean装起来,以一个EJB组件的形式单独运行于一个EJB容器的方式来说要选择好。
区域C:将区域A和B选择的流程文件打包过程指定的zip文件当中。
区域D:将区域A和B选择的流程文件打包,然后通过标准的Http Post方式上传到一个指定的Servlet去处理

[img]http://dl.iteye.com/upload/attachment/454199/c2f35a84-a46c-3609-bd18-3f322b450336.jpg[/img]
	/**
* 发布流程
*
* @throws Exception
*/
@Test
public void testJbpmContextDeployProcess() throws Exception {
JbpmContext jbpmContext = JbpmConfiguration.getInstance()
.createJbpmContext();

try {

FileInputStream fin = new FileInputStream("c:/helloworld.zip");
ZipInputStream zipin = new ZipInputStream(fin);
ProcessDefinition pd = ProcessDefinition
.parseParZipInputStream(zipin);
// 通过JbpmContext对象将流程定义对象发布到数据库中
jbpmContext.deployProcessDefinition(pd);
System.out.println("发布成功......");

zipin.close();
fin.close();

} finally {

jbpmContext.close();

}
}

5.从数据库中读取helloworld流程
/**
* 从数据库中读取helloworld流程
*
*/
@Test
public void testHelloWorldWithDB() {
JbpmContext jbpmContext = JbpmConfiguration.getInstance()
.createJbpmContext();

try {

//从数据库中获取helloworld流程定义对象
ProcessDefinition processDefinition=jbpmContext.getGraphSession().findLatestProcessDefinition("helloworld");
ProcessInstance processInstance=new ProcessInstance(processDefinition);
Token token=processInstance.getRootToken();
//因为只建立了流程实例,流程实例并没有向下流转,所以该实例停留在start-state1节点上
System.out.println("1 当前流程所处的节点名称:" + token.getNode().getName());

//让流程实例向下流转一步
token.signal();

//state1
System.out.println("2 当前流程所处的节点名称:" + token.getNode().getName());

token.signal();

//自动执行node1节点,流程向下流转,停留在state2
System.out.println("3 当前流程所处的节点名称:" + token.getNode().getName());

token.signal();

System.out.println("4 当前流程所处的节点名称:" + token.getNode().getName());

//打印出当前流程是否结束
System.out.println("5 当前流程状态:" + token.getProcessInstance().hasEnded());

} finally {

jbpmContext.close();

}
}

6.模板与实例
流程模板(ProcessDefinition)与流程实例(ProcessInstance)的关系是一对多的关系
阅读这两个类的API文档
7.版本
当将流程发布到数据库的时候,JPBM安排一个版本号给它,如果数据库中有这个模板,它的版本号就加1,依次类推
8.Token
当一个流程实例创建出来的时候,一个Token(根令牌)也被创建了,此时的Token自然就指向开始节点
流程实例的运行过程实际上就是Token在流程图上的各个节点传递的过程
Token需要一个信号才能从一个节点流向下一个节点(token.signal())
Token可以有子Token
Token离开某个节点时,触发node leave事件
Token到达某个节点时,触发node enter事件
当Token在某个节点停下来时,JBPM会将其状态记录到数据库对应的表中,方便下次继续运行
阅读Token的API
9.流程上下文(ContextInstance)
主要是用来存储流程变量的。
流程变量是流程实例在运行过程中存储在流程上下文当中的键值对。
流程变量最终是存储在数据库当中。
当通过流程模板产生一个流程实例时,一个流程上下文也产生了。
流程变量支持覆盖操作。
流程变量的作用域依赖于Token,根Token相当于全局环境,子Token相当于局部环境
JBPM提供了一种临时变量(Transient Variable),此变量不会存到数据库当中。
阅读API文档,怎样创建和操作流程上下文
10.JPDL表达式
是在流程模板设计期间,定义在流程模板里的Action或Event里面,用来访问流程上下文或任务变量的表达式语言。
语法格式:#{xxx}
11.动作(Action)
是实现ActionHandler接口的类。
可以配置在流程相关节点(Node,Transition)或相关节点的相关事件当中,一旦该事件触发,定义大该事件里的Action类就会执行。
主要属性:name,class,ref-name,expression,accept-propagated-events,config-type,async
12.任务(Task)
有四种类型的事件可能被触发:
task-create,task-assign,task-start,task-end
如果想在这些事件触发的时候做一些事情,可以通过Expression和Action类的方式
13.路由(Transition)
用来处理Token的流转的,将Token从一个节点送到另一个节点
动态创建Transition
主要属性:name,to,condition,exception-handler,action/scription/create-timer/cancel-timer
14.异常处理
在JBPM中分为元素(各种类型的节点或Transition)和流程两个级别
15.身份组件
用户,组,角色,权限
user,groups,memberships,permissions
16.BeanShell脚本
是JPBM中JPDL使用的脚本语言
下载:http://www.beanshell.org
BeanShell的方法基础
BeanShell在JBPM中的用法
第 1 章 helloworld..............................................2 1.1 下载开发套件.............................................2 1.2 安装流程设计器 .........................................7 1.3 jBPM版helloworld.....................................10 1.3.1 创建helloworld流程......................13 1.3.2 设计流程图 ...................................15 1.3.3 测试helloworld流程......................16 第 2 章 jBPM 基础...........................................19 2.1 JbpmConfiguration和 JbpmContext.........................................19 2.1.1 JbpmConfiguration...............19 2.1.2 JbpmContext.............................21 2.2 构建jBPM数据库......................................27 2.3 流程发布...................................................29 2.4 模板与实例...............................................35 2.5 版本...........................................................37 2.6 Token.........................................................37 2.7 流程上下文...............................................40 2.8 JPDL表达式..............................................43 2.9 动作...........................................................46 2.10 路由.........................................................47 2.11 异常处理.................................................49 2.11.1 设置...........................................49 2.11.2 流程级别....................................50 2.11.3 元素级别....................................53 2.12 身份组件.................................................55 2.13 BeanShell脚本.........................................58 2.13.1 BeanShell语法.............................58 2.13.2 BeanShell在jBPM中的用法........63 第 3 章 流程节点详解.....................................67 3.1 公共属性...................................................68 3.2 Node节点...................................................69 3.3 State节点...................................................73 3.4 Task Node节点..........................................73 3.5 Start节点....................................................78 3.6 Fork和Join节点.........................................81 3.7 Decision节点.............................................86 3.8 Process State节点......................................94 3.9 Super State节点.......................................103 3.10 Mail Node节点......................................107 3.11 ESB Service节点...................................111 第 4 章 任务.....................................................112 4.1 任务实例.................................................113 4.2 任务分配.................................................114 4.2.1 Handler方式.................................115 4.2.2 Expression方式............................116 4.2.3 Swimlane方式 .............................116 4.2.4 Pooled Actors方式.......................117 4.2.5 Actor方式....................................117 4.3 任务事件.................................................118 4.4 任务控制器.............................................121 4.5 任务提醒.................................................125 4.6 任务属性.................................................131 第 5 章 任务调度............................................133 5.1 原理.........................................................133 5.2 业务日历.................................................134 5.3 Timer.......................................................136 2 目 录 5.3.1 duedate.........................................137 5.3.2 repeat ...........................................137 5.3.3 transition......................................138 5.3.4 cancel-event.................................141 5.3.5 其他属性.....................................142 5.4 举例.........................................................142 5.4.1 设计流程.....................................142 5.4.2 测试.............................................143 第 6 章 异步.....................................................146 6.1 概念.........................................................146 6.2 原理.........................................................147 6.3 举例.........................................................149 6.3.1 同步.............................................149 6.3.2 异步.............................................152 6.4 小结.........................................................155 第 7 章 应用.....................................................156 7.1 创建工程.................................................156 7.2 配置jBPM................................................158 7.3 报销流程示例.........................................164 7.3.1 需求.............................................165 7.3.2 设计流程.....................................165 7.3.3 测试流程.....................................170 7.3.4 网页开发.....................................174 7.3.5 流程测试.....................................181 7.3.6 流程进度图 .................................184 7.4 采购流程示例.........................................191 7.4.1 需求.............................................191 7.4.2 设计业务表 .................................191 7.4.3 设计流程.....................................191 7.4.4 测试流程.....................................200 7.4.5 Web开发......................................202 7.4.6 测试Web流程..............................211 7.4.7 改进流程进度图 .........................215 7.5 流程监控.................................................218 7.5.1 修改主界面 .................................218 7.5.2 流程模板列表 .............................219 7.5.3 流程实例列表 .............................220 7.5.4 显示流程节点 .............................221 7.5.5 测试.............................................223 7.6 小结.........................................................226 第 8 章 开发技巧............................................227 8.1 动态任务参与者.....................................227 8.2 动态定时器.............................................231 8.3 会签.........................................................234 8.4 传阅.........................................................237 8.5 子流程并行.............................................241 8.6 小结.........................................................248 第 9 章 企业级应用........................................249 9.1 EJB方式的异步和任务调度...................249 9.1.1 J2EE容器配置.............................250 9.1.2 应用改造.....................................253 9.1.3 部署.............................................256 9.1.4 测试.............................................262 9.1.5 小结.............................................262 9.2 FacadeBean封装jBPM............................262 9.2.1 异步和任务调度的EJB实现.......264 9.2.2 FacadeBean的开发与测试..........287 9.3 小结.........................................................304 第二部分 Jbpm 4 第 10 章 jBPM 4 入门...................................306 10.1 安装jBPM 4...........................................306 10.1.1 下载开发套件.........................306 10.1.2 安装流程设计器.....................308 10.2 初试jBPM 4...........................................310 10.2.1 导入流程示例.........................310 10.2.2 第一个流程模板.....................310 10.2.3 创建jBPM 4数据库表.............312 10.2.4 发布流程模板.........................315 10.2.5 测试流程模板.........................315 第 11 章 jBPM 4 进阶 ...................................321 11.1 流程节点详解.......................................321 11.1.1 Start节点..................................321 11.1.2 End节点...................................322 11.1.3 Wait节点 .................................322 目 录 3 11.2.2 设计流程模板......................... 11.1.4336 Fork和Join节点.......................322 11.2.3 测试流程模板......................... 11.1.5339 Task节点 .................................326 11.1.6 java节点...................................329 附录 A jBPM 3.2 的日志处理 .....................342 11.1.7 exclusive节点..........................331 附录 B 在jBPM 3.2 中配置文件................344 11.2 jBPM 4流程示例...................................336 11.2.1 需求.........................................336
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值