争怎路由网:是一个主要分享无线路由器安装设置经验的网站,汇总WiFi常见问题的解决方法。

CORBA技术及在Delphi中的完成

时间:2024/7/11作者:未知来源:争怎路由网人气:

秦志强

  一、 引言

  进入90年代以来,分布式组件对象标准极大地推动了以异构环境下协同工作为目标的虚拟环境研究。当今国际上已有三大分布式组件对象标准:一个是OMG组织推出的CORBA,即公共对象请求代理结构;一个是微软公司推出的DCOM,即分布式组件对象模型;还有一个是SUN公司推出的用JAVA语言开发开发的分布对象模型RMI,即远程方法激活。在三种分布式组件标准中,CORBA标准在结构标准实现的灵活性、跨语言能力、跨平台实现及安全性等方面的综合对比中优于DCOM和RMI,所以它往往成为真正的开放式结构应用程序的首选标准。本文主要讨论CORBA技术,并探讨了在Delphi中的实现方法。

  二、 CORBA及相关技术

  1、 CORBA的概念和用途

  CORBA是OMG(Object Management Group)提出的一个分布式对象技术的规范,它是针对多种对象系统在分布式计算环境中如何以对象方式集成而提出的,它为对象管理定义了一个对象模型-OMG参考模型(OMG reference model)及其框架结构。该模型由ORG、对象服务、公共设施、领域接口及应用对象等5个主要部分组成。该模型及其框架结构将面向对象技术与客户/服务器计算模式结合起来,有效地解决了对象封装和分布式计算环境中资源共享、代码可重用、可移植及应用间地互操作性等问题。

  2、 Com与Corba的比较

  COM和CORBA都提供了一种创建分布式、面向对象的结构体系的方法,即它们都提供了从另一台机器中调用一个存在于二进制可执行文件中的对象方法。COM和CORBA都有许多用于支持它们的实用程序,例如MTS、ITS、调度程序、注册表。然而,每个结构体系都有各自独特的优点。

  COM作为一项以Microsoft和Windows为基础的技术,具有归并到全世界90%的台式计算机的优势,它不受约束并且拥有广泛的厂家支持。

  CORBA可能是目前可真正提供全方位支持的较好系统。如,它在处理故障及加载分布方面比COM有更好的支持。当然,CORBA还是比COM更好地支持广泛的操作系统。

  3、 Org

  ORG(Object Request Broker)常被称作一组服务的类名称,这组服务用于连接客户和服务器,并在客户和服务器之间来回传递方法调用和信息。

  因为ORG是在DLL里实现的,所以,它们驻留在服务器和客户实现的处理中,它们必须安装在所有使用CORBA的客户及服务器上。

  4、 Smart Agent?

  Smart Agent是一项用来帮助客户自动对一个服务器进行定位的目录服务。其宗旨在于帮助客户机连接到服务器上,并执行其他一些类似负载均衡和重启崩溃对象这样的重要任务。即:Smart Agent具有目录服务,它能查出对象的位置,并把客户程序接到这些对象上。

  5、 代理、存根和框架

  在一个分布式的应用程序里,客户不能直接与服务器通信,同样一个服务器也不直接与客户交流。函数的调用及其参数都必须通过网络从一个应用程序中调度到另一个应用程序里。为了使该体系工作,客户和服务器两边都要建立一个代理。客户这边的代理称为存根(Stub),而服务器的代理则叫框架(Skeleton)。

  存根实现方法如下:

  function TcorbaTestObjectStub.GetName:WideString;

  var

  OutBuf:ImarshalOutBuffer;

  InBuf:ImarshalInBuffer;

  Begin

  Fstub.createRequest('GetName',True,OutBuf);

  Fstub.Invoke(OutBuf,InBuf);

  Result:=UnmarshalWideText(InBuf);

  End;

  其中,Fstub数据成员来自于CorbaObj单元,在CorbaObj单元里它被声明为Istub类型。Fstub.createRequest方法用一个ImarshalOutBuffer类型的变量与想调用的函数的名字进行连接,这个变量可通过Internet传输。当该包建好后,就可以调用Invoke将信息传递到服务器并从同一个服务器中得到反馈信息。ImarshalInBuffer类型的InBuf变量包含了该反馈信息,可以调用UnmershalWideText。

  框架的目的在于接收由存根对Invoke的调用而传来的消息。当它收到消息后,就调用真正的GetName方法,接着把结果包装起来迅速传给客户,实现方法如下:

  Procedure

  TcorbaTestSkeleton.GetName(constInBuf:ImarshalInBuffer;Cookie:Pointer);

  Var

  OutBuf: ImarshalOutBuffer;

  Retval: WideString;

  Begin

  Retval:=Fintf.GetName;

  Fskeleton.GetReplyBuffer(Cookie,OutBuf);

  OutBuf.PutWideText(PwideChar(Pointer(Retval)));

  End;

  该程序分两步:

  第一步:是从由Delphi自动设置的内部Fintf变量调用Get Name。Fintf仅仅是一个指向对象真实接口的指针。因为现在正处于服务器本身当中,因此,这是指向你所创建的实际对象的真实指针。

  第二步:是将函数结果包装起并把它送回客户端,你将通过调用GetReplyBuffer和PutWideText完成该步骤。

  6、 接口定义语言

  接口定义语言(IDL)用于定义对象的接口,一个对象的接口指定该对象所支持的类型和操作,因而唯一定义了可用于该对象的请求形式。所有接口均隐式从CORBA模块中定义的Object接口中导出。

  接口定义语言(IDL)的重要特征是其语言无关性,这使得对象可用不同的程序设计语言构造,且依然可相互通信,CORBA规范通过精确定义基本数据类型的长度,保证了在异构硬件平台上的互操作性。

  三、 Delphi4中CORBA客户和服务器对象分布式工作机理

  Delphi4工具支持CORBA标准,并为开发分布式应用程序提供了优良的环境。

  图中客户和服务器两边都有一个代理。在Delphi4中,真实的存根与框架由Delphi4在创建CORBA对象时自动生成,并存放于CORBA对象_TLB.pas命名的文件中。存根与框架这对代理使客户感觉到好象真的与服务器直接通信,而它们的具体实现存在于服务器中。在Delphi4中ORB就是一组动态连接库,它们提供了网络传输层以下的通信机制。图中的OsAgent不是CORBA标准中的一部分,它的宗旨在于帮助客户机连接到服务器上去,并执行其它一些类似于负载均衡和重启崩溃等重要任务。当客户程序启动时,它使用ORB与OsAgent进行通信,使客户机自动连接到服务器上去,换句话说,OsAgent有目录服务功能,它能够自动找出对象的位置。应该指出的是,在实现分布式应用程度过程中,客户、服务器双方必须都安装有OsAgent程序,同时必须在通信之前启动了OsAgent服务。

  四、 Delphi中两个重要的CORBA存储库

  1、 Interface Reposity

  Interface Reposity是一个用来存储有关对象的具体内容的地方。该资源库有三种用途:

  1)、它为用户提供了一个场所,用户可以通过它来查看有关对象的详细信息。

  2)、它提供了允许CORBA对方法调用进行类型检查的机制。

  3)、它允许在运行期间对一个对象进行动态调用。

  2、 Implementation Reposity

  Implementation Reposity用来存储有关服务器的信息,这样服务器才能自动被Smart Agent启动,尤其是Implementation Reposity含有有关服务器的名字及用来找到它的可执行程序的路径信息。

  当一项叫做OAD(即Object Activation Daemon)的CORBA服务器需要启动一个服务器时,OAD可以通过查看Implementation Reposity,并执行其中的文件来给服务器定位。换句话说,Implementation Reposity中存储着服务器的路径、可执行文件名及其他一些相关的信息,如果该服务器并未运行但却已在Implementation Reposity中注册过了,那么Smart Agent可以请求OAD来启动它。

  五、 在Delphi中使用CORBA

  为在Delphi中使用Corba技术,首先要创建服务器和客户,然后在此基础上创建各类实用程序。服务器和客户程序创建如下:

  1、 服务器的创建

  创建CORBA服务器所需的步骤如下:

  1)、创建一个标准的应用程序并保存到自己的目录中。在该目录下建立两个附加子目录,一个叫Client,另一个叫Server。

  2)、选择New

关键词:CORBA技术及在Delphi中的完成




Copyright © 2012-2018 争怎路由网(http://www.zhengzen.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版