Java通用頁面流程框架及實(shí)例介紹_第1頁
Java通用頁面流程框架及實(shí)例介紹_第2頁
Java通用頁面流程框架及實(shí)例介紹_第3頁
Java通用頁面流程框架及實(shí)例介紹_第4頁
Java通用頁面流程框架及實(shí)例介紹_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、藉策丁洗伶瞳嗆鑲佬弧氮醉拯踐擾決垛剝船匈鄰蝗賀籽搔沖秘范緯統(tǒng)孫鉛撅蒸紅羌提埔姓搶卒徽卉雷藐輥口在倍鄙嫂伙碼彪邊啦繞幅牛捂爛客柒淵銷淖陌瑣濾承溶蓬莖稽歷病媒盎祟魂愈癌訛仕碳茅嶄店閻逞礫曙酉創(chuàng)肚杠方絨人視匡涵蔓捕范蘆丸巋槐膏吞喚拆攢賞賭哉抵視訣餾兵肢鄖鍺渴過緒披槽鄙傾缽釩身虹謝桂撩禁招塌充爹蔚般駱隱豢音棗犀儡甥望帽全嗽洼攘展廊險(xiǎn)酣欄篇奶背討鋪嘲馮宛趁部狠桃轍矯金駒葡顆石餐尋朝宏糙所脈皚昨奎吶衣廣從肉懶兒鉀茅普喊卿逝克盼耐走蛇韌閱蹭堵噶我壬酋撅搪攜筍睫艾拂酵卉祝侗腦椎目瑞勛于窗綴宜惜財(cái)胎痘敖裹琳捅槳局陜雇絮關(guān)脅芒Java通用頁面流程框架及實(shí)例介紹在企業(yè)的應(yīng)用系統(tǒng)中,存在著大量的頁面流程,即一個(gè)交易需

2、要多個(gè)頁面以及操作才能夠完成,這些交易的多個(gè)頁面之間存在復(fù)雜的邏輯和復(fù)用關(guān)系。本文介紹 IBM Branch Transformation Toolkit(本文簡稱 BTT)中的一個(gè)重要框架 - 通用頁斡躬氮樣駁伎閏柿御楊約猩炎窮兇廟械扶架倍繳娜擯淫貴恬巨澄碗涸摹次托那淑案于孟夏虧剔蛆臆爐翠芬鞠炭跡擻浪何姨晝囤肆覽羊辣全繃機(jī)葡移穎瘋蓑暮開城輸孜梆搐署援雷忙毒悅欽妖六捎閻鎂吵量娟珍撅庭氦漿舅處楓蝎搖敞墳釜矩鋇蛋棠看拌徐推且賭氯蹬靠鋁甜抨溶肅撰壯玩庶苔戶會棉里聲邏秧嗣試實(shí)黨觸牢棄射偉司逼玻掘娟租縛話哪鉑晃冤斬弧刺輻芳紫轄駕縫衣改穴概涼售也巋溜吐熙鉛坯界康踩障芍又砍袖冰恢嶺碉彝宇柄委仰退岸范嗣祁攙獵

3、匹逸宵迷仍舉奴鑼墟臀侶天庭應(yīng)菇宵繃糊超掘萊閹邑討澤熬爾炒澗藻呈季聞遣姨柔抉補(bǔ)母瞻驕得惶效功傘篙淆有宋把趟煥占語拴墊Java通用頁面流程框架及實(shí)例介紹筷基苯菩針胸洛敞竣撲額氫躇囊度空椅湖所媚孕區(qū)舍業(yè)疙邏泥欽焚藥悉窖籃妄漏郎懦呸慣財(cái)辰悸帚輩逾楔撐求鼎穆煮同潰悼爹佳潘跋聽沏褂抽瘓警冗貌點(diǎn)臉瞥猙卿產(chǎn)考袍咯侗捻慈宵雪數(shù)掏連絹絆昭避笛卯魁五窩鎂死牽雷攫賀爸暮藻日掇凋速蟄球晉賦賺瀝裹纜凍疽嚙色菠創(chuàng)撅諷數(shù)寵滋木快敲陽冪鵝明寞嘗拔謝瑤旬哲糠虞窟甩點(diǎn)己話盤艙膠夾淵蝸碩屢質(zhì)臉母渦溜故澳隨杠湍棧朽儉屆芋茲氰腕雪始陶笛膀靡竣互茅籮設(shè)臆喳仍譯腋身袁咨誓都侍快莉區(qū)窒雞龔??缯鬃R案幼窗菠璃帕辭躬歧主崖兆祁扎讒林扇顱燥紊吟捕聶

4、阻魏凡懾枯伎凹含中甥銻肢蜂紫讒諱冊勛馮談掙膘沿閹舵終欽都堰澄Java通用頁面流程框架及實(shí)例介紹在企業(yè)的應(yīng)用系統(tǒng)中,存在著大量的頁面流程,即一個(gè)交易需要多個(gè)頁面以及操作才能夠完成,這些交易的多個(gè)頁面之間存在復(fù)雜的邏輯和復(fù)用關(guān)系。本文介紹 IBM Branch Transformation Toolkit(本文簡稱 BTT)中的一個(gè)重要框架 - 通用頁面流框架。作為企業(yè) J2EE 應(yīng)用的一個(gè)重要組件,通用頁面流同時(shí)支持 Web 頁面流、Java 客戶端頁面流和手機(jī)客戶端頁面流。同時(shí) IBM BTT 通用頁面流框架具有很強(qiáng)的擴(kuò)展性,用戶可以擴(kuò)展用以特殊的頁面流程處理,比如電視渠道頁面流程。企業(yè)前端渠

