SBB
SBB
SBB:帶借位減法,格式:SBB DST,SRC, 執行的操作:(DST)←(DST)-(SRC)-CF,其中CF為進位的值。 SBB Compents :他們組成了Application .他們以何種方式組合是由SLEE來確定的。
SBB Compents的七大部分:
1. SBB組件發出和接收的事件。
2. 單個實例化的狀態:每個實例化域的狀態都被收錄到SLEE集中管理的CMP容器。
3. 事件處理方法: Sbb組件中包含每個它所接收到的事件類型的一個事件處理方法。
4. 本地介面:SBB中定義一個SBB本地介面,它定義有可能同步被調用的SBB組件(是在同一個SBB Tree上生成的SBB才可調用的介面,下面也將詳細介紹)的操作。
5. Child Relation:SBB成分可能包括零個或者多個子SBB組件,SBB組件規定他的自子組件的關係。
6 可共享性:SBB組件通過Activity Context的方式與其他SBB組件共享狀態,SBB組件定義。
7. 一個JAVA介面(Activity Context Interface),這個介面定義為了得到和設置這些特性所進行的安全訪問操作。
SBB實體
是SBB組件的一個實例,他是一個邏輯實體,是一個代表著實例持久性狀態的實體。
SBB對象
是一個實現javax.slee.sbb介面的java對象,和SBB實體所不同的是SBB的實體是邏輯的實體,而SBB對象則是一個JAVA的對象,在運行的時候,SLEE分配0個或者多個SBB對象去表現一個SBB實體。
三者關係描述
SBB Compents 的一個實例就是一個SBB實體,SBB實體具有以上的七大功能,他就具備了處理一些事件的能力,當SLEE把這些實體分配給SBB對象以後,SBB對象就具有以上的七大功能,且能夠來處理事件了。當事件處理完,SLEE把SBB實體從SBB對象移除以後,SBB實體仍然存在,他還具有以上七大功能(等待SLEE再次把它分配給其他的SBB對象),而SBB對象則沒有了,如果再調用SBB對象的unSetSbbContext()方法,SBB對象將成為垃圾。由此可見:SBB對象和SBB實體是個多對一的關係,可以將一個SBB實體分配給多個SBB對象。
注意:如果在沒有給SBB對象分配SBB實體的就來使用這個SBB對象,就會拋出異常。
在SBB的生命
SBB的生命周期(見圖5):
SBB的生命周期有三個狀態:不存在,pooled 狀態,Ready狀態
從pooled狀態到ready狀態
SBB對象的生命周期開始於SLEE用newInstance()方法創建一個SBB對象,然後SLEE調用setSbbContext()方法給SBB對象設置一個sbbContext對象,這是該SBB對象就能調用SLEE提供的方法了,並進入到了pooled 狀態。進入pooled狀態的SBB對象都一個自己的pool 空間,但他們沒有和任何的SBB實體相關聯,這時pool池中的所有SBB對象都一樣,SBB實體要想進入Ready狀態,需要給SBB對象分配一個SBB實體。
從pooled狀態到ready狀態有兩種實現方式:
第一種:調用SbbCreate()方法或者SbbPostCreat()方法。(SLEE需要創建一個新的SBB Entity時調用SbbPostCreat()方法,當SLEE需要為已經存在的SbbEntity分配一個SBB 對象時調用SbbCreate()方法)。
第二種:調用SbbActivity()方法。SLEE需要為已經存在的SbbEntity分配一個SBB 對象
回到pooled狀態
在Ready狀態下:SBB對象已經和SBB實體建立了關聯關係,SBB通過調用sbbLoad()方法和sbbStore()方法若干次,實現SBB對象的瞬時狀態與SBB實體的持久狀態的同步。這時SBB對象就能夠進行接收事件和進行事件的處理。當SBB對象處理完事件后還要回到pooled狀態,這一過程有三種可能的途徑來實現:
第一種:調用sbbPassivate()方法。回收分配給SBB Entity的Sbb對象。
第二種:調用sbbRemove()方法。移除SBB實體。
第三種:調用sbbCreate()方法或sbbPostCreate()方法成功,且沒有拋出異常,但是最終食物回滾了。
當SBB返回到pooled狀態后,SLEE可以通過調用unSetSbbContext()方法,使SBB對象成為垃圾而被回收。
SBB實體樹和SBB圖
SBB圖和SBB樹都是用來表現SBB間的關係圖,區別在於SBB圖用來表示SBB對象間的關係圖,在圖1中,節點表示SBB對象,邊表示SBB對象間的關係,邊上的數表示事件傳遞優先順序。SBB樹是一個定向不循環圖,用來表示SBB實體間的關係圖,在圖2中,節點表示SBB實體,邊表示SBB實體間的關係,邊上的數表示事件傳遞優先順序。一般來說事件傳遞的優先順序是由父級SBB來指定,在運行中,這種優先順序別可以改變。每個父SBB可以有多個子SBB,但一個子SBB只能有一個父SBB
下圖為一個SBB實體樹的實例圖:
SBB的優先順序
SBB的優先順序決定著同根子SBB實體接收事件的順序。
SBB事件發送的優先順序範圍是(-128~127),最低是-128,最高是127.
指定同一個父SBB實體的子SBB實體的事件發送優先順序有兩種方法:
1. 產生該子SBB實體時產生的默認事件優先順序。
2. 在運行的過程中,父SBB實體可以通過調用setSbbPriority()方法給該實體的子實體修改事件發送優先順序
事件發送的優先順序可分為五個等級:
第一等級:最高級(100~~127)
第二等級:次高級(31~~99)
第三等級:標準級(-30~~30)
第四等級:次低級(-99~~-31)
第五等級:最低級(-128~~-100)
同一個父SBB實體的同胞SBB實體接收事件的順序按照優先順序的從高到低的順序一次排列。
移除SBB實體樹
Attachment count ----與一個SBB實體相關聯的所有Activity Context的個數(包括該SBB實體的子SBB實體相關聯的Activity Context 的個數)。
Remove 一個SBB實體樹,就是通過將 Attachment count 的數量減到0 來實現的。
移除一個SBB實體樹,需以下三步:
第一步:結束Avtivity Object。
第二步:解除所有的SBB實體與所綁定的ActivityContext的綁定關係。解除的順序是先解除子SBB實體在解除根SBB實體。解除完全的標誌就是Attachment Count的數量減到0。
第三步:SLEE回收Activity Context ,並級聯移除各個根SBB實體。
舉例說明
【說明】以上圖中,橢圓表示實體,矩形表示Activity Context,橢圓和矩形之間的無向線段表示實體與Activity Context 之間有綁定關係,一對橢圓和矩形之間只有一條無向線段,箭頭表示的是一種Child Relation關係,箭頭所指的實體為子實體,背離箭頭的為父實體。圖中的橢圓里的數字就表示Attachments Count
【解釋1 】Attachments Count
X1的Attachment Count(6個)=與x1綁定的AC:AC1和AC2(2個)+與Y1綁定的AC的個數(0個)+ 與Z1綁定的AC:AC2和AC3(2個)+與Y2綁定的AC:AC3和AC1(2 個)
Y2的Attatchment Count (2 個)=與y2 綁定的AC;Ac1個AC3(2個)
【註:】Y2,沒有子SBB實體,所以他的Attchment就是它自己所綁定的Activity Context的個數。
【解釋2 】SLEE回收SBB實體樹的過程
首先,在Activity Object已經終止的前提下,將Y2 與AC1和AC3 斷開綁定,使y2的Attchmentcount減到0,再斷開Z1與AC2和AC3的綁定斷開,使Z1的Attchmentcount減到0,最後將X1與AC2和AC1的綁定斷開,使X1的Attchmentcount減到0,
然後,SLEE回收Activity Context,並刪除SBB實體。
SBB Local Interface 和sbb Local Object
每一個SBB都有一個SBB Local interface ,zhege SBB Local interface 有兩種可能:一種是一個特殊的interface ,這個特殊的interface 是由SBB開發商提供的,並繼承了SBBLocalObject interface。
第二種是 如果SBB開發商沒有提供特殊的Local Interface ,那麼它就是SbbLocalObject interface.,一個SBB對象通過SBB Local Object同步的調用,分配有SBB實體的SBB對象,這個Sbb Local Object是有由SLEE實現的一個對象,SBB Local Object實現了sbb Local interface 並描述了目標SBB實體,當SBB對象調用了SBB開發商在SBB Local object 定義的方法時,SBB抽象類中的相應的法會調用,調用這個相應方法的是描述這個SBB實體狀態的SBB對象,另一方面,sbb Local object是一個具有同步方法的客戶端對象。
理論上,一個SBB Local Object僅僅描述一個SBB實體,但是若干個SBB Local Object 也可能描述一個SBB實體。
一個SBB對象僅僅允許被一個SBB Local Object調用,這個SBB Local Object僅描述一個SBB實體樹中的實體,SBB Local Object描述不同的sbb 實體樹中的實體時,sbb對象調用sbb Local Object的行為並沒有定義。
SBB Local Interface
因為表現呼叫者的SBB對象和表現被呼叫者的SBB對象都必須被配置到同一個JVM中,所以這個介面被稱之為SBB Local Interface.在這個SBB Local Interface中生明了一些SBB對象的方法,這些SBB對象的方法可以被同步的調用。
獲得一個SBB Local Object 的方法:
一個SBB Local Object 是SLEE 的一個實現類,這個實現類實現類SBB Local Interface。一個SBB對象可以通過一下方法來獲得一個描述SBB實體的SBB Local object :
1. 調用childRelation 對象的creat()方法。
2. 調用sbbContext對象的getSbbLocalObject()方法。
3. 通過調用sbb Local Object 對象的一個方法來獲得一個Sbb Local Object ,被呼叫者可能通過它的一個輸入參數來獲得一個SBB Local Object ,呼叫者可能通過返回值來接收一個SBB Local object 。
4. 從 CMP field 中找回一個已存在的SBB Local object
5. 接收一個childRelation 對象,這個childRelation對象實現了java。Util。Collection介面,這個ChildRelation對象和它的iterator對象可以訪問sbb local object。
SBB Local object 具有一下功能:
1. 測試兩個SBB Local Object是否描述了同一個SBB實體
2. 移除SBB Local Object 描述的SBB實體及其他的SBB實體派生出來的SBB實體.
3. 設置和獲取 sbb Local Object 描述的SBB實體發出事件的優先順序.
4. 調用sbb 開發商定義的sbb Local Object 的方法.
5. 將sbb Local Object 存儲到CMP中.
SBB Local Object interface
這個介面是所有SBB Local interface的父介面,所有的SBB Local Interface 都繼承了這個sbbLocalObject介面,如果一個對象沒有定義一個特殊的sbb Local interface,那麼他的local Interface 就是SBBLocalObject
sbbContext object
SBB上下文對象是SLEE給SBB對象的一些數據,SLEE將SBB上下文對象傳遞給SBB對象后,SBB對象便由不存在狀態進入了緩衝池狀態,這樣SBB便可以訪問SLEE和SBB實體提供的一些數據信息。SBB上下文對象實現了SBB上下文介面,該介面里定義了一些得到業務信息,行為上下文,不可訪問事件,事務的方法。
SbbContext interface
SLEE為每一個SBB對象都提供了一個SbbContext對象,SLEE也維持SbbContext提供給sbb 對象訪問sbb 對象上下文的一個通道。也允許sbb對象調用SLEE提供的方法,並獲取分配給SBB
對象的SBB實體的信息,SBBContext對象實現類SBBContext介面,
CMP(Container Managed Persistence 持久性容器管理),SLEE中的CMP是以EJB的CMP為基礎定義的,但有其不同之處:
1。SLEE會自動創建和刪除SBB實體,而EJB則是通過程序代碼來執行。SBB實體並沒有一個外在的主鍵。
2。EJB中的CMP被用於把數據存入資料庫或者後台程序。SLEE的CMP用於識別哪些數據是應該被容器管理的,可以提供多種存取數據的方式。
3。EJB中有CMR(容器管理關係),SLEE中沒有。
SBB組件環境是一種機制,他有如下特徵:
1。訪問SLEE工具
2。使用SLEE的規範部署文件來部署個性化的SBB組件
SBB開發者的職責:
進入SBB組件環境,通過使用JNDI介面,創建一個InitialContext對象(不帶參數),然後用該對象調用lookup(java:comp/env)方法進入SBB組件環境。
業務部署者的職責:
確保SBB組件的外界入口都有效,可以對外界入口的值進行修改
8.sbb指令
sbb是帶借位減法指令,它利用了CF位上記錄的借位值。
指令格式:sbb 操作對象1,操作對象2
功能:操作對象1=操作對象1-操作對象2-CF
若AX=1020H,BX=1200H,CF=1,則SBB AX,BX的執行后AX的結果為:
1020-1200-1
=FE1F