CORBA通过使用事件服务实现异步调用。事件模型中事件提供者生成事件,事件使用者接收事件,事件提供者和事件使用者都连接在一个事件通道上。事件通道将事件从提供者传送到使用者,且不需要提供者事先了解使用者情况。
对象管理组事件服务提供两种事件发送模型:推模型(push model)和拉模型(pull model)。
(1).推模型:
事件提供者将事件推送给事件通道,事件通道将事件推送给事件使用者。
(2).拉模型:
事件使用者从事件通道拉回事件,而事件通道又从事件提供者拉回事件。
2.事件通道支持的事件发送模型:
(1).经典的推模型:
事件提供者将事件推向事件通道,事件通道又将这些事件再推向所有注册的事件使用者。事件提供者是事件主动发起者,而事件使用者只是被动的等待接收事件,事件通道扮演通报者角色。经典的推模型是最常用的事件发送模型。
(2).经典的拉模型:
事件使用者将事件从事件通道中拉出来,然后事件通道又将事件从事件提供者中拉出来。事件使用者是事件的主动发起者,事件提供者被动等待事件被拉走,事件通道起着中介作用。
(3).混合推/拉模型:
事件提供者将事件推向事件通道,事件使用者又把事件从事件通道中拉出来,在此模型中事件提供者和事件使用者都是主动方,事件通道起着队列的作用,事件通道只是将事件提供者推入的事件数据存储起来,直至事件使用者将事件数据从事件通道中拉走。
(4).混合拉/推模型:
事件通道将事件从事件提供者拉出,然后将事件推送给事件使用者,在此模型中事件提供者和事件使用者都是被动的,事件通道起着一个只能代理的作用。
3.事件通道:
事件通道既是事件提供者,又是事件使用者。事件通道通过代理接口代表实际的事件提供者和事件使用者。
4.CORBA对象状态和伺服程序声明周期:
5.对象适配器POA:
POA:Portable Object Adapter,可移植对象适配器。在CORBA中,对象适配器作为伺服程序和对象请求代理(ORB)之间的纽带,适配器将一个对象接口配置给调用程序所需要的不同接口,即一个对象适配器是一个插入式对象,它用来作为代理,允许调用程序在不知道对象实际接口情况下调用一个对象的请求。
POA是一个对象管理器,类似于java中的EJB容器,或者Spring的IoC容器,主要用于负责创建、激活、定位以及回收对象等操作。
POA主要作用为:
(1).创建对象引用。
(2).创建对象标识符。
(3).创建并注册伺服程序,并伺服程序通过POA来实例化CORBA对象。
6.CORBA通过POA请求调用流程:
7.POA策略:
POA规范的关键特性是一个应用程序可以包含多个POA实例,每一个POA实例代表具有相似性能的一组对象。这些性能通过POA创建时所指定的POA策略来控制。所有的服务器应用程序至少有一个POA,也就是Root POA,它具有标准的策略集。
(1).生存期范围策略:
a.TRANSIENT:暂态策略, 默认标准的生存期策略。
b.PERSISTENT:持久态策略。
(2).对象标识符策略:
a.SYSTEM_ID:POA在创建对象标识符时,自动产生唯一的ID,POA默认策略。
b.USER_ID:POA在创建对象标识符时,通过产生异常来防止两个相同的ID。
(3).对象与伺服程序之间映射策略:
a.UNIQUE_ID:POA对每个对象标识符必须映射到一个不同的伺服程序,POA默认策略。
b.MULTIPLE_ID:POA对多个对象标识符可以映射到同一个伺服程序。
(4).隐式激活策略:
a.IMPLICIT_ACTIVATION:允许POA隐式创建和激活CORBA对象。
b.NO_IMPLICIT_ACTIVATION:只允许POA显示创建和激活CORBA对象,POA默认策略。
(5).请求与伺服程序之间匹配策略:
a.USE_ACTIVE_OBJECT_MAP_ONLY:POA为请求使用已有的伺服程序,POA默认策略。
b.USE_DEFAULT_SERVANT:POA为请求使用默认的伺服程序。
c.USE_SERVANT_MANAGER:POA通过调用伺服程序管理器确定创建一个新的伺服程序或复用一个已存在的伺服程序。
(6).对象标识符到伺服程序关联策略:
a.RETAIN:每次接到一个请求时,POA期望应用程序提供目标对象标识符作为查找伺服程序的索引,POA默认策略。
b.NON_RETAIN:POA不需要应用提供目标对象标识符,而是通过调用应用程序提供的伺服程序管理器或应用程序提供的默认伺服程序管理器处理请求。
(7).请求线程策略:
a.ORB_CTRL_MODEL:ORB受控模型,允许多个并且的请求由多线程来处理,POA默认策略。
b.SINGLE THREAD_MODEL:单线程模型,POA使用单线程顺序处理请求。
CORBA:CORBA是Common Object Request Broker Architecture的缩写,它是分布计算机技术的发展结果,CORBA技术的成功在于,它除了能够解决由于多个系统层次上的异构带来的“孤岛”问题,还在理论和技术上扩展了客户/服务器的模式,使系统具有良好的可伸缩性,便于系统的开发与升级,保护已有投资。CORBA体系的主要内容包括以下几部分,(1) 对象请求代理ORB(Object Request Broker):负责对象在分布环境中透明地收发请求和响应,它是构建分布对象应用、在异构或同构环境下实现应用间互操作的基础。(2) 对象服务(Object Services):为使用和实现对象而提供的基本对象集合,这些服务应独立于应用领域。主要的CORBA服务有:名录服务(Naming Service)、事件服务(Event Service)、生命周期服务(Life Cycle Service)、关系服务(Relationship Service)、事务服务(Transaction Service)等。这些服务几乎包括分布系统和面向对象系统的各个方面,每个组成部分都非常复杂。 (3) 公共设施(Common Facilitites):向终端用户提供一组共享服务接口,例如系统管理、组合文档和电子邮件等。 (4) 应用接口(Application Interfaces):由销售商提供的可控制其接口的产品,相应于传统的应用层表示,处于参考模型的最高层。 (5) 领域接口(Domain Interfaces):为应用领域服务而提供的接口。如OMG组织为PDM系统制定的规范。
DCOM:Microsoft的分布式COM(DCOM)扩展了组件对象模型技术(COM),使其能够支持在局域网、广域网甚至Internet上不同计算机的对象之间的通讯。使用DCOM,应用程序可以在位置上达到分布性,从而满足客户和应用的需求。
DCOM是组件对象模型(COM)的进一步扩展。COM定义了组件和它们的客户之间互相作用的方式。它使得组件和客户端无需任何中介组件就能相互联系。
EJB:它是Java服务器端服务框架的规范,软件厂商根据它来实现EJB服务器。应用程序开发者可以专注于支持应用所需的商业逻辑,而不用担心周围框架的实现问题。
EJB规范详细地解释了一些最小但是必须的服务,如事务,安全和名字等。软件厂商根据这些规范要求以保证一个enterprise bean能使用某个必需的服务。规范并没有说明厂商如何实现这些服务。这使得通过阅读规范来学习EJB更加困难,因为它允许厂商在不牺牲核心服务的可移植性的前提下来提供一些增强功能。
Enterprise JavaBeans体系结构
EJB服务器是管理EJB容器的高端进程或应用程序,并提供对系统服务的访问。EJB服务器也可以提供厂商自己的特性,如优化的数据库访问接口,对其他服务(如CORBA服务)的访问,对SSL 3.0的支持等。一个EJB服务器必须提供对可访问JNDI的名字服务和事务服务支持。一些可能的EJB服务器的例子如:
数据库服务
应用服务器
中间件服务器
EJB容器是一个管理一个或多个EJB类/实例的抽象。它通过规范中定义的接口使EJB类访问所需的服务。容器厂商也可以在容器或服务器中提供额外服务的接口。 现在没有EJB服务器和EJB容器间接口的规范。因为目前容器通常由EJB服务器来提供,所以一旦接口标准化了,厂商就可能提供可以在任何兼容的EJB服务器上运行的容器。
Home接口列出了所有定位、创建、删除EJB 类实例的方法。Home对象是home接口的实现。EJB类开发者必须定义home接口。容器厂商应该提供从home接口中产生home对象实现的方法。
远程接口(remote interface)列出了EJB类中的商业方法。EJBObject实现远程接口,并且客户端通过它访问EJB实例的商业方法。EJB类开发者定义远程接口,容器开发商提供产生相应的EJBObject的方法。客户端不能得到EJB实例的引用,只能得到它的EJBObject实例的引用。当客户端调用一个方法,EJBObject接受请求并把它传给EJB实例,同时提供进程中必要的包装功能。客户端应用程序通过home对象来定位、创建、删除EJB类的实例,通过EJBObject来调用实例中的商业方法。客户端可以用Java来编程,通过Java RMI来访问访问home对象和EJBObject,或用其他语言编程并通过CORBA/IIOP访问,使得部署的服务器端组件可以通过CORBA接口来访问。
CORBA是一种远程分布式方法调用,是服务器端和客户端传输数据的方式。不知道你了解RMI吗?它和CORBA差不多也是另外一种传输方式。CORBA的好处在于IDL接口规范,于是这种传输方式可以跨平台、跨语言(如Java、C++、smalltalk都只需要IDL定义好了就可以生成接口),我最近也在看这个,写了一些实例的代码。不知道你的英文怎么样,给你看一篇我觉得比较好的文章,来自sun官方网站:我是一名大四学生,希望能一起探讨。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)