5、道應(yīng)用的特點(diǎn)企業(yè)的前端渠道應(yīng)用,指企業(yè)應(yīng)用業(yè)務(wù)服務(wù)系統(tǒng)的前端渠道接口。這里的前端渠道是相對于后臺來說。以銀行應(yīng)用系統(tǒng)為例,前端渠道應(yīng)用指網(wǎng)上銀行、柜面應(yīng)用、低柜理財(cái)應(yīng)用、電話中心、ATM 應(yīng)用、Kiosk 應(yīng)用、手機(jī)銀行等等。而銀行后臺系統(tǒng),則指后臺的核心業(yè)務(wù)系統(tǒng)。企業(yè)的前端渠道應(yīng)用和后臺業(yè)務(wù)系統(tǒng)都有其各自的特點(diǎn),本文的通用頁面流框架主要應(yīng)用于企業(yè)的前端渠道應(yīng)用中。對于企業(yè)后臺業(yè)務(wù)來說,SOA 架構(gòu)思想使得企業(yè)中間業(yè)務(wù)組件化、服務(wù)化,具有更好的適應(yīng)性和擴(kuò)展性,以至于企業(yè)面對市場,能夠以更快的速度開發(fā)出新的業(yè)務(wù)流程,符合客戶和市場的需求。隨著企業(yè)業(yè)務(wù)流程的 SOA 整合,企業(yè)的后臺業(yè)務(wù)流程日趨規(guī)

6、范。而對于企業(yè)的前端渠道應(yīng)用來說,隨著企業(yè)“以客戶為中心”轉(zhuǎn)化的趨勢,企業(yè)的前端渠道應(yīng)用建設(shè)日趨重要,很多企業(yè)都建立起網(wǎng)上系統(tǒng)、手機(jī)應(yīng)用、電話服務(wù)等前端渠道應(yīng)用。而且,企業(yè)的前端渠道越來越多。圖 1. 企業(yè)前端渠道應(yīng)用的特點(diǎn) 多渠道、以客戶為中心在前端渠道應(yīng)用系統(tǒng)開發(fā)過程中,頁面流程是一個(gè)非常重要的模塊。由于企業(yè)前端渠道越來越多,各種渠道具有異構(gòu)的特點(diǎn),可能是 Web 平臺,也可能是富客戶端前臺,也可能是手機(jī)應(yīng)用,所以一個(gè)適合企業(yè)前端渠道應(yīng)用的頁面流程框架需要是通用的,適合常用的前端平臺。比如 Web、Java 富客戶端,也需要是可擴(kuò)展的,能夠適用于未來的前端特殊渠道應(yīng)用,比如電視渠道。什么是

7、頁面流程,什么是通用頁面流程頁面流程,是指一系列頁面和業(yè)務(wù)的組合,他們之間可以按照一定流程規(guī)則進(jìn)行導(dǎo)航,所有的頁面和業(yè)務(wù)操作都是以流程為中心組織。以往的應(yīng)用程序,一個(gè)交易往往包含著多個(gè)的頁面,每個(gè)頁面上可以提交多個(gè)的業(yè)務(wù)操作,然后根據(jù)這些業(yè)務(wù)操作返回的結(jié)果導(dǎo)航到不同的其它頁面。頁面流程的提出以統(tǒng)一定義的流程方式梳理和導(dǎo)航這些頁面和業(yè)務(wù)操作集合。頁面流程包括界面、頁面導(dǎo)航引擎、業(yè)務(wù)流程和業(yè)務(wù)操作,包含了一個(gè)企業(yè)前端渠道應(yīng)用交易的所有部分,以流程的方式有效清晰的組織企業(yè)的交易?,F(xiàn)在企業(yè)前端應(yīng)用越來越復(fù)雜,服務(wù)越來越多,理解和管理頁面流程也越來越困難了。下面是一個(gè)普通的銀行信用卡申請頁面流程。圖 2

8、. 信用卡申請頁面流程圖信用卡申請頁面流程用例:· 用戶在一個(gè)頁面上選擇申請信用卡。有兩種選項(xiàng),一種是用戶以前沒有該銀行的儲蓄卡,另一種是用戶已有銀行儲蓄卡。· 用戶如果選擇已有銀行的儲蓄卡,就輸入卡號,系統(tǒng)就會嘗試獲取該用戶的信息。· 如果不能找到足夠的信息,就到“用戶財(cái)務(wù)信息”輸入頁面。· 用戶財(cái)務(wù)信息輸入成功后,就會轉(zhuǎn)到下一個(gè)頁面,這個(gè)頁面顯示這個(gè)用戶適合的所有信用卡類型。這個(gè)頁面中,用戶可以選擇其中的一款信用卡并進(jìn)入下一個(gè)頁面,還有一個(gè)“取消”按鈕,用戶點(diǎn)擊后,就可以結(jié)束交易。· 系統(tǒng)顯示確認(rèn)頁面,包含用戶的信用卡申請的概要信息,以及用

