黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

一個helloworls流程實例

系統 2210 0

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

????? 學前準備工作:

??????????? 1、Java開發環境

??????????? 2、jbpm-jpdl-suite-3.2.3.zip,網上有很多可下載的站點

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

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

????? 準備就緒,進行第一個示例的展示,我是按照樹上的例子來學習的,helloworld,哈哈,是不是很熟悉,感覺不管到哪都能看見它。使用剛才在eclipse集成好的designer插件之后,就可以通過拖 拽的方式來流程部署,很簡單!

????? 拖拽完流程之后,就可以寫和test方法進行測試,書上的例子是寫main方法,個人覺得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;

/**
 * 流程的測試方法
 * 
 * @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();
		
		/**
		 * 因為只是建立了流程實例,流程實例并沒有向下流轉 
		 * 所以該實例應該停留在start-state1節點上
		 */
		System.out.println("1 當前流程所處的節點名稱:" + token.getNode().getName());
		assertSame(processDefinition.getStartState(), token.getNode());
		
		/**
		 * 讓流程實例向下流轉一步
		 */
		token.signal();
		
		/**
		 * 再次打印流程實例所處的節點名
		 * 因為流程實例向下走了一步,所以流程應該走到state1節點上
		 * 而state1節點屬于等待節點,所以流程走到這應該停下來
		 */
		System.out.println("2 當前流程所處的節點名稱:" + token.getNode().getName());
		assertSame(processDefinition.getNode("state1"), token.getNode());
		
		/**
		 * 讓流程繼續向下流轉
		 */
		token.signal();
		
		/**
		 * 因為state1下面是一個Node節點,
		 * Node節點是一個流程自動執行的節點,所以流程執行到這里不會停留在
		 * node1節點上,而是自動執行node1節點,流程向下流轉,停留在state2
		 */
		System.out.println("3 當前流程所處的節點名稱:" + token.getNode().getName());
		
		/**
		 * TODO:
		 *      此處用assertSame出處,
		 *      不知是否為Node的取對象與state不一樣
		 *      ps:此處流程不停止,可能token.getNode()無效
		 */
		System.out.println("***"+processDefinition.getNode("node1").getName());
//		assertSame(processDefinition.getNode("node1"), token.getNode());
		
		/**
		 * 再次打印流程實例所處的節點名
		 * 因為流程實例向下走了一步,所以流程應該走到state2節點上
		 * 而state2節點屬于等待節點,所以流程走到這應該停下來
		 */
		System.out.println("4 當前流程所處的節點名稱:" + token.getNode().getName());
		assertSame(processDefinition.getNode("state2"), token.getNode());
		
		/**
		 * 讓流程繼續向下流轉,這是就應該到達end-state1節點
		 * 整個helloworld流程就運行結束了,這時的狀態應該為結束
		 */
		token.signal();
		System.out.println("5 當前流程所處的節點名稱:" + token.getNode().getName());
		assertSame(processDefinition.getNode("end-state1"), token.getNode());
		
		/**
		 * 打印出當前流程是否結束
		 */
		System.out.println("6 當前流程的狀態:"+token.getProcessInstance().hasEnded());
		assertTrue(token.getProcessInstance().hasEnded());
	}

}

  

????? 上面的代碼是我修改之后的。開始是按照書上的來寫,就是簡單的System打印語句,貌似不能滿足測試方法的要求。另外,書上的代碼一直沒調通,debug的半天,再結合一些基本概念,發現原來是書上寫錯了,唉,不可全信書本。錯誤的原因就在名為“node1”的node節點上,node節點處若沒有action,則不會停留,繼續往下走,但是書上在此處使用了token.signal()讓其繼續向下,根本是多此一舉,甚至是導致了錯誤。state節點需要調用方法繼續進行,這個問題可是費了我挺長時間,對于我這種初學者,這種錯誤可是很頭疼的??!

????? 基本上第一章的內容就是這些,對于常用的元素有了大體的了解,下面的內容稍后繼續哈!

一個helloworls流程實例


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!