Jbpm 4.4学习笔记(一)
2013-11-01 13:15
483 查看
1.Jbpm 4.4的配置。我的是在eclipse ee版本使用,在myeclipse下同理。
①下载压缩包jbpm-4.4,解压
②接下来上图
③还是图
④安装完后重启eclipse,安装完毕。
⑤新建一个java project,Src下:New——>Jboss jbpm jbpm4 process definition,这时有了一个文件:xxxx.jpdl.xml
⑥添加外部jar包:Jbpm.jar,还有解压后的压缩包lib/下所有的jar包(先用着,后面再精简),build path之
⑦添加配置文件,将examples/src下的配置(除了org文件夹和css文件)都copy到src。jbpm.cfg.xml为核心配置文件,jbpm.hibernate.cfg.xml为hibernate配置文件。这时还得修改jbpm.hibernate.cfg.xml部分内容,换成mysql的连接。
⑧这还不算完,还有最重要的一步。解决设计器中文乱码问题,修改eclipse.ini或myeclipse.ini,最后增加代码:
⑨配置完毕,可以使用了。
2.下面贴出一个简单的例子
注意注释内容。
在数据库中会生成如下表
3.当然每次建表、发布(deploy)等都是一样的操作,所以可将其封装。类似于HiberUtil。
4.在有关desion的程序时,在desion节点的Expression可以写表达式供其流程选择。不过需要注意写三目运算符时,表达式要写到#{}内,而不是${},如
而且运算符中只能写大于号(>),写小于号(<)会报错:
在程序中可以这样使用expression
5.desion节点处也可写java代码,在desion的Handle class处写java类的路径。如com.bjsxt.handler.MyHandler
而MyHandler如下
6.completeTask()和signalExecutionById()一样,都是执行括号内容。
7.在task节点中,也可写入实体类。不过实体类需实现(implements) Serializable,并且要定义一个唯一的表示UID,系统默认的即可。如
否则在修改实体类属性(增加或删除、修改)后会报错。因为数据库存储时也会给实体类一个UID,若实体类不加UID就改变属性,那么此时两个实体类(数据库和程序代码里的)会不一致而报错。
此时MyHandler变为
①下载压缩包jbpm-4.4,解压
②接下来上图
③还是图
④安装完后重启eclipse,安装完毕。
⑤新建一个java project,Src下:New——>Jboss jbpm jbpm4 process definition,这时有了一个文件:xxxx.jpdl.xml
⑥添加外部jar包:Jbpm.jar,还有解压后的压缩包lib/下所有的jar包(先用着,后面再精简),build path之
⑦添加配置文件,将examples/src下的配置(除了org文件夹和css文件)都copy到src。jbpm.cfg.xml为核心配置文件,jbpm.hibernate.cfg.xml为hibernate配置文件。这时还得修改jbpm.hibernate.cfg.xml部分内容,换成mysql的连接。
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/oa</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.format_sql">true</property>
⑧这还不算完,还有最重要的一步。解决设计器中文乱码问题,修改eclipse.ini或myeclipse.ini,最后增加代码:
-Dfile.encoding=UTF-8
⑨配置完毕,可以使用了。
2.下面贴出一个简单的例子
public class Test { public static void main(String[] args) { Configuration conf = new Configuration(); ProcessEngine engine = conf.buildProcessEngine(); //这两句代码可以建立数据库表 //RepositoryService pd的发布、删除、查询 RepositoryService rs = engine.getRepositoryService(); //pd 流程定义 抽象规范 processdefinition //pi 流程实例 具体信息 ProcessInstance //deploy 发布流程定义 rs.createDeployment() .addResourceFromClasspath("jpdl/drive.jpdl.xml") .deploy();//发布 //ExecutionService是流程的执行 ExecutionService es = engine.getExecutionService(); //根据paid执行 es.startProcessInstanceById("drive-4"); es.startProcessInstanceById("drive-4", "to state2"); //流程定义的节点状态分为两种 //1.等待节点 比如state //2.自动执行节点 比如start end //3.decision是一个自动执行的节点 } }
注意注释内容。
在数据库中会生成如下表
JBPM4_DEPLOYMENT 流程定义表 JBPM4_DEPLOYPROP 流程定义属性表 JBPM4_EXECUTION 流程实例表 JBPM4_HIST_ACTINST 流程活动(节点)实例表 JBPM4_HIST_DETAIL 流程历史详细表 JBPM4_HIST_PROCINST 流程实例历史表 JBPM4_HIST_TASK 流程任务实例历史表 JBPM4_HIST_VAR 流程变量(上下文)历史表 JBPM4_ID_GROUP 组表 JBPM4_ID_MEMBERSHIP 用户角色表 JBPM4_ID_USER 用户表 JBPM4_JOB 定时表 JBPM4_LOB 存储表 JBPM4_PARTICIPATION 参与者表 JBPM4_SWIMLANE 泳道表 JBPM4_TASK 任务表 JBPM4_VARIABLE 上下文表
3.当然每次建表、发布(deploy)等都是一样的操作,所以可将其封装。类似于HiberUtil。
public class JbpmUtil { private static ProcessEngine engine; private static RepositoryService rs; private static ExecutionService es; static{ Configuration conf = new Configuration(); engine = conf.buildProcessEngine();//建立数据库表 rs = engine.getRepositoryService();//pd的发布、查询、删除 es = engine.getExecutionService();//流程的执行 } public static RepositoryService getRs() { //只写get方法即可 return rs; } public static ExecutionService getEs() { return es; } public static void deploy(String filePath){ rs.createDeployment() .addResourceFromClasspath(filePath)//这样写,而不是写成一行的好处是出错时容易定位 .deploy(); } }
4.在有关desion的程序时,在desion节点的Expression可以写表达式供其流程选择。不过需要注意写三目运算符时,表达式要写到#{}内,而不是${},如
#{dayCount>5?'to 经理审批':'to 老板审批'}
而且运算符中只能写大于号(>),写小于号(<)会报错:
xml validation error: 与元素类型 "null" 相关联的 "expr" 属性值不能包含 '<' 字符。
在程序中可以这样使用expression
Map<String, Object> map = new HashMap<String, Object>(); map.put("dayCount", 6); executionService.signalExecutionById(pi.getId(), map);
5.desion节点处也可写java代码,在desion的Handle class处写java类的路径。如com.bjsxt.handler.MyHandler
而MyHandler如下
public class MyHandler implements DecisionHandler { public String decide(OpenExecution execution) { Integer dayCount =(Integer) execution.getVariable("dayCount"); if(dayCount>5){ return "to state2"; }else { return "to state3"; } } }
6.completeTask()和signalExecutionById()一样,都是执行括号内容。
7.在task节点中,也可写入实体类。不过实体类需实现(implements) Serializable,并且要定义一个唯一的表示UID,系统默认的即可。如
private static final long serialVersionUID = 1L;
否则在修改实体类属性(增加或删除、修改)后会报错。因为数据库存储时也会给实体类一个UID,若实体类不加UID就改变属性,那么此时两个实体类(数据库和程序代码里的)会不一致而报错。
此时MyHandler变为
public class MyHandler implements DecisionHandler { public String decide(OpenExecution execution) { User user = (User) execution.getVariable("user"); if(user.getDayCount()>5){ return "to state2"; }else { return "to state3"; } } }
相关文章推荐
- JBPM 4.4 学习笔记01----基本步骤
- Jbpm 4.4学习笔记(二)
- jbpm4.4学习笔记(1)
- jbpm4.4学习笔记(3)
- JBPM4.4学习使用
- jBPM-jPDL学习笔记—框架设计简介(三)
- jBPM-jPDL学习笔记—框架设计简介(六)
- JBPM学习笔记
- JBPM和NetBpm学习笔记:一
- 【安全牛学习笔记】答疑(Conky、Goagent、Linux4.4内核发布),手动漏洞挖掘
- JBPM4.4学习
- jBPM学习笔记5--简单流程测试剖析
- 【Spring学习笔记】之【4.4 资源之Resource通配符路径】
- Inside the C++ Object Model学习笔记[Chap4.3-4.4]
- JBPM学习笔记
- 20171012学习笔记Selenium 2 第四章WebDriver API 4.2控制浏览器 4.3简单元素操作4.4鼠标事件4.5键盘事件
- Jbpm4.3 学习笔记二
- Linux学习笔记4.4-Linux重定向
- jbpm4.4学习总结(二)部署流程到Mysql数据库
- JBPM学习笔记