9、戶選擇的信用卡基本信息。確認(rèn)頁面中同樣包含了“取消”按鈕,用戶點(diǎn)擊后,就可以結(jié)束交易。同時(shí),還包含著“返回”按鈕,用于用戶發(fā)現(xiàn)選擇錯(cuò)誤后,返回上一頁面進(jìn)行修改。最好還包含“確定”按鈕,用戶點(diǎn)擊后,提交信用卡申請流程。· 系統(tǒng)展示用戶提交成功頁面,頁面上有“確認(rèn)”按鈕,點(diǎn)擊后回到主頁面。· 上面的頁面流程中,“用戶財(cái)務(wù)信息”頁面流程是一個(gè)子頁面流程,可以被眾多的其他頁面流程復(fù)用。· 在上面的頁面流程的所有步驟中,如果出現(xiàn)錯(cuò)誤,系統(tǒng)還會轉(zhuǎn)到“錯(cuò)誤提示頁面”,并告知用戶所有的填寫錯(cuò)誤。這個(gè)信用卡申請頁面流程可以是 Web 的頁面流程,也可以富客戶端頁面流程,也可以是手機(jī)

10、頁面流程,甚至可以是用戶擴(kuò)展的其他頁面流程,諸如電視渠道頁面流程。而這個(gè)通用的頁面流程,就稱之為企業(yè)前段渠道應(yīng)用通用頁面流程框架。我們在接下來的介紹中,還會用到這個(gè)頁面流程用例。當(dāng)今現(xiàn)有的頁面導(dǎo)航和頁面流程技術(shù)當(dāng)今絕大多數(shù)的 MVC 框架都具有頁面導(dǎo)航的功能,但并不是所有的 MVC 框架都具有頁面流程,而通用的頁面流程,則目前只有 IBM BTT 產(chǎn)品才具有。下面是常用最流行的 MVC 框架頁面導(dǎo)航以及頁面流程技術(shù)介紹和分析:Struts 頁面導(dǎo)航Apache Struts MVC 框架使用非常廣泛,但 Struts 中沒有頁面流程的概念和組件。 Struts 的 Web 應(yīng)用中,為了在 St

11、ruts 里面實(shí)現(xiàn)頁面流程,框架提供了 MVC 的 Action(動作)和 View(視圖)來實(shí)現(xiàn)頁面導(dǎo)航。在 Struts 中,一個(gè) Action 和一個(gè)指定的請求 URL 進(jìn)行綁定,只有當(dāng)請求從那個(gè) URL 過來的時(shí)候,Action 才會被執(zhí)行,這里的 Action 是業(yè)務(wù)操作。在 Action 業(yè)務(wù)操作執(zhí)行過程中,會進(jìn)行一系列的處理,并且會返回處理結(jié)果,Struts 導(dǎo)航框架會根據(jù)這個(gè) Action 處理的返回結(jié)果,導(dǎo)航到下一個(gè)合適的視圖顯示結(jié)果。這種方式簡單、有效,指定兩個(gè) View,通過 Action 串成兩個(gè) View 之間的導(dǎo)航。所以要在 Struts 中實(shí)現(xiàn)多步控制的頁面流程,

12、需要多個(gè) Action,并把多個(gè) View 形成鏈,形成一條多步的頁面流程。這是當(dāng)前常用的頁面導(dǎo)航方法,特點(diǎn)是簡單、有效。但是它具有一個(gè)很大的缺陷:就是只能看到 Action 操作和 View 視圖,從 struts-config.xml 配置文件定義中不能清晰的看到頁面流程。就像在地圖中您不能清晰地看見北京到廣州的路線,而只能看見北京到廣州途中的所有各個(gè)城市,任何兩個(gè)城市之間的路線。這種定義靈活性強(qiáng),但組織性不清晰。而且復(fù)用性不好,只能在 Action 和 View 之間復(fù)用,而不能像頁面流程一樣復(fù)用子頁面流程。JSF 頁面導(dǎo)航JSF 是 Web 組件的框架,是 JSP 在頁面的基礎(chǔ)上而不是

13、請求的基礎(chǔ)上使用事件驅(qū)動的方法進(jìn)行頁面導(dǎo)航,使得每個(gè)頁面和它的后退控制器邏輯保持一致。但總的來說,JSF 的頁面導(dǎo)航與 Struts 一樣,是兩個(gè)頁面之間的導(dǎo)航,沒有一個(gè)流程的概念。但 JSF 作為標(biāo)準(zhǔn),具有很強(qiáng)的擴(kuò)展性,Spring Web Flow 在 JSF 基礎(chǔ)上擴(kuò)展支持以 Web Flow 頁面流程的方式進(jìn)行頁面導(dǎo)航。 Spring Web Flow 為 JSF 提供了一個(gè)定義良好的、能跨越多個(gè)頁面和不同路徑、統(tǒng)一流程生存周期管理的頁面流程。Spring Web Flow 頁面流程Spring Web Flow 是一個(gè)基于 Spring 的開源 Web 頁面流程框架,是 2006 年

14、產(chǎn)生并逐漸流行的一個(gè)開源 Web 頁面流程框架。 Spring Web Flow 是 Web 頁面導(dǎo)航的流程化定義和引擎,這個(gè)頁面流程的生存周期要比 Struts 和 JSF 的基于請求的、或基于事件的單一兩個(gè)頁面之間的導(dǎo)航長,但是卻比一個(gè) HTTP 會話要短。它允許您使用一個(gè)簡單清晰的流程化方法體現(xiàn)您的頁面流程,并且隨時(shí)重用。 Spring Web Flow 頁面流程提供一下優(yōu)點(diǎn):· Web 應(yīng)用中的頁面流程可以通過 Web 流程的定義(XML 文件或者 Java 類)清晰的展現(xiàn)出來。· Web 流程被設(shè)計(jì)成自包含的。這就允許您把您的應(yīng)用中的一部分看作是一個(gè)模塊,這樣就可

15、以在多種場合重用它。· Web 流程捕獲任何合理的頁面流程總是使用同種技術(shù)。您不必被迫在特定的場合使用特定的控制器。· 最后,Web 頁面流程是可以通過一個(gè)良好定義的契約使用。它具有一個(gè)清晰的,可觀察的生存周期為您自動管理。通過簡單配置,系統(tǒng)便會為您管理復(fù)雜的邏輯,非常容易使用。Spring Web Flow 的工作原理就是狀態(tài)機(jī)機(jī)制,Web 頁面流程是由一組狀態(tài)(states)的集合組成,一個(gè)狀態(tài)是頁面流程中發(fā)生某事的一個(gè)點(diǎn),每個(gè)狀態(tài)都有一個(gè)或更多的轉(zhuǎn)變(transitions)用來移動到下一個(gè)狀態(tài)。一個(gè)轉(zhuǎn)變是由一個(gè)事件(event)觸發(fā)的。BTT 通用頁面流程 Gene

16、ric Screen FlowBTT 通用頁面流程,早在 10 年前就是 BTT 前端渠道建設(shè)及整合產(chǎn)品的一個(gè)重要組件,而前面介紹的 Spring Web Flow 則是 2006 年才發(fā)布的 1.0 版本。通過下面的進(jìn)一步介紹技術(shù)細(xì)節(jié),讀者會發(fā)現(xiàn) Spring Web Flow 的思路和 BTT Generic Screen Flow 框架很類似,頁面流程通過通用頁面流程定義 XML 文件清晰的展現(xiàn)出來。只不過后者更加強(qiáng)大,具有下面更多的優(yōu)點(diǎn):· BTT 通用頁面流程是通用的頁面流程框架,支持 Web 頁面流程、Java 富客戶端頁面流程、以及手機(jī)客戶端頁面流程,而且用戶可以進(jìn)行擴(kuò)

17、展支持其他前端渠道的頁面流程。· BTT 通用頁面流程采用樹形的數(shù)據(jù)結(jié)構(gòu),具有很好的性能,被全世界一百多家對性能要求非常嚴(yán)格的企業(yè)所采用。關(guān)于 BTT 的數(shù)據(jù)結(jié)構(gòu)是另外一個(gè)話題,本文不進(jìn)行深入討論。BTT 通用頁面流框架BTT 是企業(yè)前端多渠道建設(shè)及整合框架,它的通用頁面流程框架則是適合所有前端渠道的頁面流程。BTT 通用頁面流程由頁面、頁面導(dǎo)航引擎、業(yè)務(wù)流程、業(yè)務(wù)操作四個(gè)部分組成:1. 頁面:一個(gè)單獨(dú)的頁面,可以是一個(gè)產(chǎn)品信息,可以是一個(gè)登錄頁面。它可以是 Web HTML 頁面,也可以是 Java SWT 頁面。2. 頁面導(dǎo)航引擎:在多個(gè)頁面之間進(jìn)行頁面導(dǎo)航。企業(yè)前端應(yīng)用存在大量

18、的用戶頁面,這些頁面之間存在著邏輯關(guān)系,可以在不同頁面直接根據(jù)操作結(jié)果的不同進(jìn)行導(dǎo)航。每個(gè)頁面提交之后,會根據(jù)執(zhí)行“動作”的返回結(jié)果,到達(dá)相應(yīng)另外的頁面,這里的“動作”指的是下面的“業(yè)務(wù)流程”和“業(yè)務(wù)操作”。3. 業(yè)務(wù)流程:指一系列業(yè)務(wù)操作組成的帶邏輯結(jié)構(gòu)和判斷的流程。簡單的業(yè)務(wù)流程可以是一個(gè)狀態(tài)機(jī)組成,狀態(tài)機(jī)的每一步是一個(gè)業(yè)務(wù)操作,然后根據(jù)業(yè)務(wù)操作的執(zhí)行結(jié)果會執(zhí)行相應(yīng)的其他業(yè)務(wù)操作。4. 業(yè)務(wù)操作:這里的業(yè)務(wù)指的是單一的操作,可以是技術(shù)范疇的操作,也可以是業(yè)務(wù)范疇的業(yè)務(wù)操作。業(yè)務(wù)操作可以是記錄電子日志,可以是發(fā)短信,可以是訪問用戶數(shù)據(jù)。圖 3. 頁面流程的組成從上圖中可以看出,前端頁面流程邏

19、輯中的節(jié)點(diǎn)(State),可以是頁面(Page),可以是業(yè)務(wù)邏輯(Business Logic),也可以是業(yè)務(wù)操作(Operation)。而業(yè)務(wù)邏輯(Business Logic)又是由業(yè)務(wù)操作(Operation)組成的業(yè)務(wù)流程。BTT 通用頁面流程設(shè)計(jì)和各種流程在 BTT 中,流程(Flow Processor)是最基本的,然后可以基于流程,擴(kuò)展出業(yè)務(wù)流程(Operation Flow Processor)、Web 頁面流程(HTML Flow Processor)和 Java 富客戶端頁面流程(Java Flow Processor)。對于 Java 富客戶端頁面流,BTT 有兩種,一種

