freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

jbpm工作流簡(jiǎn)介-資料下載頁(yè)

2025-06-25 21:06本頁(yè)面
  

【正文】 ext context) throws Exception { ().setVariable(note, reason)。 } } 說(shuō)明: ExecutionContext 是一個(gè)貫通流程的容器。它是個(gè)大寶箱,里面啥玩意都有,后面將更深入的提到。這里的 reasion 就是 中的 ” 我要請(qǐng)假 ” package 。 import 。 import 。 public class ConfirmAction implements ActionHandler { private static final long serialVersionUID = 1L。 public void execute(ExecutionContext context) throws Exception { ().setVariable(note, 準(zhǔn)假 )。 } } OK ,后臺(tái)的程序就算寫(xiě)完了(前臺(tái)客戶端的程序還沒(méi)寫(xiě)),下面開(kāi)始部署。   我們要把 的流程定義的數(shù)據(jù)部署到數(shù)據(jù)庫(kù)中,因?yàn)?jBPM 在正式運(yùn)行的時(shí)候不是去讀 文件,而是去讀數(shù)據(jù)庫(kù)中的流程定義。 這里寫(xiě)了一個(gè)個(gè) JUnit 程序來(lái)部署 ,當(dāng)然你用普通的 Java Main 也可以。 package 。 import 。 import 。 import 。 import 。 import 。 import 。 import 。 /** * 部署 * * @author chengang * */ public class DeployProcessTest extends TestCase { /** * 在本方法執(zhí)行完畢后,檢查 jbpm_processdefinition 表會(huì)多了一條記錄 * * @throws FileNotFoundException */ public void testDeployProcessDefinition() throws FileNotFoundException { // 從 取得 jbpm 的配置 JbpmConfiguration config = ()。 // 創(chuàng)建一個(gè) jbpm 容器 JbpmContext jbpmContext = ()。 // 由 生成相對(duì)應(yīng)的流程定義類 ProcessDefinition InputStream is = new FileInputStream(processes/simple/)。 ProcessDefinition processDefinition = (is)。 // 利用容器的方法將流程定義數(shù)據(jù)部署到數(shù)據(jù)庫(kù)上 (processDefinition)。 // 關(guān)閉 jbpmContext ()。 } } 運(yùn)行此程序,在控制臺(tái)打印了一些日志,通過(guò)。如果出錯(cuò),仔佃閱讀出錯(cuò)信息以判斷錯(cuò)誤原因,并確定你按照前面兩節(jié):“修改 ”和“完善庫(kù)引用”的內(nèi)容做好了設(shè)置。  從數(shù)據(jù)庫(kù)中的查看部署效果 無(wú)論是 MySQL 還是 Oracle ,查詢 jbpm_processdefinition 表,你會(huì)發(fā)現(xiàn)多了一條記錄,如下圖 ( 以 PLSQL Developer 的顯示為例 ) 依次檢查各表我們可以發(fā)現(xiàn)有如下變化: 并由此簡(jiǎn)單判斷出各表的作用,表中各字段的作用由字段名也能知曉一二。 jbpm_processdefinition 一個(gè)流程定義文件對(duì)應(yīng)一條記錄,可記錄多個(gè)流程定義文件,可記錄一個(gè)流程定義文件的對(duì)個(gè)版本。 jbpm_action 記錄 ActionHandler 的對(duì)象實(shí)例(以名稱為標(biāo)識(shí)) jbpm_delegation 記錄了 ActionHandler 全類名,以便于用反射方式來(lái)加載 jbpm_envent 它的 transition 引用了 Jbpm_transition 表的 id ,再看其它字段,估計(jì)此表是表示流程轉(zhuǎn)向事件的一個(gè)實(shí)例,或者是一個(gè)各表之間的聯(lián)接表。 jbpm_node 流程結(jié)點(diǎn) jbpm_transition 流程的轉(zhuǎn)向定義 jbpm_variableaccess 流程中攜帶的變量。 ACCESS 字段是這些變量的讀寫(xiě)權(quán)限 jbpm開(kāi)發(fā)指南4jBPM 的客戶端開(kāi)發(fā) 有了前面的 HelloWorld 后臺(tái)流程,我們就要開(kāi)始客戶端程序了。正如前面提到的,本文不寫(xiě) JSP ,而改采用 JUnit 的形式,輸出則用 。舉一反三,知道在方法中輸入及用 println 輸出,在 JSP 和 SWING 等 GUI 界面還不是一樣嘛。 這個(gè) JUnit 客戶端,我們就借用創(chuàng)建項(xiàng)目時(shí)自動(dòng)生成的 了,改寫(xiě)后如下: package 。 import 。 import 。 import 。 import 。 import 。 import 。 public class SimpleProcessTest extends TestCase { private JbpmConfiguration config = ()。 private JbpmContext ctx = ()。 // helloworld 對(duì)應(yīng)于 jbpm_processdefinition 表的 name 字段值,也即 的 name // 這個(gè)值得取比較耗時(shí),實(shí)際項(xiàng)目里最好和“數(shù)據(jù)庫(kù)的 JDBC 連接”一樣,讓它共享,不要頻繁打開(kāi)關(guān)閉。 private ProcessDefinition processDefinition = ().findLatestProcessDefinition(helloworld)。 public void testNewRequest() { long id = newRequest()。 (id= + id)。 checkNewRequest(id)。 confirmRequest(id)。 checkconfirmRequest(id)。 ()。// 關(guān)閉 jbpm 容器 } /** * 創(chuàng)建一個(gè)請(qǐng)假單 * * @return */ private long newRequest() { // 創(chuàng)建一個(gè)新流程 ProcessInstance pi = ()。 // 取得流程的數(shù)據(jù)環(huán)境 ContextInstance ci = ()。 // 創(chuàng)建一張請(qǐng)假單 (name, 陳剛 )。 (day, 2)。 assertEquals(null, (note))。 // 請(qǐng)假申請(qǐng)結(jié)束,轉(zhuǎn)到下一個(gè)流程結(jié)點(diǎn) ()。 return ()。 } /** * 檢查請(qǐng)假單的數(shù)據(jù) * * @param id */ private void checkNewRequest(long id) { // 從數(shù)據(jù)庫(kù)提取原流程 ProcessInstance pi = (id)。 // 取得流程的數(shù)據(jù)環(huán)境 ContextInstance ci = ()。 // 創(chuàng)建一張請(qǐng)假單 assertEquals( 陳剛 , (name))。 assertEquals((2), (day))。 assertEquals( 我要請(qǐng)假 , (note))。 // 當(dāng)前是結(jié)點(diǎn)為 confirm assertEquals(().getNode().getName(), confirm)。 // 流程還沒(méi)結(jié)束 assertFalse(())。 } /** * 審批陳剛的請(qǐng)假申請(qǐng) * * @param id */ private void confirmRequest(long id) { ProcessInstance pi = (id)。 ContextInstance ci = ()。 // 不通過(guò) (note, 不準(zhǔn)請(qǐng)假,繼續(xù)加班 )。 // 審批結(jié)束,到下一個(gè)流程結(jié)點(diǎn) ()。 } private void checkConfirmRequest(long id) { ProcessInstance pi = (id)。 ContextInstance ci = ()。 // ConfirmAction 類在 signal 后執(zhí)行,所以覆蓋了經(jīng)理的審批意見(jiàn) assertEquals( 準(zhǔn)假 , (note))。 // 當(dāng)前是結(jié)點(diǎn)為 end assertEquals(().getNode().getName(), end)。 // 流程結(jié)束了 assertTrue(())。 } } 這個(gè)例子還是很簡(jiǎn)單,而且關(guān)鍵是缺少用戶、組、權(quán)限等工作流系統(tǒng)必須的東西,不過(guò)沒(méi)關(guān)系。下面的內(nèi)容我將完成一個(gè)更完整的實(shí)例。38 /
點(diǎn)擊復(fù)制文檔內(nèi)容
化學(xué)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1