亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

一個(gè)helloworls流程實(shí)例

系統(tǒng) 1763 0

????? 由于最近比較空閑,偶爾看到之前桌上的一本《深入淺出jBMP》的書(shū),便想學(xué)習(xí)一下,熟悉workflow,這系列文章也算是對(duì)于整個(gè)學(xué)習(xí)過(guò)程的記錄,希望能時(shí)刻起備忘作用,更希望能為和我一樣的初學(xué)者提供第一手的學(xué)習(xí)資料。

????? 學(xué)前準(zhǔn)備工作:

??????????? 1、Java開(kāi)發(fā)環(huán)境

??????????? 2、jbpm-jpdl-suite-3.2.3.zip,網(wǎng)上有很多可下載的站點(diǎn)

??????????? 3、eclipse,我用的是3.6版本

????? 主要就是這些,jbpm-jpdl-suite-3.2.3.zip解壓縮到任意盤(pán)符,里面有針對(duì)eclipse的插件包,按照安裝插件的方式將對(duì)應(yīng)文件夾拷貝到對(duì)應(yīng)的eclipse目的文件夾中,重啟即可。(具體環(huán)境配置方法這里不多說(shuō),網(wǎng)上有很多)

????? 準(zhǔn)備就緒,進(jìn)行第一個(gè)示例的展示,我是按照樹(shù)上的例子來(lái)學(xué)習(xí)的,helloworld,哈哈,是不是很熟悉,感覺(jué)不管到哪都能看見(jiàn)它。使用剛才在eclipse集成好的designer插件之后,就可以通過(guò)拖 拽的方式來(lái)流程部署,很簡(jiǎn)單!

????? 拖拽完流程之后,就可以寫(xiě)和test方法進(jìn)行測(cè)試,書(shū)上的例子是寫(xiě)main方法,個(gè)人覺(jué)得junit更方便。我的代碼如下:

    package com.sample;

import junit.framework.TestCase;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;

/**
 * 流程的測(cè)試方法
 * 
 * @author zhang_lei
 * 
 */
public class HelloWorldTest extends TestCase {

	public void testHelloWorldProcess() throws Exception {

		ProcessDefinition processDefinition = ProcessDefinition
				.parseXmlResource("helloworld/processdefinition.xml");
		assertNotNull("Definition should not be null", processDefinition);
		ProcessInstance instance = new ProcessInstance(processDefinition);
		Token token = instance.getRootToken();
		
		/**
		 * 因?yàn)橹皇墙⒘肆鞒虒?shí)例,流程實(shí)例并沒(méi)有向下流轉(zhuǎn) 
		 * 所以該實(shí)例應(yīng)該停留在start-state1節(jié)點(diǎn)上
		 */
		System.out.println("1 當(dāng)前流程所處的節(jié)點(diǎn)名稱(chēng):" + token.getNode().getName());
		assertSame(processDefinition.getStartState(), token.getNode());
		
		/**
		 * 讓流程實(shí)例向下流轉(zhuǎn)一步
		 */
		token.signal();
		
		/**
		 * 再次打印流程實(shí)例所處的節(jié)點(diǎn)名
		 * 因?yàn)榱鞒虒?shí)例向下走了一步,所以流程應(yīng)該走到state1節(jié)點(diǎn)上
		 * 而state1節(jié)點(diǎn)屬于等待節(jié)點(diǎn),所以流程走到這應(yīng)該停下來(lái)
		 */
		System.out.println("2 當(dāng)前流程所處的節(jié)點(diǎn)名稱(chēng):" + token.getNode().getName());
		assertSame(processDefinition.getNode("state1"), token.getNode());
		
		/**
		 * 讓流程繼續(xù)向下流轉(zhuǎn)
		 */
		token.signal();
		
		/**
		 * 因?yàn)閟tate1下面是一個(gè)Node節(jié)點(diǎn),
		 * Node節(jié)點(diǎn)是一個(gè)流程自動(dòng)執(zhí)行的節(jié)點(diǎn),所以流程執(zhí)行到這里不會(huì)停留在
		 * node1節(jié)點(diǎn)上,而是自動(dòng)執(zhí)行node1節(jié)點(diǎn),流程向下流轉(zhuǎn),停留在state2
		 */
		System.out.println("3 當(dāng)前流程所處的節(jié)點(diǎn)名稱(chēng):" + token.getNode().getName());
		
		/**
		 * TODO:
		 *      此處用assertSame出處,
		 *      不知是否為Node的取對(duì)象與state不一樣
		 *      ps:此處流程不停止,可能token.getNode()無(wú)效
		 */
		System.out.println("***"+processDefinition.getNode("node1").getName());
//		assertSame(processDefinition.getNode("node1"), token.getNode());
		
		/**
		 * 再次打印流程實(shí)例所處的節(jié)點(diǎn)名
		 * 因?yàn)榱鞒虒?shí)例向下走了一步,所以流程應(yīng)該走到state2節(jié)點(diǎn)上
		 * 而state2節(jié)點(diǎn)屬于等待節(jié)點(diǎn),所以流程走到這應(yīng)該停下來(lái)
		 */
		System.out.println("4 當(dāng)前流程所處的節(jié)點(diǎn)名稱(chēng):" + token.getNode().getName());
		assertSame(processDefinition.getNode("state2"), token.getNode());
		
		/**
		 * 讓流程繼續(xù)向下流轉(zhuǎn),這是就應(yīng)該到達(dá)end-state1節(jié)點(diǎn)
		 * 整個(gè)helloworld流程就運(yùn)行結(jié)束了,這時(shí)的狀態(tài)應(yīng)該為結(jié)束
		 */
		token.signal();
		System.out.println("5 當(dāng)前流程所處的節(jié)點(diǎn)名稱(chēng):" + token.getNode().getName());
		assertSame(processDefinition.getNode("end-state1"), token.getNode());
		
		/**
		 * 打印出當(dāng)前流程是否結(jié)束
		 */
		System.out.println("6 當(dāng)前流程的狀態(tài):"+token.getProcessInstance().hasEnded());
		assertTrue(token.getProcessInstance().hasEnded());
	}

}

  