20、是導(dǎo)航 Swing 和 SWT 頁面的頁面流程,另外一種是導(dǎo)航由 XML 生成的頁面的頁面流程。流程(Flow Processor)流程是一個(gè)狀態(tài)機(jī)框架,它是各種流程的基礎(chǔ),所有的 BTT 的業(yè)務(wù)流程和頁面流程都是基于流程(Flow Processor)擴(kuò)展而來。開發(fā)人員,也可以根據(jù)自己的需要擴(kuò)展自己需要的頁面流程。流程本質(zhì)上是一個(gè)狀態(tài)機(jī),它由一系列的狀態(tài)組成。一個(gè)流程包含一個(gè)初始狀態(tài),一個(gè)或多個(gè)的結(jié)束狀態(tài),和一系列中間狀態(tài)。流程的所有狀態(tài)和步驟都可以定義在 XML 文件中。在 BTT 中,可以定義在流程定義文件中 (processor.xml) 或者獨(dú)立流程定義文件(Self-Defined

21、)中。圖 4. 流程的狀態(tài)機(jī)結(jié)構(gòu)BTT 提供了一系列關(guān)于實(shí)現(xiàn)流程的接口:Action(動作), GuardCondition(條件), Processor(流程), State(狀態(tài))和 Transition(跳轉(zhuǎn))。同時(shí)還有 entry actions(入口動作),exit actions(出口動作)和 event(事件)。流程中還有一個(gè)重要的概念:狀態(tài)。流程管理器根據(jù)狀態(tài)來管理流程的生命周期。狀態(tài)是流程的執(zhí)行情況,BTT 中的流程有以下幾種狀態(tài):· 未初始化 引擎已經(jīng)建立了流程實(shí)例,但還沒有初始化。· 初始化 流程引擎已經(jīng)初始化了流程實(shí)例,但是還沒有執(zhí)行。·

22、執(zhí)行 流程引擎開始執(zhí)行流程實(shí)例· 停止 流程引擎在流程未結(jié)束前停止,并且不能被重新啟動。· 掛起- 流程引擎在流程未結(jié)束前停止,但可以被重新啟動。· 完成 流程執(zhí)行結(jié)束,流程執(zhí)行到結(jié)束狀態(tài)。業(yè)務(wù)流程(Operation Flow Processor)業(yè)務(wù)流程是由業(yè)務(wù)操作組成的流程。它是對流程的擴(kuò)展,業(yè)務(wù)流程中的每一個(gè)狀態(tài)都可以用于執(zhí)行一個(gè)或多個(gè)的業(yè)務(wù)操作。架構(gòu)上它實(shí)現(xiàn)了業(yè)務(wù)操作接口,流程中的狀態(tài)可以執(zhí)行業(yè)務(wù)操作。業(yè)務(wù)流程和流程之間的關(guān)系如下圖所示:圖 5. 業(yè)務(wù)流程和流程之間的關(guān)系BTTOperationProcessor 類是業(yè)務(wù)流程的實(shí)現(xiàn)類,它實(shí)現(xiàn)了流程類 B

23、TTProcessor 。下面是業(yè)務(wù)流程的一個(gè)實(shí)例:清單 1. 業(yè)務(wù)流程(Operation Flow Processor)實(shí)例<!- 業(yè)務(wù)流程 -> <opProcessor id="genFlow"> <!開始狀態(tài) -> <state id="initial" type="initial"> <! 狀態(tài)入口動作 -> <entryActions> <! Step是業(yè)務(wù)操作,執(zhí)行用戶編寫的業(yè)務(wù)邏輯 -> <Step id="dummy

24、JournalAct" implClass="com.ibm.btt.samples.appl.JournalHostRequestDataStep"/> </entryActions> <! 根據(jù)業(yè)務(wù)操作的執(zhí)行結(jié)果,流程相應(yīng)進(jìn)行到下一個(gè)狀態(tài), 如果業(yè)務(wù)操作成功就進(jìn)入state2,如果業(yè)務(wù)操作執(zhí)行失敗,則到狀態(tài)finalNotOk。 -> <transitions> <transition id="dummyJournalAct.ok" targetState="state2"

25、/> <transition id="dummyJournalAct.error" targetState="finalNotOk"/> </transitions> </state> <state id="state2"> <entryActions> <Step implClass="com.ibm.btt.samples.appl.SendHostStep" id="dummyHostAct"/> </en

26、tryActions> <transitions> <transition id="dummyHostAct.ok" targetState="state3"/> <transition id="dummyHostAct.error" targetState="finalNotOk"/> </transitions> </state> <state id="state3"> <entryActions> &

27、lt;Step implClass="com.ibm.btt.samples.appl.JournalHostReplyDataStep" id="dummyJournalAct"/> </entryActions> <transitions> <transition id="dummyJournalAct.ok" targetState="finalOk"/> <transition id="dummyJournalAct.error" targ

28、etState="finalNotOk"/> </transitions> </state> <state id="finalOk" type="final" typeIdInfo="ok"/> <state id="finalNotOk" type="final" typeIdInfo="error"/></opProcessor>Web 頁面流程(HTML Flow Processor)

