系列服务,它们可通过标准接口访问。
1。 CORBA 接口定义语言(IDL)
CORBA 是面向语言的透明而设计的:一个客户对象可调用属于不同类的服务器对象方法,无论对方是用何种
语言实现的。当然,客户对象事先必须知道由服务器对象揭示的方法名称及签名。这时便要用到 IDL。CORBA
IDL是一种与语言无关的设计方法,可用它指定数据类型、属性、操作、接口以及更多的东西。IDL 的语法类
似于C++或 Java 语法。下面这张表格为大家总结了三种语言一些通用概念,并展示了它们的对应关系。
CORBA IDL Java C++
模块(Module) 包(Package) 命名空间(Namespace)
接口(Interface) 接口(Interface) 纯抽象类(Pure abstract class)
方法(Method) 方法(Method) 成员函数(Member function)
继承概念也获得了支持——就象C++那样,同样使用冒号运算符。针对需要由服务器和客户实现和使用的属
性、方法以及接口,程序员要写出一个 IDL描述。随后,IDL会由一个由厂商提供的 IDL/Java 编译器进行编
译,后者会读取 IDL源码,并生成相应的Java 代码。
IDL编译器是一个相当有用的工具:它不仅生成与 IDL等价的 Java 源码,也会生成用于汇集方法自变量的代
码,并可发出远程调用。我们将这种代码称为“根干”(Stub and Skeleton)代码,它组织成多个Java 源
文件,而且通常属于同一个Java 包的一部分。
2。 命名服务
命名服务属于CORBA 基本服务之一。CORBA 对象是通过一个引用访问的。尽管引用信息用我们的眼睛来看没
什么意义,但可为引用分配由程序员定义的字串名。这一操作叫作“引用的字串化”。一个叫作“命名服
务”(Naming Service)的OMA 组件专门用于执行“字串到对象”以及“对象到字串”转换及映射。由于命
名服务扮演了服务器和客户都能查询和操作的一个电话本的角色,所以它作为一个独立的进程运行。创建
“对象到字串”映射的过程叫作“绑定一个对象”;删除映射关系的过程叫作“取消绑定”;而让对象引用
传递一个字串的过程叫作“解析名称”。
比如在启动的时候,服务器应用可创建一个服务器对象,将对象同命名服务绑定起来,然后等候客户发出请
求。客户首先获得一个服务器引用,解析出字串名,然后通过引用发出对服务器的调用。
同样地,“命名服务”规范也属于CORBA 的一部分,但实现它的应用程序是由ORB 厂商(开发商)提供的。
由于厂商不同,我们访问命名服务的方式也可能有所区别。
A。6。2 一个例子
这儿显示的代码可能并不详尽,因为不同的ORB 有不同的方法来访问CORBA 服务,所以无论什么例子都要取
决于具体的厂商(下例使用了JavaIDL,这是 Sun 公司的一个免费产品。它配套提供了一个简化版本的ORB、
一个命名服务以及一个“IDL→Java ”编译器)。除此之外,由于 Java 仍处在发展初期,所以在不同的
Java/CORBA 产品里并不是包含了所有 CORBA 特性。
我们希望实现一个服务器,令其在一些机器上运行,其他机器能向它查询正确的时间。我们也希望实现一个
客户,令其请求正确的时间。在这种情况下,我们让两个程序都用Java 实现。但在实际应用中,往往分别采
用不同的语言。
1。 编写 IDL源码
667
…………………………………………………………Page 669……………………………………………………………
第一步是为提供的服务编写一个 IDL描述。这通常是由服务器程序员完成的。随后,程序员就可用任何语言
实现服务器,只需那种语言里存在着一个CORBA IDL 编译器。
IDL文件已分发给客户端的程序员,并成为两种语言间的桥梁。
下面这个例子展示了时间服务器的 IDL描述情况:
module RemoteTime {
interface ExactTime {
string getTime();
};
};
这是对 RemoteTime 命名空间内的 ExactTime 接口的一个声明。该接口由单独一个方法构成,它以字串格式返
回当前时间。
2。 创建根干
第二步是编译 IDL,创建Java 根干代码。我们将利用这些代码实现客户和服务器。与JavaIDL 产品配套提供
的工具是idltojava:
idltojava …fserver …fclient RemoteTime。idl
其中两个标记告诉 idltojava 同时为根和干生成代码。idltojava 会生成一个 Java 包,它在 IDL模块、
RemoteTime 以及生成的Java 文件置入 RemoteTime 子目录后命名。_ExactTimeImplBase。java 代表我们用于
实现服务器对象的“干”;而_ExactTimeStub。java 将用于客户。在ExactTime。java 中,用Java 方式表示
了IDL 接口。此外还包含了用到的其他支持文件,例如用于简化访问命名服务的文件。
3。 实现服务器和客户
大家在下面看到的是服务器端使用的代码。服务器对象是在ExactTimeServer 类里实现的。
RemoteTimeServer 这个应用的作用是:创建一个服务器对象,通过 ORB 为其注册,指定对象引用时采用的名
称,然后“安静”地等候客户发出请求。
import RemoteTime。*;
import org。omg。CosNaming。*;
import org。omg。CosNaming。NamingContextPackage。*;
import org。omg。CORBA。*;
import java。util。*;
import java。text。*;
// Server object implementation
class ExactTimeServer extends _ExactTimeImplBase{
public String getTime(){
return DateFormat。
getTimeInstance(DateFormat。FULL)。
format(new Date(
System。currentTimeMillis()));
}
}
// Remote application implementation
public class RemoteTimeServer {
public static void main(String args'') {
try {
// ORB creation and initialization:
668
…………………………………………………………Page 670……………………………………………………………
ORB orb = ORB。init(args; null);
// Create the server object and register it:
ExactTimeServer timeServerObjRef =
new ExactTimeServer();
orb。connect(timeServerObjRef);
// Get the root naming context:
org。omg。CORBA。Object objRef =
orb。resolve_initial_references(
〃NameService〃);
NamingContext ncRef =
NamingContextHelper。narrow(objRef);
// Assign a string name to the
// object reference (binding):
Nameponent nc =
new Nameponent(〃ExactTime〃; 〃〃);
Nameponent path'' = {nc};
ncRef。rebind(path; timeServerObjRef);
// Wait for client requests:
java。lang。Object sync =
new java。lang。Object();
synchronized(sync){
sync。wait();
}
}
catch (Exception e) {
System。out。println(
〃Remote Time server error: 〃 + e);
e。printStackTrace(System。out);
}
}
}
正如大家看到的那样,服务器对象的实现是非常简单的;它是一个普通的 Ja
小说推荐
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 最新章:第26章
- 深入浅出MFC第2版(PDF格式)
- -Page 1-Page 2-山高月小山高月小 水落石出水落石出山高月小山高月小 水落石出水落石出-Page 3-深入淺出MFC(第版 使用Visual C 5.0 MFC 4.2)Dissecting MFC(Second Edition Using Visual C 5.0 MFC 4.2)侯俊
- 最新章:第309章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 最新章:第214章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- 神祗之眼 (正式版)第7卷(全文完)作者:百里芜虚
- 第五十一章离12月25日的圣诞节还有两天,纽约已经换上了节日的盛装,几天前的一场大雪令整个城市一片银白。人们笑逐颜开,都纷纷开始为节日做准备,商家为了在节日打开销路纷纷推出各种优惠促销手段,纽约的大街小巷全都这样热闹。依沙那被老婆打发出来买过节要用的杂货,而女儿则和凯妮一起到百货商场去买衣服去了。对
- 最新章:第23章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章