程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JBPM工作流引擎

JBPM工作流引擎

編輯:關於JAVA

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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved