分享
 
 
 

OMG CORBA构件技术体系(3)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

OMG CORBA构件技术体系(4)

作者: 贾育

email: jia_yu@263.net

[版权所有 任何形式的拷贝和引用必须得到作者的许可]

(3)CCM服务

CCM应用服务器为构件提供下列服务:

§ 事务服务(Transaction Services)

§ 安全性服务(Security Services)

§ 名字服务(Naming Service)

§ 持久性服务(Persistence)

§ 资源管理(Resource Management)

(3.1)事务服务

CCM支持两种事务管理:容器管理和人工自管理。容器管理事务仅需申明构件部署描述文件,完全由容器完成,使用方便;人工自管理事务使用容器的UserTransaction接口或直接调用事务服务,需要编程实现。

容器管理事务可以改变构件和操作级的事务策略进行微调,策略与Enterprise JavaBean 规格说明类似的方法定义,下表是CORBA策略属性及其作用:

属性

说明

Not Supported

调用程序调用一个方法时,调用程序的事务被挂起,方法调用后恢复。

Required

构件需要当前事务才能执行。如果调用程序提供了事务环境,被调构件在调用程序的事务环境中; 如果调用程序不在事务环境里,容器在事务开始执行时启动一个新的事务,在操作完成时提交事务。

Supports

如果调用程序提供一个事务环境,被调构件成为调用程序事务环境的一个组成部分;如果调用程序不在事务环境里,操作在如何事务范围之外执行。

RequiresNew

构件需要自己的事务才能执行。如果调用程序提供事务环境,调用程序的事务将被挂起,并且为方法的执行创建一个新的事务。如果调用程序没有提供事务环境,容器为方法的执行创建一个新的事务。

Mandatory

构件的方法调用之前,调用程序必须在事务环境中。被调构件成为调用程序事务环境的一个组成部分。如果调用程序没有提供事务环境,容器发出一个TRANSACTION_REQUIRED CORBA异常信息。

Never

如果调用程序提供一个事务环境,容器发出一个INVALID _TRANS ACTION CORBA异常信息;如果调用程序没有提供一个事务环境,容器将不启动新的事务。

(3.2)安全性服务

安全性策略等同地实施到各类构件。容器的安全策略依赖于CORA的安全性,从配置描述中获取策略说明,为调用操作检查活动证书。安全性策略一直保持有效性,直到调用了含不同策略的其他构件。

存取许可在构件相关的部署描述中定义。许可的粒度必须和部署所装的CORBA安全机制保持一致,因为它会用作在操作调用时的检查。存取许可可以在任何构件端口中定义,当然也包括构件本原接口。

(3.3)事件服务

CCM构件使用一个简单的CORBA通知服务的子集发送和接受事件。该子集可以通过下列属性来描述:

§ 对构件的实现者和构件客户,事件表示成值类型(valuetypes);

§ 事件数据结构映射到结构化事件体的any,呈现给CORBA通知,或从其中接收;

§ 结构化事件的固定部分发送时容器添加到事件数据结构中,接收时从事件数据结构中移去;

§ 事件具有事务性和安全性,与构件事件接口相关的安全性策略在部署描述中定义;

§ 通道管理用容器实现,而不是构件;

§ 过滤器由容器管理和设定而不是构件;

因为事件事件既可能是客户发送和接收,也可能是构件的实现者,所以发送和接收事件的操作是由构件IDL规格说明生成。容器把这些操作映射到CORBA通知服务上。

(3.4)命名服务

使用查找器方法的客户定位和执行CCM构件的一个操作,可以查找CORBA名字服务或交易服务(如果在网络环境下);另一个办法是使用本原的find_by_primary_key方法定位实体构件;显然如果使用工厂方法,什么也找不到。

(3.5)持久性服务

CCM支持CORBA的持久性状态服务(Persistent State Service,PSS),PSS操作模式有容器管理持久性和人工自管理持久性之分。使用容器管理持久性时,程序员必须用OMG PSDL(持久性定义语言,是OMG IDL的一个子集)定义构件的状态,在激活/休眠周期里保存和恢复对象状态的过程对程序员来说是完全透明的。使用人工自管理持久性时,程序员必须在构件被容器调用的休眠之前亲自保存构件状态,在方法执行之前从休眠中亲自恢复状态。

(3.6)管理服务器端的资源

从体系结构的角度来看,典型的CCM应用包括一组构件工厂,在运行时按照请求创建构件实例,例如电子商务应用可能包括消费者构件、购货车构件和支付构件。数据库里的每一个消费者都有对应的消费者构件实例,购货车实例是在每次消费者购买商品时(一个特定的时间段)创建,支付构件实例是在消费者按下“付款”按钮的一瞬间。