????? 上面的代碼是我修改之后的。開(kāi)始是按照書(shū)上的來(lái)寫(xiě),就是簡(jiǎn)單的System打印語(yǔ)句,貌似不能滿(mǎn)足測(cè)試方法的要求。另外,書(shū)上的代碼一直沒(méi)調(diào)通,debug的半天,再結(jié)合一些基本概念,發(fā)現(xiàn)原來(lái)是書(shū)上寫(xiě)錯(cuò)了,唉,不可全信書(shū)本。錯(cuò)誤的原因就在名為“node1”的node節(jié)點(diǎn)上,node節(jié)點(diǎn)處若沒(méi)有action,則不會(huì)停留,繼續(xù)往下走,但是書(shū)上在此處使用了token.signal()讓其繼續(xù)向下,根本是多此一舉,甚至是導(dǎo)致了錯(cuò)誤。state節(jié)點(diǎn)需要調(diào)用方法繼續(xù)進(jìn)行,這個(gè)問(wèn)題可是費(fèi)了我挺長(zhǎng)時(shí)間,對(duì)于我這種初學(xué)者,這種錯(cuò)誤可是很頭疼的啊!

????? 基本上第一章的內(nèi)容就是這些,對(duì)于常用的元素有了大體的了解,下面的內(nèi)容稍后繼續(xù)哈!

一個(gè)helloworls流程實(shí)例


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 四虎免费最新在线永久 | 亚洲高清中文字幕一区二区三区 | 最新亚洲精品国自产在线观看 | 人人揉揉香蕉大免费不卡 | 久久永久视频 | 九九久久久2 | 偷偷鲁国内视频视频在线 | 97成人精品视频在线播放 | 99热最新网址获取 | 欧美日韩一区二区高清免费视频 | 九九热精 | 91精品国产91 | 亚洲国产九九精品一区二区 | 亚洲高清色 | 四虎永久免费在线观看 | 国产美女视频做爰 | 亚洲一区二区三区不卡在线播放 | 日韩欧美在线播放视频 | 久久精品中文 | 中文字幕免费在线播放 | 国产精品国产三级国产普通话 | 久久福利资源网站免费看 | 国产精品欧美韩国日本久久 | 亚洲精品久久久久午夜福 | 在线观看国产一区二区三区99 | 看个毛片 | 抱着cao才爽免费观看 | 精品精品国产理论在线观看 | 青青热久免费精品视频在线观看 | 在线播放亚洲精品富二代91 | 四虎影视地址 | 操白嫩美女| 免费特黄一级欧美大片在线看 | 成人黄色在线免费观看 | 国产高清不卡视频 | 国产真实自拍 | 精品国产区 | 亚洲一区二区三区高清视频 | 毛片爱爱 | 亚洲精品欧洲一区二区三区 | 久久久免费视频播放 |