青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

E-State:企業級狀態機 - 來自ROOM的框架

E-State和工作流

我在前面的文章狀態機與工作流(State Machines and Workflow(WLDJ,卷3,第1)中討論過工作流和狀態機,它們是面向流程的應用程序的補充實現策略。 狀態技術是對許多業務流程中所采用的里程碑技術所做繼承的強大抽象。另一方面,工作流 - 這里特指BEA Weblogic IntegrationBusiness Process ModelerBPM)組件 - 提供了重要的企業級服務,例如外部系統集成、人員工作列表(worklist)和任務管理,事件和計時器,以及XML消息處理。在前面的文章中指出過,混合的狀態-工作流解決方案有以下幾個部分:

1.  狀態機框架,由以下部分構成:
-
狀態模型: 一套狀態和轉換,在XML文檔中表達。
- Actor
數據庫: 主角(actor)是指具有狀態的實體。Actor的狀態由狀態機保存在數據庫里。
-
狀態機引擎: 把事件插入Actor的狀態模型中,并相應地更新狀態。它還會在進入、退出狀態或者發生轉換時,調用用戶自定義動作類。
-
動作類: 用戶自定義的Java類,負責響應某種狀態的進入或退出,或者某個Actor在特定狀態模型下執行過濾形態。

2. BPM工作流:負責接收事件,然后把事件插入狀態機。

3. BPM工作流:設置計時器,在時間用盡的時候把超時事件插入狀態機。

4.  BPM工作流:某一狀態動作調用該工作流,給它分配一個工作列表任務或與外部系統交互。

E-State 是第一部分即狀態機框架的參考實現。本文來討論狀態機的體系結構。

E-State 體系結構

方法學

E-State的狀態模型基于實時面向對象建模(Real-time Object-Oriented Modeling ROOM) 的方法。ROOM 的狀態圖是層次結構的,也就是說每個狀態可以擁有子狀態。這個主意很簡單,效果卻異常強大。 從人類思維的角度來看,平面狀態模型無法進行擴展。當狀態和轉換的數量增長時,平面模型就會變得難于理解。而層次狀態模型則可以分部分考察,每一部分理解起來相對就變得簡單了。例如,考慮圖 1

clip_image001

在這個模型里,轉換 ab 會使狀態 a1 a2 變成狀態 b 而轉換ac 會使狀態從 a1 a2 變成 c。所有狀態的轉換toC 會使狀態變成c 在狀態 a1里的轉換 ba 會形成新的狀態 a。初始狀態是 b。狀態從 a1變為a2時,要經過轉換 a1a2,從 a2 變為a1時,要經過a2a1。轉換ca把狀態引到一個選擇點:如果最后的狀態是a1,就變成a1,否則就變成 a2

同樣的場景,用層次結構來表示,理解起來就容易多了,如圖2所示:

clip_image002

首先,超級狀態 a被細分為狀態a1 a2(圖2中的右圖);這樣整個系統的狀態圖(圖2中的左圖)變得更簡潔。從狀態的高最層來看,轉換ab ba只是在狀態a b之間轉換;但是在狀態 a里,可以看到 ba 指向子狀態 a1,而 ab則來源于a1 轉換ac a1 a2 開始,指向 c;轉換 ca c開始,指向 狀態a的最后一個子狀態。另外,轉換toC不象圖1中那樣,要從每個狀態來開始;來自最高層狀態的非擴展轉換點toC 的事件指向狀態 c,就可以表示需要的行為。

作為層次結構設計的成果之一,ROOM提供了二個強大的特性:組轉換和歷史恢復。所謂組轉換是指:針對指定狀態發生的轉換,不論指定狀態處在什么子狀態當中;轉換 ac 把狀態從 a 變為 c,不論狀態a的子狀態是a1還是 a2歷史恢復 就是變回指定狀態最近的子狀態;轉換 ca 把狀態 c 變回 a最近的子狀態.

可以選擇的方法還有UMLPetri-nets,它們都支持層次結構。

引擎

E-State的核心是一個無狀態的會話Enterprise JavaBean (EJB),它被稱為狀態機(StateMachine),如圖3中的陰影部分所示。

clip_image003

StateMachine EJB被配置成指向具體的狀態模型,使用XML文件來進行配置,配置文件中包含以下內容:

·一組狀態和一組轉換;

·唯一的命名空間,唯一命名空間有助于多重部署,稍后介紹。

·Java 動作回調類的名稱,狀態機處理事件時,調用回調類。

EJB把模型用于Actor。在ROOM方法中,Actor指的是一個活動對象,狀態模型最好地描述了這個對象的行為。

