jbpm版本:4.4
IDE:myeclipse8.6
DB:mysql-5.0.26
1、Myeclipse中安裝jbpm
1)、到 http://sourceforge.net/projects/jbpm上去下載jbpm4.4 ,并解壓。
2)、打開myeclipse8.6---->選擇Help菜單---->選擇Myeclipse Configuration Center------>打開第三個選項卡SoftWare----->選擇右上角add site---->選折add form archive file-----》找到${jbpm_home}\install\src\gpd 目錄下找到jbpm-gpd-site.zip即可!name隨便輸入即可(比如我輸入 jbpm)!這樣下面就看到多一個jbpm(部分過程看下圖 )
選擇“add site”,彈出如下對話框:
選擇“Add from Archive File”,彈出如下對話框:
選擇“打開”,彈出如下對話框:
選擇“OK”,出現如下對話框:
3)、一個一個選中jpd下面的文件,點擊右擊“add to profile”即可!
4)、點擊右下角“apply change”按鈕即可!( 注:在更新的時候一定要斷開網絡。我在沒斷開網絡的前提下,裝了好幾遍,裝完Myeclipse下創建web工程的欄目就不見了 )。
安裝完成后會重啟Myeclipse,重啟后在新建項目里會多出一項“JBoss jBPM”,如下圖所示:
2、配置jBPM運行時
點擊 Window --> Preferences
選擇 JBoss jBPM --> jBPM 4.4 --> Runtime Locations
點擊 Add...
在 Add Location 對話框中,輸入一個名字,比如 jbpm-4.4 然后點擊 Search...
在 Browse For Folder 對話框中,選擇你的jbpm根目錄,然后點擊 OK
點擊 OK 在 Add Location 對話框中
3、生成jbpm數據庫表(這里以安裝mysql為列)
a)、先打開mysql數據庫新建一個數據庫比如jbpm(create database jbpm);
b)、打開${jbpm_home}\install\src\db\create 下面,找到mysql的表腳本!
c)、全部復制過來粘貼到mysql命令行上(當然也可以source ***.sql方式),
4、helloWorld程序
新建一個java project? 項目名稱為helloJbpm
a:首先導入相應的jar包(導入$(jbpm_home)\lib目錄下面的所有jar包和$(jbpm_home}下面的jbpm.jar包到項目中去)
b:導入配置文件(導入${Jbpm_home}\examples\src目錄下面的所有配置文件到項目導入src目錄下面,然后修改jbpm.hibernate.cfg.xml里面的driver,用戶名,密碼,數據庫名(可以參考${JBPM-home}\install\jdbc目錄下面的mysql.properties文件))
c:設計流程文件
選擇new-->jbpss jbpm--->jbpm4 process definition文件即可
xml代碼:
Java代碼
- <?xml?version="1.0"?encoding="UTF-8"?> ??
- <process?name="hello"?xmlns="http://jbpm.org/4.0/jpdl"> ??
- ???<start?g="112,33,88,48"?name="start1"> ??
- ??????<transition?g="-77,-17"?name="to?family168"?to="family168"/> ??
- ???</start> ??
- ???<state?g="122,293,92,52"?name="family168"> ??
- ??????<transition?g="-47,-17"?name="to?end1"?to="end1"/> ??
- ???</state> ??
- ???<end?g="122,400,48,48"?name="end1"/> ??
- </process>??
d:寫一個測試類
Java代碼
package com.baihe.jbpm;???
??
import java.util.List;???
import org.jbpm.api.Configuration;???
import org.jbpm.api.Execution;???
import org.jbpm.api.ExecutionService;???
import org.jbpm.api.ProcessDefinition;???
import org.jbpm.api.ProcessEngine;???
import org.jbpm.api.ProcessInstance;???
import org.jbpm.api.RepositoryService;???
import org.junit.Before;???
import org.junit.BeforeClass;???
import org.junit.Test;???
??
public class HelloWorldTest {???
??? private static ProcessEngine processEngine;???
??? private static? ExecutionService executeServices ;???
???????
??? @BeforeClass??
??? public static void setUpBeforeClass() throws Exception {???
??????? processEngine = Configuration.getProcessEngine();//通過單列模式獲得流程引擎???
??????? executeServices = processEngine.getExecutionService();???
??? }???
??
??? @Before??
??? public void setUp() throws Exception {???
??? }???
???????
??? @Test??
??? public void testDeployProcess(){???
??????? //RepositoryService功能:主要對流程文件進行發布,查看,刪除等!???
?????? RepositoryService? repositoryService = processEngine.getRepositoryService();???
??????? //因為helloword.jpdl.xml文件在? classpath目錄下就可以直接這樣寫,如果不在的話應該加上包名???
??????? //返回已經發布的流程的id???
??????? String processId = repositoryService.createDeployment().addResourceFromClasspath("hello.jpdl.xml").deploy();???
??????? //查看已經發布流程的列表???
??????? List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();???
???????????
??????? System.out.println("已經發布的流程數量為:"+list.size());???
??????? for(ProcessDefinition pd:list){???
??????????? System.out.println("發布流程的名稱:"+pd.getName()+",發布流程id"+pd.getId());??????????????
??????? }???
??????? repositoryService.createProcessDefinitionQuery();???
??????? //根據流程id來刪除已經發布的流程???
??????? //repositoryService.deleteDeployment(processId)???
??????? //repositoryService.deleteDeploymentCascade("processId");???
??????? //repositoryService.suspendDeployment(processId);這個等價于刪除一個流程???
??????? //System.out.println("已經發布的流程數量為:"+repositoryService.createProcessDefinitionQuery().list().size());???
??????????
???????????
??? }????
?? @Test??
??? public void testProcessInstance(){????????
??????????
??????? ProcessInstance processInstance = executeServices.startProcessInstanceByKey("helloworld");???
??????? List<ProcessInstance> list = executeServices.createProcessInstanceQuery().list();???
??????? for(ProcessInstance pi:list){???
??????????? System.out.println("流程實例名稱:"+pi.getName()+",流程實例key:"+pi.getKey()+",流程實例version:"+pi.getState()+":");???
??????? }???
??????? //結束流程實例????
??????? //executeServices.endProcessInstance(processInstance.getId(), "cancel");???
??????? //刪除流程實例???
??????? //executeServices.deleteProcessInstance(processInstance.getId());???
??????? //System.out.println(executeServices.createProcessInstanceQuery().list().size());???
??????? System.out.println(processInstance.isActive("state1"));???
??????? executeServices.signalExecutionById(processInstance.getId());???
??????????
??? }???
????????????
}?? ?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