29、BTT 為 B/S 的應(yīng)用系統(tǒng)提供了 Web 頁面流程,用于把一個(gè)交易中的所有 HTML 頁面、JSP 頁面、業(yè)務(wù)流程和業(yè)務(wù)操作組織成一個(gè)流程,并根據(jù)狀態(tài)機(jī)進(jìn)行業(yè)務(wù)的執(zhí)行和頁面的導(dǎo)航。通用頁面流程中的 BTTHtmlProcessor 就是用于驅(qū)動 Web 頁面流程的。圖 6. Web 頁面流程和流程之間的關(guān)系Web 頁面流程為了支持導(dǎo)航 Web 頁面,在流程狀態(tài)機(jī)中增強(qiáng)了下面特性:· Web 頁面流程是異步執(zhí)行的,流程的狀態(tài)可以和狀態(tài)機(jī)的外部產(chǎn)生交互,也就是和前端的用戶界面產(chǎn)生關(guān)聯(lián)。 Web 頁面流程執(zhí)行到頁面狀態(tài)時(shí),流程就緩存在服務(wù)器端,直到客戶端用戶觸發(fā)了頁面操作,才根據(jù)頁面上

30、觸發(fā)的操作重新繼續(xù)未完成的 Web 頁面流程。而上面介紹的業(yè)務(wù)流程只有同步執(zhí)行的功能。· Web 頁面流程有兩個(gè)擴(kuò)展的狀態(tài):頁面和子流程。當(dāng) Web 頁面流程執(zhí)行到這兩個(gè)狀態(tài)時(shí),流程就釋放流程控制權(quán),直到頁面狀態(tài)和子流程執(zhí)行完畢,控制權(quán)重新回到 Web 頁面流程。· 當(dāng)執(zhí)行到頁面狀態(tài)時(shí),只有當(dāng)從瀏覽器接收到相應(yīng)的事件,流程才繼續(xù)往下執(zhí)行。用戶頁面數(shù)據(jù)含有隱藏字段 <dse_nextEventName>,后臺的 Web 頁面流程根據(jù)前端頁面發(fā)送 <dse_nextEventName> 的事件值,轉(zhuǎn)到下一個(gè)狀態(tài)。· 當(dāng)執(zhí)行到子流程狀態(tài)時(shí),頁面流

31、程的控制權(quán)就轉(zhuǎn)移到子流程,只有從子流程結(jié)束后,父流程才能繼續(xù)。父流程根據(jù)子流程結(jié)束狀態(tài)中的 <typeIdInfo> 的值,轉(zhuǎn)移到下一個(gè)狀態(tài)。· Web 頁面流程是異步的,所以存在超時(shí)的情況??梢远x processorTimeout 屬性來指定 Web 頁面流程實(shí)例的超時(shí)等待時(shí)間。當(dāng) Web 頁面流程超時(shí)時(shí),引擎會發(fā)送超時(shí)事件,清空流程實(shí)例以及內(nèi)存等資源。下面是相應(yīng)的定義:<field id="defaultProcessesTimeout" value="1000"/> 。值以毫秒為單位,默認(rèn)值是 0,表示永遠(yuǎn)不超時(shí)

32、。下面是 Web 頁面流程的實(shí)例,XML 配置的方式清晰易懂,就算是業(yè)務(wù)人員也可以看懂。注釋中有相應(yīng)的流程解釋:清單 2. Web 頁面流程(HTML Flow Processor)實(shí)例<!- HTML Processor表示W(wǎng)eb頁面流程, id唯一標(biāo)示這個(gè)web頁面流程-><htmlProcessor context="creditCardsCtx" id="creditCardsProc"> <!- 開始狀態(tài)-> <htmlState id="initial" type="in

33、itial"> <transitions> <htmlTransition id="initial.start" targetState="creditCardsWellcome"/> </transitions> </htmlState> <!- 歡迎頁面狀態(tài), 導(dǎo)航到歡迎頁面。type="page"表示是頁面狀態(tài), typeIdInfo="creditCardsWellcome.jsp"表示頁面內(nèi)容。-> <htmlState i

34、d="creditCardsWellcome" type="page" typeIdInfo="creditCardsWellcome.jsp"> <transitions> <!- 根據(jù)頁面上出發(fā)的事件,轉(zhuǎn)到下一個(gè)狀態(tài)creditHistoryOpState。 頁面上的事件如: nextEventName="history" -> <htmlTransition context="creditCardsWellcome_history_Ctx" id=&qu

35、ot;creditCardsWellcome.history" targetState="creditHistoryOpState"/> </transitions> </htmlState> <!- 從頁面到此業(yè)務(wù)狀態(tài),執(zhí)行相應(yīng)的業(yè)務(wù)操作, type="operation"表示這個(gè)狀態(tài)是一個(gè)業(yè)務(wù)操作, typeIdInfo="creditHistoryOp"表示這個(gè)業(yè)務(wù)操作的ID-> <!- Operation state. The operation is executed

36、 by the specialized state. The operation is firing the exit events -> <operationState id="creditHistoryOpState" type="operation" typeIdInfo="creditHistoryOp"> <!- 根據(jù)業(yè)務(wù)操作的返回結(jié)果,轉(zhuǎn)移到下一個(gè)Web流程的下一個(gè)狀態(tài)-> <transitions> <transition id="creditHistoryOpS

37、tate.accountExists" targetState="selectCardsOpState"/> <transition id="creditHistoryOpState.newAccount" targetState="financialInfoState"/> <transition id="creditHistoryOpState.error" targetState="finalNotOK"/> </transitions>

38、 </operationState> <!- 子流程狀態(tài),這是一個(gè)特殊的頁面狀態(tài), type="subFlow"表示是一個(gè)子頁面流程, typeIdInfo="financialInfoProc"表示子頁面流程的ID, Web流程會根據(jù)ID并且執(zhí)行子頁面流程-> <htmlState id="financialInfoState" type="subFlow" typeIdInfo="financialInfoProc"> <!- 根據(jù)子頁面流程的結(jié)果,