( ROOM里,活動對象擁有自己的控制線程,以及一組自己的入站、出站消息接口。E-StateActor的概念更嚴格) E-State里,Actor是擁有狀態的實體,例如一個保險索賠。在一個模型里,從一個狀態到另一個狀態的轉換,反映了Actor的狀態變化;例如,索賠可能處在等待狀態,激活狀態,或者空閑狀態。 E-State 有三個表負責跟蹤Actor的狀態,這三個表是 Actor(主角)、Actor_Property(主角屬性)和 Actor_State(主角狀態),還有對應的實體 EJB (ActorActorProperty,和 ActorState) 來表示這三個表,如圖3所示。StateMachine EJB 某種程度上可以看作這些實體EJB的一個層面(facade)。StateMachine EJBActor管理方法有: createActor()getCurrentState()getChildState() getActorProperty()getActorProperties() setActorProperty()

狀態機余下的方法 (startMachine() injectEvent()) 形成了狀態機引擎,驅動著Actor的狀態變化。實際上,startMachine()只是調用 injectEvent(),給它傳遞了一個特殊的初始化事件,由injectEvent()執行轉換操作,轉換操作的起點是模型中每個狀態的初始轉換點。所以, injectEvent() 方法是狀態機的核心,由它來驅動業務流程的動作前進。這個方法可以調用用戶自定義動作類,從而實現模型中所定義的狀態行動(StateAction)接口。動作類的功能是將重要的狀態機事件通知客戶,并向客戶請示邏輯決策。在表1里列出了動作類的方法。

動作類的方法

方法

動作

OnStateEnter

通知進入了一個狀態

OnStateExit

通知退出了一個狀態

OnTransitionExecute

通知執行了一個轉換。如果方法返回真,則允許該轉換發生,如果為假,則阻止轉換(在ROOM的概念里,稱為警衛(guard))

Choice

要執行選擇點決策的請求。返回值為真或假,控制著狀態模型里控制分支的流轉方向。

在保險索賠的例子里,動作類啟動工作流,執行與任務相關的工作或者清理工作,或者啟動計數器。在 WebLogic Integration 7.0里,由BPM API啟動工作流。在In WebLogic Integration 8.1里,則用Web服務調用工作流。

2里歸納了StateMachine EJB的方法。

2 StateMachine EJB的方法

方法

動作

CreateActor

Actor表中為StateMachine EJB代表的模型建立一個新記錄

GetCurrentState

取得StateMachine EJB代表的模型的Actor的當前葉子狀態

GetChildState

取得StateMachine EJB代表的模型的Actor的指定狀態的當前子狀態

GetActorProperty

取得StateMachine EJB代表的模型的Actor的指定屬性值

SetActorProperty

設置StateMachine EJB代表的模型的Actor的指定屬性值

GetActorProperties

取得StateMachine EJB代表的模型的Actor的名稱、類型和每個屬性的值

StartMachine

執行模型里的每個狀態的初始化轉換,啟動StateMachine EJB代表的模型的Actor的狀態模型

InjectEvent

把指定事件插入StateMachine EJB代表的模型的Actor的狀態模型里

在保險索賠的例子里,插入器(Injector)工作流調用狀態機的 injectEvent()方法。在WebLogic Integration 7.0里,工作流使用一個業務操作來調用這個方法,而在 WebLogic Integration 8.1,則用EJB控件來完成。

數據庫架構

4顯示了保持Actor持久狀態信息的表結構。.

clip_image004

在主表 Actor里,保存了特定 模型類型的Actor的當前狀態。當前狀態是指Actor目前所處的葉子狀態。這個表的主鍵由Actor的唯一標識符和它的模型命名空間組合而成的。一個Actor可能在多個 模型命名空間里具有狀態。特別的是,如果在不同的命名空間里存在著同一模型的二個版本,那么在每個命名空間里的Actor狀態都能在Actor表里表示。

Actor_State表捕捉特定命名空間里的特定Actor的復合狀態的活動子狀態。這個表僅供內部使用,狀態引擎用來來實現歷史恢復。在actoractor_state表之間存在著一對多的關系。

Actor_Property 表保存特定命名空間里的特定Actor的用戶自定義屬性。每個屬性都有一個名字(對于每個命名空間的每個Actor,名字必須是唯一的),一個類型,和一個值。這個表為客戶應用程序提供了方便,可以把一組數據與角色關聯;更常見的情況是,應用程序的數據保存在應用程序的數據存儲機制里。

部署

