CORBA服务
(本文转载自软件工程专家网www.21cmm.com)
苏洋
CORBA服务的基本内容
在CORBA体系规范中定义了多种类型的服务(Service),如命名(Naming)、生存期(LifeCycle)、事件(Event)、事务(Transaction)、对象持久化(Persistent Objects)、查询(Query)、特征(Property)、时间(Time)等服务功能。CORBA服务与对象请求代理之间的关系如下图所示。
在CORBA规范中,没有明确说明不同厂商的中间件产品要实现所有的服务功能,并且允许厂商开发自己的服务类型。因此, 不同厂商的ORB产品对CORBA服务的支持能力不同,使我们在针对待开发系统的功能进行中间件产品选择时,有更多的选择余地。
下面介绍与分布式应用程序设计和开发关系密切的CORBA服务内容:
1. 对象命名服务(Naming Service)
在命名服务中,通过将服务对象赋予一个在当前网络空间中的惟一标识来确定服务对象的实现。在客户端,通过指定服务对象的名字,利用绑定(Bind)方式,实现对服务对象实现的查找和定位,进而可以调用服务对象实现中的方法。
2. 对象安全性(Security)服务
在分布式系统中,服务对象的安全性和客户端应用的安全性一直是一个比较敏感的问题,安全性要求影响着分布式应用计算的每个方面。对于分布在互联网中的分布式应用来讲,为了防止恶意用户或未经授权的方法调用对象的服务功能,CORBA提供了严格的安全策略,并制定了相应的对象安全服务。安全服务可以实现如下功能:
● 服务请求对象的识别与认证;
● 授权和访问控制;
● 安全监听;
● 通信安全的保证;
● 安全信息的管理;
● 行为确认。
CORBA系统将对象请求的安全性管理的功能交由ORB负责,系统组件只需负责系统本身的安全管理,使得基于分布式应用在安全性控制方面的责任十分明确。
3. 并发控制(Cocurrency Control)服务
CORBA规范中定义并发控制服务的目的在于实现多客户访问情况下的并发性控制和对共享资源的管理。
并发控制服务由多个接口构成,能够支持访问方法的事务模型和非事务模型。由于两种模型的引入,使得非事务型客户在访问共享资源时,如果该资源被拥有事务模型的方法锁定(Lock),则该客户转入阻塞状态,直到事务型方法执行结束,将共享资源锁打开,非事务模型的客户才能够访问该共享资源。
并发控制服务使多个对象能够利用资源锁定(Lock)的方式来对共享资源进行访问。在访问共享资源之前,客户对象必须从并发控制服务中获得锁定。在确认资源目前正在空闲时,获得资源的使用权。每个锁定是一个资源-客户对,说明哪个客户正在访问何种类型的资源。
4. 对象生命期服务(LifeCycle)
CORBA中的生命期服务定义和描述了创建、删除、拷贝和移动对象的方法。通过生命期服务,客户端应用可以实现对远程对象的控制。
利用命名(Naming)服务
实现分布式应用
在上篇文章中介绍的利用JavaIDL开发分布式应用时曾采用命名服务的方式。对象命名服务是ORB查找服务对象实现的一种简单的方式。
1. 功能需求分析和定义接口文件
本例的主要功能是模拟电话用户注册及电话号码查询业务,开发基于命名服务的分布式应用程序,中间件产品采用VisiBroker 4.5.1 for Java。
根据系统功能的定义,两种业务均属于电信业务的经营范围,因此定义模块名TeleCom。电话号码注册为电信业务管理功能范围,需定义该功能接口Registry,该接口内包含用户注册方法register();电话号码查询为用户服务功能范围,需定义接口User,该接口内包含查询个人电话号码方法getNumber()。经过上述分析后编写的IDL接口定义文件TeleCom.idl如下:
module TeleCom
{ interface User //接口User声明
{ //接口中getNumber方法的定义
int getNumber();
};
interface Registry //接口Registry声明
{ //接口中register方法定义,其中以string类型变量作为输入参数 ’方法返回User对象
User register(in string name);
};
};
上述接口定义文件经idl2java编译后,在当前接口文件目录中生成TeleCom子目录,该目录中包括UserPOA.java、RegistryPOA.java等文件。这些文件是客户端和服务对象实现功能的框架以及相关的支持文件。有兴趣的读者可以实际创建IDL文件,经IDL到Java语言的映射后,分析生成文件的格式。
2. 实现服务功能
(1)实现User接口的类UserImpl
根据系统分析确定的功能,定义接口User对应的实现类UserImpl的代码如下:
// UserImpl类继承定义在UserPOA.java中的UserPOA类
public class UserImpl extends TeleCom
.UserPOA
{ private int aNumber;
//构造方法
public UserImpl( int number )
{ aNumber = number;
}
//接口中定义的方法,用于返回该用户对象对应的电话号码
public int getNumber( )
{ return aNumber;
}
}
(2)实现Registry接口的类RegistryImpl
根据系统分析确定的功能,定义接口Registry对应的实现类RegistryImpl的代码如下:
// RegistryImpl类继承定义在RegistryPOA
.java中的RegistryPOA类
public class RegistryImpl extends TeleCom
.RegistryPOA
{ public synchronized TeleCom.User register( String name )
{ //根据用户名name生成注册的电话号码
//根据指定的电话号码,生成User接口的实现类UserImpl
//激活可移植对象适配器
//将注册的用户对象存入对象库
}
//返回用户对象的实例
}
3. 实现服务器端应用
根据功能描述及采用的ORB命名对象服务策略,按如下方式实现服务器端应用程序:
首先对ORB进行初始化,并获取根POA(RootPOA)的引用。通过在根POA中解析命名服务获得命名服务上下文,并根据服务对象的功能要求以相应的策略创建用户POA,利用用户POA完成服务对象端ORB与服务对象实现的通信。
服务对象的代码框架为:
public class Server
{ public static void main(String[] args)
{ //初始化对象请求代理
org.omg.CORBA.ORB orb = org.omg
.CORBA.ORB.init(args,null);
//获取根POA的引用
POA rootPOA =POAHelper.narrow(orb.resolve_initial_references(“RootPOA”));
//引用命名服务,获取上下文内容
org.omg.CORBA.Object rootObj =
orb.resolve_initial_references(“NameService”);
NamingContextExt root =
NamingContextExtHelper.narrow(rootObj);
//创建POA服务策略
org.omg.CORBA.Policy[] policies =
{ rootPOA.create_lifespan_policy(LifespanPolicyValue.persistent) };
//根据服务策略创建用户可移植对象适配器
POA myPOA = rootPOA.create_POA(“TeleCom_POA”,rootPOA.the_POAManager(),policies );
//生成服务对象
//申请服务对象标识
//激活服务对象
//激活可移植对象管理器
rootPOA.the_POAManager().activate();
//启动ORB
orb.run();
}
}
4. 实现客户端应用
根据服务对象端提供的命名服务类型,生成相应的对象请求代理,并利用命名服务的方式定位服务对象,提出服务请求。
public class Client
{ public static void main(String[] args)
{ //初始化对象请求代理
org.omg.CORBA.ORB orb = org.omg
.CORBA.ORB.init(args,null);
//引用命名服务,获取上下文内容
org.omg.CORBA.Object rootObj = orb.resolve_initial_references(“NameService”);
NamingContextExt root = Naming-
ContextExtHelper.narrow(rootObj);
//利用命名服务定位服务对象
//其中服务对象名已经在Server.java中定义
org.omg.CORBA.Object mgrObj = ((NamingContext)root).resolve(root.to_name(“TeleComManager”));
TeleCom.Registry manager = TeleCom
.Registry.narrow(mgrObj);
//取得账户名name
//根据具体账户名申请用户账户
TeleCom.Registry user = manager.open(name);
//获取用户分配的电话号码
int number = user.getNumber();
//打印账户信息等操作
}
}
分享到:
相关推荐
CORBA服务,组件开发,有兴趣的人看看吧
CORBA技术系列丛书之-CORBA服务,对于CORBA开发技术讲的特别详细清楚,并针对不同语言的特征进行了系列的讲述
Java编写的Corba Client. 不用编写任何代码,就可以调用Corba 服务,非常不错,值得你们收藏!支持Java 1.4.2 以上版本,Windows 版本。
实时操作系统VxWorks上构造CORBA服务.pdf 实时操作系统VxWorks上构造CORBA服务.pdf
一款很不错的CORBA测试软件,可以模拟客户端和服务器端
利用空间地图数据(SMD)的海量特征、多尺度、广泛性和其离散分布适合于网络环境分布、共享、异构和可扩展的应用特点,提出了SMD远程分发的地图数据网络...经CORBA服务、FTP和直接拷贝等模式的性能比较表明,所提系统可
corba核心服务于研究 orb orm 组织
第3章 CORBA服务回顾 26 3.1 核心服务 26 3.2 数据库集成和事务处理 27 3.3 可伸缩性问题 28 3.4 小结 28 第4章 简单例子概述 29 4.1 简介 29 4.2 StockWatch组件 30 4.2.1 StockWatch接口 31 4.2.2 数据库模式 32 ...
CORBA公共对象请求代理体系结构)是由OMG组织制订的一..pptx
利用corba命名服务的方式实现简单的CS接口
Java CORBA 客户端 服务器 编程 第二版
这是一个使用CORBA命名服务的简单命令行模式日程管理软件,方便CORBA编程新手学习,属于CS模式,客户端把信息存到服务器,每次远程调用服务端的接口实现各种功能。
CORBA是一种面向对象的分布式计算技术。安全性几乎影响着分布式...简要介绍了CORBA的概念,概述了分布式对象的安全需求,着重讨论了CORBA服务的安全机制,对鉴别、授权、权限、审计、防否认、安全域等概念进行了解释。
CORBA服务提供了可在多种应用程序中使用的通用功能。 它们包括命名服务,事件和通知服务,安全服务,交易和并发服务以及交易服务。 IDL模块 module Whiteboard { struct Rectangle{ ...} ; struct Graphical...
分布式计算——CORBA客户服务器编程,学习CORBA客户/服务器编程。
掌握CORBA规范 –ORB基本概念与原理 –开发CORBA程序的流程 –应用CORBA服务来部署分布式系统 使用OrbixE2A产品来实现CORBA –OrbixE2A产品的特点
大规模事务处理系统实现了配置数据的添加/删除/修改,CORBA服务对象、主机的监测和实时状态显示,CORBA服务对象的运行维护以及部署等功能。
Java与Corba客户服务器编程2 Java与Corba客户服务器编程2 Java与Corba客户服务器编程2
Java与Corba客户服务器编程3 Java与Corba客户服务器编程3 Java与Corba客户服务器编程3
Java与Corba客户服务器编程4 Java与Corba客户服务器编程4 Java与Corba客户服务器编程4