SBB

  SBB中的几个概念:
  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状态
  【 整个生命周期的过程 】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 对象
  在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接口,
  SLEE CMP和EJB CMP:
  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组件的外界入口都有效,可以对外界入口的值进行修改

自定义分类:
汉字语言官职文字历史
 
参考资料:
1.政卢 开源的JAIN-SLEE SIP 软交换 -- Mobicents
2.JAIN SIP Tutorial
3.Eclipslee Tutorial
 
贡献者:
无限路由
Copyright © 1999-2024 C114 All Rights Reserved | 联系我们 | 沪ICP备12002291号-4