StateMachine EJB會為每個狀態模型部署一個不同的實例。每個實例的源代碼是相同的(相同的home remote接口,相同的實現),但是具體的配置不同。StateMachine EJB的部署描述符指定了唯一的JNDI(Java命名和目錄接口)名(客戶用這個名字來定位EJB),還有一個對模型XML文件的引用。例如,保險狀態模型的StateMachine EJB可能有一個 JNDI "state_insurance" ,并指向文件 "Insurance.xml"。要與這個模型交互,客戶應用程序可以用"state-insurance"這個JNDI名來訪問模型的EJB并調用EJB的方法。這個特殊的方法有著顯著的優勢:

·生命周期:要想準備好一個可供處理的新狀態模型,需要部署一個指定該模型的StateMachine EJB。要想取消這個模型,需要取消EJB的部署。要把變化交給模型,需要用修改過的模型文件重新部署EJB

·版本管理:如果現有的狀態模型有一個新的主版本,那么新版本可以部署成獨立的EJB,與以前的版本并存。

例如,state-insurance-1.1可以與state-insurance并存。

數據模型同樣支持版本管理。給定的Actor有多個模型的持久狀態,包括相同模型的不同版本,只有模型有不同的名稱。.

大多數業務流程要運行相當長的時候,所以應用程序升級的管理變得極富挑戰。有二個場景很難解決:

1.做了一個小補丁,但是有Actor正在用沒有打補丁的版本運行著。

2. 做了一個主要補丁,只有新Actor可用,舊的Actor仍然使用以前的版。.

E-State 是解決這些問題聰明的解決方案:

1.應用小補丁,意味著為模型重新部署現有EJBActor會在停止的地方重新開始,補丁同時發揮作用。.

2.應用主要補丁,意味著用一個獨立的命名空間部署新的EJB,而現在已經部署的EJB保持不變。模型彼此獨立,這樣老Actor用舊版本運行,新Actor用新版本運行。

結束語

E-State是由ROOM方法所啟發的一個企業級狀態機框架。它與BMP工作流集成在一起,提供了關鍵的集成服務,例如系統集成、事件、計時器、工作列表以及XML。這為開發面向流程的業務應用程序提供了強大的解決方案。E-State中包括:運行時引擎,狀態模型架構,持久性服務,用戶自定義動作類(在發生轉換時,在進入或退出狀態時,引擎會調用用戶自定義動作類。)動作類調用工作流來利用BPM服務;而工作流被事件觸發時,則調用引擎來觸發轉換。

參考資料 

·  Selic, Gullickson, and Ward. (1994). Real-Time Object-Oriented Modeling. Wiley.