CORBA实例构件和过程构件是永久性构件,它们的生命期延展到多重调用,因为在客户端没有构件激活和休眠的API,所有客户应该可以在任何时候调用构件实例操作(甚至服务器崩溃时,也可以提交调用请求。),因此每次构件实例的创建和销毁对客户端是可见的,而构件实例的激活和休眠只能服务器可见。

所以,对于数据库中成千上万的消费者不能悠久驻留内存,CCM管理这些实例,调用请求到达时激活,任务完成时休眠,但是对客户端,消费者构件一直在运行。这样优化了运行时的资源,增强了大型应用软件系统(例如各种规模电子商务系统)负载处理能力,可见CCM构件的市场潜力。

除了“每次调用时激活”方式外,CCM还有其他四种资源分配方式。

(4)CCM构件类型

CCM把构件分为四类:

§ 服务构件(Service Components)

§ 会话构件(Session Components)

§ 过程构件(Process Components)

§ 实体构件(Entity Components)

其中,服务构件和会话构件带有暂时性构件参考,也即如果服务器进程终止和服务器重启动时,参考将失效,服务构件和会话构件仅用在短暂的、自包含的操作或函数。与之相反,过程和实体构件只在客户发删除命令且安全策略允许的情况下,构件参考才可能失效,否则即使服务器重新启动,构件参考也能存取。因此过程构件和实体构件适合长效记录和功能,例如消费者档案和银行帐户。

服务构件的生命期最短,一次调用即结束,适用于自包含的功能,例如为购货车中的商品付款的完整过程:从订单上清点货物项目,在消费者的信用卡上记帐,为运输部门编制运单。由于服务构件占有的资源最少,效率最高,因此在基于构件服务器上,最大可能地使用服务构件。另外进程构件和实体构件中的“一次性”功能也应该加载成服务构件。

会话构件可以被多次调用,但是非持续地存储在服务器中:服务器停机后再启动,构件就不复存在了。会话构件仅仅用在一些暂时性功能中。

过程构件定义一个开始和结束的过程,例如申请银行帐户。过程期间构件永久可靠,即使服务器停机再启动,过程仍然通过调用继续下去,在过程结束时销毁构件实例和释放资源。

实体构件是真正的永久性构件,例如消费者信息、帐户信息等等都要定义成实体构件。典型地实体构件存储在数据库中,通过后端的CORBA持久性状态服务和数据库联络,前端是构件接口为应用通过服务。每个实体构件带有一个关键字,作为构件检索的依据。

CCM服务器的资源分配基于构件的类别。上述类别由上到下健壮性越强,资源占有越多。在应用设计阶段就要考虑合理的分割构件,在不损失可靠性的条件下尽可能使用靠前的构件类型,增强服务器的负载能力。

创建CCM构件

为了在CCM中定义构件,构件的开发者需要定义如下几个方面:

§ 构件接口

§ 主接口的端口

§ 构件实现

§ 配置文件

§ 部署描述

(1)构件接口

构件接口用OMG IDL和CIDL(Component Implementation Definition Language,构件实现定义语言)编写,把功能呈现给客户端的调用程序。接口是客户端和构件之间的语法契约,是功能的列表,而不描述功能的实现方法。CCM编译器从构件的接口申明生成构件的骨架。

(2)主接口的端口

主接口呈现出构件的生命周期方法。CCM自动生成创建和移去服务器构件的方法,由于缺省的构建程序(constructor)是自动创建的,所以只需要添加你专需的构件,构件的本原将会记录你的扩展。

工厂(factory)和搜索器方法:使用服务构件和会话构件时,客户端将使用工厂方法记录创建新实例的档案,工厂将构件的实例参考返回到客户端。使用参考是一次性使用服务构件的有效手段,也是多次重复调用会话构件的主要手段,虽然工厂方法也是创建工厂构件和实体构件的方法,但是对于已经存在的实体构件类型,需要在客户端通过搜索器方法,使用CCM在构件本原里定义的find_by_primary_key操作定位构件。过程构件需要客户端保存参考以被后用,可以存储在客户端的cookie里,或在命名和交易服务中(Naming or Trader service)。

(3)构件实现

CCM实现类必须实现:

§ 远程接口说明的所有方法;

§ 主接口中定义的操作(除缺省的构建程序constructor和销毁程序destructor);

§ CCM规格说明中定义的回调方法,CCM容器通过调用这些方法管理企业构件,和它们交互作用。

(4)部署描述(descriptor)

每个CCN需要一个部署描述文件。CIDL编译器会自动生成一个文件提纲,但是需要你填写其中的细节。部署描述使用XML,大多数是由工具生成的。描述文件里陈述了构件所需的容器类型,以及事务性、安全性、线程和其他容器提供服务的策略。

(5)特性文件(Property File)

特性文件描述构件和本原的属性设置,属性是构件和本原的安装信息。CCM规格说明描述了特性文件的格式和使用方法,集合体里的特性设置在安装时可能被覆盖。

(6)集合体描述