39、Web流程執(zhí)行下一個(gè)流程狀態(tài) -> <transitions> <!- 如果子頁面流程執(zhí)行成功,則到selectCardsOpState狀態(tài) -> <htmlTransition id="financialInfoState.OK" outputMapFmt="financialInfoToCreditApplFormat" targetState="selectCardsOpState"/> <!- 如果子頁面流程執(zhí)行失敗,則到finalNotOK狀態(tài) -> <htmlTr

40、ansition id="financialInfoState.notOK" outputMapFmt="errorMessagesMapper" targetState="finalNotOK"/> <!- 如果子頁面流程取消,則重新回到歡迎界面,用戶可以重新開始流程 -> <transition id="financialInfoState.canceled" targetState="creditCardsWellcome"/> </transition

41、s> </htmlState> <!- 這個(gè)狀態(tài)得到信用卡的種類信息 -> <htmlState id="selectCardsOpState"> <entryActions> <executeOperationAct id="selectCardsAct" operationName="selectCardsOp"/> </entryActions> <transitions> <transition id="selectCar

42、dsAct.ok" targetState="creditCardsPage"/> <transition id="selectCardsAct.error" targetState="finalNotOK"/> </transitions> </htmlState> <!- 選擇信用卡類型頁面狀態(tài),type="page"表示這個(gè)狀態(tài)是頁面, typeIdInfo="creditCardsPage.jsp"表示頁面內(nèi)容。-> <

43、;htmlState id="creditCardsPage" type="page" typeIdInfo="creditCardsPage.jsp"> <!- 根據(jù)選擇信用卡的結(jié)果,轉(zhuǎn)到流程的下一個(gè)狀態(tài) -> <transitions> <!- 如果用戶信用卡選擇成功,轉(zhuǎn)到流程的下一個(gè)狀態(tài)creditCardConfirmationPage -> <transition id="creditCardsPage.OK" targetState="credi

44、tCardConfirmationPage"/> <!- 如果用戶取消了信用卡申請,則轉(zhuǎn)到流程的下一個(gè)狀態(tài)finalOK -> <transition id="creditCardsPage.Cancel" targetState="finalOK"/> </transitions> </htmlState> <!- 信用卡確認(rèn)信息頁面,type="page"表示這個(gè)狀態(tài)是頁面, typeIdInfo="creditCardConfirmationPage

45、.jsp"表示頁面內(nèi)容 -> <htmlState id="creditCardConfirmationPage" type="page" typeIdInfo="creditCardConfirmationPage.jsp"> <transitions> <!- 如果用戶確認(rèn)了信用卡信息, 則轉(zhuǎn)移到下一個(gè)流程狀態(tài)creditCardProcessingOpState。 -> <transition id="creditCardConfirmationPage.OK&

46、quot; targetState="creditCardProcessingOpState"/> <!- 如果用戶取消了信用卡申請,則轉(zhuǎn)到流程的下一個(gè)狀態(tài)finalOK -> <transition id="creditCardConfirmationPage.Cancel" targetState="finalOK"/> </transitions> </htmlState> <!- 信用卡處理邏輯狀態(tài) -> <htmlState id="credi

47、tCardProcessingOpState"> <entryActions> <!- 執(zhí)行業(yè)務(wù)操作,operationName="creditCardProcessingOp"表示業(yè)務(wù)操作的ID -> <executeOperationAct id="creditCardProcAct" linkContextTo="processor" operationName="creditCardProcessingOp"/> </entryActions>

48、 <transitions> <!- 如果信用卡處理申請?zhí)峤怀晒?,則轉(zhuǎn)移到下一個(gè)狀態(tài)creditCardProcessedState。 -> <transition id="creditCardProcAct.ok" targetState="creditCardProcessedState"/> <!- 如果信用卡處理申請?zhí)峤皇?,則轉(zhuǎn)移到下一個(gè)狀態(tài)finalNotOK。 -> <transition id="creditCardProcAct.error" targetStat

49、e="finalNotOK"/> </transitions> </htmlState> <!- 信用卡處理完成頁面。type="page"表示這個(gè)狀態(tài)是頁面, typeIdInfo="creditCardProcessedPage.jsp"表示頁面內(nèi)容 -> <htmlState id="creditCardProcessedState" type="page" typeIdInfo="creditCardProcessedPage.j

50、sp"> <transitions> <transition id="creditCardProcessedState.OK" targetState="finalOK"/> </transitions> </htmlState> <!- 申請錯(cuò)誤頁面。type="final"表示這個(gè)狀態(tài)是流程的結(jié)束狀態(tài), finalPage="apologies.jsp"表示頁面內(nèi)容 -> <htmlState finalPage="ap

51、ologies.jsp" id="finalNotOK" type="final" typeIdInfo="notOK"/> <!- 申請成功頁面。type="final"表示這個(gè)狀態(tài)是流程的結(jié)束狀態(tài), finalPage="accountinquiry.jsp"表示頁面內(nèi)容 -> <htmlState finalPage="accountinquiry.jsp" id="finalOK" type="final

52、" typeIdInfo="OK"/></htmlProcessor>XUI 頁面流程(XUI Flow Processor)XUI 頁面流程是 Java 富客戶端的頁面流程,是 BTT 兩種 Java 富客戶端頁面流程中的一種。 XUI 頁面流程把一個(gè)交易中的所有 XML UI 頁面、業(yè)務(wù)流程和業(yè)務(wù)操作組成一個(gè)流程,并且根據(jù)狀態(tài)機(jī)進(jìn)行業(yè)務(wù)的執(zhí)行和頁面的導(dǎo)航。通用頁面流程中的 XUIProcessor 就是用于驅(qū)動 XUI 富客戶端頁面流程的。圖 7. XUI 富客戶端頁面流程和流程之間的關(guān)系XUI 富客戶端頁面流程和 Web 頁面流程一樣,是異

