JBPM工作流 引擎;java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I

ERP,OA,CRM内网系统,需要多个人(多个步骤)处理

JBPM是由JBoss推出的,用来完成工作流的一套开发包。

工作流并不是技术的概念,而是通过程序描述业务流程的功能。

一般使用工作流实现的功能有:请假,报销,出差申请,保险理赔等

在开发JBPM时,需要先建立一个JBoss的流程描述文件(加入插件),

注意插件在文件夹内部


导入jbpm的sql语句


并将流程绘制到该文件中,生成流程图,以及将流程信息发布到服务器中。

根据业务,在建立好的流程文件中绘制执行流程。

流程由节点和路径组成

节点分为以下几类:

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>

写个运行程序发布流程文件

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
解决办法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jbpm是一个开源的Java工作流引擎,它提供了一个框架和工具,用于定义、执行和管理业务流程。jbpm的持久层采用hibernate3来实现,这是因为jbpm的靠山是jboss,而hibernate是jboss的一个重要组成部分,因此选择了hibernate作为持久层的实现方式。 jbpm工作流引擎具有以下特点: . 灵活性:jbpm允许用户通过定义流程模型和规则来灵活地定义和修改业务流程。它支持基于图形化的流程设计器,使得流程定义更加直观和易于理解。 2. 可扩展性:jbpm提供了丰富的扩展点和插件机制,可以根据具体需求进行定制和扩展。用户可以自定义各种节点类型、执行器、监听器等,以满足不同的业务场景。 3. 可视化:jbpm提供了一个基于Web的控制台,用于监控和管理运行中的流程实例。用户可以实时查看流程状态、任务列表、流程历史等信息,方便进行流程管理和优化。 4. 高性能:jbpm采用了基于事件驱动的执行模型,能够高效地处理大量的并发流程实例。它支持异步执行、并行分支、定时器等功能,提供了良好的性能和可伸缩性。 5. 可靠性:jbpm具有良好的事务管理和异常处理机制,能够保证流程执行的一致性和可靠性。它支持分布式部署和集群模式,提供了高可用性和容错性。 总结起来,jbpm是一个功能强大、灵活可扩展的Java工作流引擎,适用于各种业务场景和规模的流程管理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值