集成体是构件的应用中构件的部分组合,而非完整的应用。如果想要把CCM构件的集成体作为产品销售,必须建立一个集合体描述文件。

(7)错误处理

构件与应用在错误处理上方法不尽相同,首先要意识到任何错误如果在构件里得不到妥善处理,则将影响调用该方法的客户端,因此客户端接受到的信息应该是明白无误的,又由于客户端并不知道构件的逻辑运行过程,显示错误信息必须反映失败的事务环境,由客户端处理和解释。下面是CCM的主要错误处理技术:

内部错误处理;在CCM中处理错误和在应用中一样。一种方法意外地产生错误,如果得不到错误程序处理,将带来调用应用的崩溃。因此需要截获错误,评估错误的严重程度,采取修正动作;结果不外乎两个:要么改正了错误,从失败处恢复继续运行,要么把相关的异常信息返回给调用客户。

把错误返给客户;要把错误返给用户,必须首先在构件的IDL中定义异常,或者该异常是CORBA的标准异常。客户在接收CORBA异常的调用之处,用try/catch循环包裹(wrap)调用,才有处理异常的机会。CCM给客户的错误信息应该是客户端程序员容易理解的,并且有能力处理,它们绝大部分是错误的、不一致的、超范围的参数值,或者是错误的操作序列。

用错误处理程序提交错误;需要编写一个错误处理软件来解决“未知”错误,尽可能多地给客户提供错误信息,一个普通的“unexpected error”信息于事无补,至少有失败的方法名称和传递的参数。

处理其他构件的错误;如果构件调用了第三方CCM构件,应该处理下一级构件产生的全部已知和未知错误,因为你的构件客户并不知道所用构件与别的构件的依赖关系,要么在文挡里写清楚,要么自己处理问题。

(8)线程

EJB体系结构承担管理并发的任务,不要自己管理线程和线程同步,否则会干扰EJB服务器的线程管理,并且EJB服务器自由地使用多重JVM,你的线程管理也不会正确的工作。

CCM开发和部署中的角色

CCM规格说明定义了应用系统开发和部署过程中的各类角色:

§ 构件开发者(Component Developers)

§ 应用集成人员( Application Assemblers)

§ 应用部署人员(Application Deployers)

§ 服务器提供者(Server Providers)

§ 容器提供者(Container Providers)

§ 管理员(Administrators)

(1)构件开发者(Component Developers Application Assemblers)

构件开发者的任务是定义远程接口、主接口、构件实现类和部署描述,他们使用的编写工具是OMG IDL, OMG PSDL(Persistent State Definition Language,持久性状态定义语言),和OMG CIDL (Component Implementation Definition Language,构件实现定义语言),前面两种语言的编译器由构件运营商提供,后者的有持久性状态服务(Persistent State Service)运营商提供,编译产生的是Java或C++代码,包括根、骨架、生成的实现代码、资源触发(triggers resource)代码以及持久性管理,代码的执行业务规则插入在这些文件之中(编译成为代码),在构件容器运营商的工具的支持下,开发者把这些实现代码和配置文件、特性文件封装成为软件包。

(2)应用集成人员

有两个地方需要集成人员:首先需要将多个构件的集合商业化,构件集成体作为销售的单位。其次用户购买独立的构件,但需要与第三方构件、用户自己的构件集成在一起部署。

(3)应用部署人员

应用部署人员在完成对部署描述文件的修改之后,把应用部署到CCM-认同的应用服务器上。部署设置有些在运行时会被覆盖,有些只能在运行时配置。

(4)服务器提供者

按照CCM规格说明提供应用服务器的实现。

(5)容器提供者

容器提供者的任务是编写容纳CCM构件的容器,一般是服务器提供者的职责。

(6)管理员(Administrators)

管理员的任务是管理数据库的理解、名字服务与交易服务和性能监控。

IDLScript

IDLScript 是CORBA 3.0规格说明的一个组成部分,充分利用了动态机制,它的特点是简单易学,CorbaScript是IDLScript的第一个实现,用作实现和操作CORBA对象。

商业EJB构件的文挡编写

商业构件是不带源代码的“黑盒”,文挡给出详细的产品信息作为客户评价的依据。典型的文挡包括:

(1)技术文挡

在线文挡;常见格式是HTML,HELP文件和PDF文件。

演示软件;演示软件可以证明构件的价值,有利于理解基于构件的产品的功能和性能,还可以借此培训用户,测试构件的运行环境。

评估试用;用户对非自己开发的构件常常持怀疑态度,构件的评估十分必要,给一段试用期是一种很好的评估方法。

代码样例;代码样例对用户建立原型和评价构件功能十分有用,可以让用户了解如何构件的操作方法。

Readme文件;包括构件发行的最后更改、勘误表、系统环境要求、构件文件的定义、安装注意事项、项目样例的注意事项和分发信息等。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有