posted on 2009-02-13 12:01 肥仔 閱讀(959) 評論(0)  編輯 收藏 引用 所屬分類: 狀態機 & 自動機 & 形式語言

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲美女视频在线观看| 亚洲欧美激情精品一区二区| 久久精品国产成人| 99国产精品久久| 亚洲二区视频| 午夜精品国产更新| 亚洲一区免费在线观看| 亚洲欧洲一区二区在线播放| 国外成人在线视频| 免费成人av| 久久久综合精品| 久久久久网站| 久久亚洲精品伦理| 狂野欧美激情性xxxx欧美| 久久精品国产亚洲一区二区三区| 亚洲欧美偷拍卡通变态| 一区二区欧美精品| 亚洲一区二区三区免费观看 | 亚洲网站在线看| 亚洲韩日在线| 在线精品视频在线观看高清| 激情久久综艺| 一区二区三区四区五区视频| 久久精品国产亚洲a| 亚洲国产成人久久综合| 在线亚洲高清视频| 免费视频久久| 国产一区日韩二区欧美三区| 99视频热这里只有精品免费| 久久av红桃一区二区小说| 亚洲高清电影| 欧美专区日韩专区| 国产精品成人va在线观看| 亚洲国产成人av| 欧美在线观看网站| av不卡免费看| 欧美激情一区| 亚洲电影av| 久久精品国产综合精品| 一区二区三区高清| 欧美精品在线免费播放| 悠悠资源网久久精品| 亚洲综合欧美| 日韩视频免费观看高清完整版| 欧美中文字幕不卡| 国产精品亚洲欧美| 亚洲在线一区二区| 亚洲精品久久久久久久久久久久久| 欧美一区二区私人影院日本| 欧美午夜在线观看| aa国产精品| 亚洲国产精品传媒在线观看| 久久久视频精品| 狠狠色噜噜狠狠狠狠色吗综合| 亚久久调教视频| 一区二区三区四区五区视频| 亚洲国产精品一区| 欧美大片一区| 91久久久国产精品| 欧美激情一区二区三区不卡| 久久影视三级福利片| 在线看无码的免费网站| 欧美不卡一区| 欧美a级在线| 亚洲毛片在线观看.| 亚洲精品国精品久久99热| 欧美激情在线有限公司| 一区二区三区高清在线观看| 一本高清dvd不卡在线观看| 欧美视频在线免费看| 亚洲欧美激情视频| 午夜在线精品| 亚洲国产一二三| 亚洲欧洲一区| 国产精品久久波多野结衣| 亚洲免费影视| 久久精品一区二区三区不卡| 亚洲电影在线| 亚洲精品日韩久久| 国产精品色午夜在线观看| 久久国产欧美精品| 久久一二三区| 9l国产精品久久久久麻豆| 亚洲一二三级电影| 黄色成人av网| 亚洲激情国产| 国产日韩在线一区| 欧美黄色网络| 国产伦理一区| 欧美激情自拍| 国产欧美日韩伦理| 欧美激情视频网站| 国产精品草草| 欧美成人精品一区二区| 欧美视频四区| 欧美大片91| 国产农村妇女毛片精品久久麻豆 | 性做久久久久久久免费看| 激情91久久| 一本大道久久a久久精品综合| 国产亚洲综合精品| 亚洲精品国产拍免费91在线| 国产视频久久久久| 亚洲伦理一区| 在线激情影院一区| 亚洲香蕉网站| 99精品福利视频| 久久精品国产综合| 亚洲午夜久久久久久久久电影院| 久久国产精品久久久久久久久久| 91久久精品一区二区三区| 亚洲欧美日韩一区二区三区在线观看 | 国内成+人亚洲+欧美+综合在线| 亚洲电影一级黄| 国产日韩欧美制服另类| 亚洲精品小视频| 亚洲国产精品123| 欧美一区日韩一区| 亚洲午夜未删减在线观看| 免费一级欧美在线大片| 麻豆成人在线观看| 国产亚洲精品资源在线26u| 亚洲一区二区三区涩| av成人动漫| 免费日韩成人| 欧美国产精品v| 亚洲第一精品电影| 久久精品欧洲| 久久久久久一区二区| 国产日韩欧美视频| 亚洲欧美综合精品久久成人| 亚洲一区三区电影在线观看| 欧美日韩视频一区二区三区| 亚洲国产专区校园欧美| 亚洲黄色精品| 欧美金8天国| 亚洲激情自拍| 一区二区三区蜜桃网| 欧美日韩免费高清一区色橹橹| 亚洲激情网站| 一本久道综合久久精品| 欧美日韩在线播放三区四区| 亚洲老司机av| 亚洲综合久久久久| 国产欧美一区二区三区沐欲 | 国产欧美亚洲一区| 欧美在线观看一区| 免费一区视频| 亚洲美女免费精品视频在线观看| 免费毛片一区二区三区久久久| 欧美国产视频一区二区| 亚洲精选在线| 国产精品久久久久av| 亚洲欧美中文日韩v在线观看| 久久久www成人免费毛片麻豆| 一区二区三区中文在线观看| 模特精品裸拍一区| 99精品国产在热久久婷婷| 欧美一级大片在线免费观看| 国产一区二区毛片| 嫩草成人www欧美| 一区二区三区国产在线观看| 欧美一区二区三区在线免费观看| 黑人中文字幕一区二区三区| 欧美承认网站| 亚洲主播在线播放| 欧美福利一区| 午夜视频在线观看一区二区| 狠狠色狠狠色综合日日tαg | 久久精品中文字幕免费mv| 亚洲国产精品成人综合| 亚洲主播在线| 一区二区三区在线观看国产| 欧美激情小视频| 欧美在线免费观看| 亚洲一区一卡| 黄色日韩精品| 欧美日韩黄色大片| 久久成人资源| 一本不卡影院| 欧美电影免费观看高清| 亚洲综合电影| 亚洲美女啪啪| 激情丁香综合| 欧美性猛交xxxx乱大交退制版| 性欧美激情精品| 夜夜嗨一区二区| 亚洲国产视频a| 老司机一区二区| 欧美亚洲免费| 亚洲一级一区| 99视频精品全国免费| 亚洲电影视频在线| 精品成人一区二区| 国产精品日韩在线观看| 欧美日韩一区二区在线播放| 美女脱光内衣内裤视频久久影院| 欧美亚洲日本国产| 亚洲天堂免费在线观看视频| 亚洲精品一区二区三区av|