JBPM事情流引擎
副标题#e#
java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
ERP,OA,CRM内网系统,需要多小我私家(多个步调)处理惩罚
JBPM是由JBoss推出的,用来完成事情流的一套开拓包。
事情流并不是技能的观念,而是通过措施描写业务流程的成果。
一般利用事情流实现的成果有:告假,报销,出差申请,保险理赔等
在开拓JBPM时,需要先成立一个JBoss的流程描写文件(插手插件),
留意插件在文件夹内部
导入jbpm的sql语句
本栏目
#p#副标题#e#
并将流程绘制到该文件中,生成流程图,以及将流程信息宣布随处事器中。
按照业务,在成立好的流程文件中绘制执行流程。
流程由节点和路径构成
节点分为以下几类:
1) Start:开始节点
2) End:竣事节点
3) Task:任务节点
4) Decision:判定节点
绘制流程时,必需先有一个流程描写的文档,按照此文档来绘制流程。
首先先成立流程图模子
将xml和图片文件复制到MyEclipse,假如在MyEclipse内里下了jbpm插件可以在MyEclipse中成立
在绘制好流程图后,需要声明每个Task节点的任务处理惩罚人。需要插手jbpm.jar,假如在MyEclipse中可以自动插手hibernate的所有包
本栏目
手动画图会生成下面的xml文件,生存会生成图片
<?xml version="1.0" encoding="UTF-8"?> <process key="reim" name="Reimbursement" xmlns="http://jbpm.org/4.4/jpdl"> <start name="start1" g="173,72,48,48"> <transition to="填写报销单" /> </start> <end name="end1" g="423,375,48,48" /> <task name="填写报销单" g="148,185,92,52"> <assignment-handler class="com.kane.handler.InsertHandler" /> <transition to="财政审核" g="318,246:" /> </task> <task name="财政审核" g="400,185,92,52"> <assignment-handler class="com.kane.handler.FinancialHandler" /> <transition name="通过" to="exclusive1" g="7,-9" /> <transition name="不通过" to="填写报销单" g="315,175:-16,-20" /> </task> <task name="CEO审核" g="144,365,92,52"> <assignment-handler class="com.kane.handler.CEOHandler" /> <transition name="通过" to="end1" g="-10,-23" /> <transition name="不通过" to="填写报销单" g="-42,-6" /> </task> <decision name="exclusive1" g="421,281,48,48"> <handler class="com.kane.handler.MoneyCheckHandler" /> <transition name="高出2000" to="CEO审核" g="-42,-24" /> <transition name="不到2000" to="end1" g="8,-10" /> </decision> </process>
在web项目插手hibernate支持
本栏目
成立本身的数据库
CREATE TABLE member( userid varchar2(20) primary key, roleid int ) #1是普通用,2是财政,3是ceo INSERT INTO member VALUES('kane',1); INSERT INTO member VALUES('kabne1',1); INSERT INTO member VALUES('ka',1); INSERT INTO member VALUES('cw0',2); INSERT INTO member VALUES('cw1',2); INSERT INTO member VALUES('ceo',1); INSERT INTO member VALUES() CREATE TABLE reimbursement( rid varchar2(30) primary key, reason varchar2(200), money number(7,2), userid varchar2(20), pub_time date, check_userid varchar2(20), check_time date, back_reason )
生成映射
dao,service正常写,记得拷入jbpm.jar到lib内里
开始写handler,对应设置文件里写好的,留意任务节点实现AssignmentHandler,判定节点实现DecisionHandler
接着复制两个设置文件jbpm.cfg.xml和jbpm.hibernate.cfg.xml并修改
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="myeclipse.connection.profile">oracle</property> <property name="connection.url">jdbc:oracle:thin:@192.168.2.55:1521:ORCL</property> <property name="connection.username">ysk</property> <property name="connection.password">123</property> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver </property> <property name="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <property name="show_sql">true</property> <property name="format_sql">true</property> <mapping resource="jbpm.repository.hbm.xml" /> <mapping resource="jbpm.execution.hbm.xml" /> <mapping resource="jbpm.history.hbm.xml" /> <mapping resource="jbpm.task.hbm.xml" /> <mapping resource="jbpm.identity.hbm.xml" /> </session-factory> </hibernate-configuration>
本栏目
#p#分页标题#e#
写个运行措施宣布流程文件
package com.kane.utils; import java.io.File; import org.jbpm.api.Configuration; import org.jbpm.api.NewDeployment; import org.jbpm.api.ProcessEngine; public class ProcessExport { /** * @param args */ public static void main(String[] args) { // 需要先成立一个JBPM焦点操纵工具 ProcessEngine pe=new Configuration().buildProcessEngine(); //成立一个流程宣布工具 NewDeployment nd = pe.getRepositoryService().createDeployment(); //宣布一个流程文件 nd.addResourceFromFile(new File("D:/workspace2/JBPMweb/src/Reimbursement.jpdl.xml")); nd.deploy(); pe.close(); } }
呈现以下功效即乐成,别忘了先前导入自带的数据库文件
本栏目
也可以select * from jbpm4_deployprop查察;
接下来开始写web页面,默认直接用户名登岸,登岸之后开始可以查察任务,这里要用到jbpm
package com.kane.utils; import java.util.ArrayList; import java.util.List; import org.jbpm.api.Configuration; import org.jbpm.api.ProcessEngine; import org.jbpm.api.task.Task; public class JDPMUtil { private static ProcessEngine pe; static{ pe=new Configuration().buildProcessEngine(); } public static List<Task> getAllTaskByUserid(String userid) { List<Task> allTask=new ArrayList<Task>(); //小我私家任务 List<Task> allPersonTask=pe.getTaskService().findPersonalTasks(userid); //到了财政那,有多个任务,多小我私家都可以看 List<Task> allGroupTask=pe.getTaskService().findGroupTasks(userid); if (allPersonTask!=null) { allTask.addAll(allPersonTask); } if (allGroupTask!=null) { allTask.addAll(allGroupTask); } return allTask; } }
还要插手mail.jar
呈现异常
java.lang.reflect.InvocationTargetException 异常
java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
办理步伐