SBB

SBB

带借位减法
SBB:带借位减法,格式:SBB DST,SRC,执行的操作:(DST)←(DST)-(SRC)-CF,其中CF为进位的值。SBB Compents:他们组成了Application他们以何种方式组合是由SLEE来确定的。SBB对象的生命周期开始于SLEE用newInstance()方法创建一个SBB对象,然后SLEE调用setSbbContext()方法给SBB对象设置一个sbbContext对象,这是该SBB对象就能调用SLEE提供的方法了,并进入到了pooled状态。SBB树是一个定向不循环图,用来表示SBB实体间的关系图,在图2中,节点表示SBB实体,边表示SBB实体间的关系,边上的数表示事件传递优先级。
  • 中文名:SBB
  • 外文名:
  • 别名:
  • 表达式:
  • 提出者:
  • 适用领域:
  • 组合部分:七大部分
  • 含义:带借位减法
  • 格式:SBB DST,SRC

整个生命周期的过程

从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需要创建一个新的SBBEntity时调用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实体树

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实体树中的实体,SBBLocal 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接口,

SLEECMP和EJBCMP

CMP(Container Managed Persistence持久性容器管理),SLEE中的CMP是以EJB的CMP为基础定义的,但有其不同之处:

1。SLEE会自动创建和删除SBB实体,而EJB则是通过程序代码来执行。SBB实体并没有一个外在的主键。

2。EJB中的CMP被用于把数据存入数据库或者后台程序。SLEE的CMP用于识别哪些数据是应该被容器管理的,可以提供多种存取数据的方式。

3。EJB中有CMR(容器管理关系),SLEE中没有。

SBB组件环境

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

相关词条

相关搜索

其它词条