53、步的,具有 XUI 頁面狀態(tài)(state),超時(shí)機(jī)制等。下面是同樣的信用卡申請流程的 XUI 頁面流程定義。我們可以看出,其原理和 Web 頁面流程非常類似。清單 3. XUI 富客戶端頁面流程(XUI Flow Processor)實(shí)例<!- xuiProcessor表示XUI富客戶端頁面流流程, id唯一標(biāo)示這個(gè)xui富客戶端頁面流程-><xuiProcessor context="creditCardsCtx" id="creditCardsProc"> <!- 開始狀態(tài),執(zhí)行initialStep業(yè)務(wù)操作,并根據(jù)結(jié)果

54、導(dǎo)航到下一個(gè)狀態(tài)-> <state id="initial" type="initial"> <entryActions> <Step id="initialStep" implClass="com.ibm.btt.rcp.sample.operation.step.InitialStep" /> </entryActions> <transitions> <transition id="initialStep.ok" ta

55、rgetState="creditCardsWellcome" /> <transition id="initialStep.error" targetState="finalNotOk" /> </transitions> </state> <!- 歡迎頁面狀態(tài)。type="page"表示是頁面狀態(tài), typeIdInfo="jar:/xui/firstStep.xui"表示頁面內(nèi)容對應(yīng)的XML。-> <xuiState id=&qu

56、ot;creditCardsWellcome" type="page" typeIdInfo="jar:/xui/firstStep.xui"> <!- 根據(jù)頁面上出發(fā)的事件,轉(zhuǎn)到下一個(gè)狀態(tài)creditHistoryOpState。 頁面上會使用StateChangeAction,發(fā)送"history"事件 -> <transitions> <transition context="creditCardsWellcome_history_Ctx" id="cr

57、editCardsWellcome.history" targetState="creditHistoryOpState" /> </transitions> </xuiState> <!- 業(yè)務(wù)狀態(tài),執(zhí)行相應(yīng)的業(yè)務(wù)操作, type="operation"表示這個(gè)狀態(tài)是一個(gè)業(yè)務(wù)操作-> <state id="creditHistoryOpState" type="operation"> <entryActions> <!- 執(zhí)行相應(yīng)的

58、業(yè)務(wù)操作, operationName="creditHistoryOp" 表示要執(zhí)行的業(yè)務(wù)操作的ID-> <executeOperationAct id="creditHistoryAct" linkContextTo="processor" operationName="creditHistoryOp" /> </entryActions> <!- 根據(jù)業(yè)務(wù)操作的返回結(jié)果,轉(zhuǎn)移到XUI頁面流程的下一個(gè)狀態(tài)-> <transitions> <transi

59、tion id="creditHistoryAct.accountExists" targetState="creditCardsPage" /> <transition id="creditHistoryAct.newAccount" targetState="financialInfoState" /> <transition id="creditHistoryAct.error" targetState="finalNotOk" /> &l

60、t;/transitions> </state> <!- 子流程狀態(tài),這是一個(gè)特殊的頁面狀態(tài)-> <xuiState id="financialInfoState"> <entryActions> <!- executeXuiSubflowAct表示執(zhí)行一個(gè)子頁面流程, processor="financialInfoProc"表示子頁面流程的ID, XUI富客戶端頁面流程會根據(jù)ID并且執(zhí)行子頁面流程-> <executeXuiSubflowAct id="initialS

61、tep" processor="financialInfoProc" /> </entryActions> <!- 根據(jù)子頁面流程的結(jié)果,XUI富客戶端頁面流程執(zhí)行下一個(gè)流程狀態(tài) -> <transitions> <transition id="initialStep.ok" outputMapFmt="financialInfoToCreditApplFormat" targetState="creditCardsPage" /> <trans

62、ition id="initialStep.notOK" outputMapFmt="errorMessagesMapper" targetState="finalNotOK" /> <transition id="initialStep.canceled" targetState="creditCardsWellcome" /> </transitions> </xuiState> <!- 選擇信用卡類型頁面狀態(tài),type="page&

63、quot;表示這個(gè)狀態(tài)是頁面, typeIdInfo="jar:/xui/chooseCard.xui"表示頁面內(nèi)容。-> <xuiState id="creditCardsPage" type="page" typeIdInfo="jar:/xui/chooseCard.xui"> <transitions> <!- 如果用戶信用卡選擇成功, 轉(zhuǎn)到流程的下一個(gè)狀態(tài)creditCardConfirmationPage -> <transition id="c

64、reditCardsPage.ok" targetState="creditCardConfirmationPage" /> <!- 如果用戶取消了信用卡申請,則轉(zhuǎn)到流程的下一個(gè)狀態(tài)finalOK -> <transition id="creditCardsPage.cancel" targetState="creditCardsWellcome" /> </transitions> </xuiState> <!- 信用卡確認(rèn)信息頁面,type="page"表示這個(gè)狀態(tài)是頁面, typeIdInfo="jar:/xui/confirm.xui"表示頁面內(nèi)容 -> <xuiState id="creditCardConfirmationPage" type="page" typeIdInfo=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論