站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题用CORBA创建Client/Server 程序

用CORBA创建Client/Server 程序

摘要: 假如你想找一个利用面向对象的方法去连接一个Client到Server,你有两个主要的选择......
<iframe align=right marginWidth=0 marginHeight=0 src="http://www.chinabyte.com/tag/cont_flash_software.html" frameBorder=0 width=360 scrolling=no height=300></iframe>  假如你想找一个利用面向对象的方法去连接一个Client到Server,你有两个主要的选择:DCOM和CORBA。DCOM是微软的解决方案,并且当你为WINDOWS系统写代码时非常有用。在本文中,我们将要研究用CORBA去解决分布式应用程序问题。

  CORBA概要:

  在一个通常的用C++或者JAVA写的面向对象的程序里,程序包含所有应用程序需要用到的类。编译器编译和连接这些对象,当你用new语句初始化对象时,它们被创建在应用程序所在的内存里并且被当作一个简单的过程来执行。

  CORBA是一种技术允许一个Client程序调用属于一个Server的对象,这个Server可以是运行在同一台机器或者是几千里外的机器。在它的最基本的阶段,CORBA是非常简单的-实例化一个在你的处理内存空间的对象代替你在通常的程序中所做的,你可以实例化这个对象无论在哪一个网络的Server上。调用这个对象的方法以及这些方法需要传递的参数被打包成网络包的格式发送到服务器上。这个功能实际上是运行在服务器上,返回结果通过网络传递到调用者。

  这种方案的优点是服务器可以作为高效的、共享的资源中心,以Server为基础的CORBA对象可以访问Server的数据库和其它服务。当然,它的缺点是速度。每秒调用功能的数目被网络速度严格限制,以便保证其它技术通过网络传输数据,因而,CORBA不是独仪无二的。DCOM,甚至Socket都要忍受同样的延迟。

  用CORBA方法特别的方面是可以方便的调用ORB(Object Request Broker), ORB处理和操作Client和Server之间的连接。在下面的例子里我们将要用Inprise VisiBroker ORB。用VisiBroker,Client和Server都用一个叫做OSAGENT的服务,OSAGENT用一个标准的端口(通常是14000)连接Client,OSAGENT可以当作一个目录去帮助Client的ORB去找到一个它要找的对象。

  用java设置一个简单的CORBA的Client和Server是非常简单的,在下面我们将要看到几段例子代码段去显示这个过程,在接下来的部分我们将要解释代码怎样工作的,我们从关键字"安装"开始。
安装

  用文档中的例子代码,除了VisiBroker ORB之外你需要下载Sun的JDK1.1,你能下载SDK从http://java.sun.com/products/jdk/1.1/index.html。我们用JDK1.1代替1.2是为了避免和java2的ORB冲突。你可以得到VisiBroker OR B从http://www.inprise.com/visibroker/。先装SDK,再装ORB。
例子代码

  为了创建一个CORBA Server并且让Client访问它,你要决定Server类将要做什么再开始。在这个例子里我们要用一个非常简单的Server类,这个类拥有一个私有的整型变量,在这个类里的一个方法将要增加这个整型变量,并且另一个方法将要允许Client访问这个变量的正确值,下面是这个类的接口描述:

//Counter.idl
module Counter{
interface Count
{
void increment();
long getCounter();
};
};

  这个类被命名为Count,它的两个方法是Increment和getCounter,这个类被包含在一个叫Counter的模板中,只要你愿意这个模板可以包含好几个不同的类,把这IDL代码放在一个叫Counter.idl名字的文件中。

  为了用这个IDL文件,你需要IDL2JAVA去运行它,这个工具将要创Client和Server要用到的类,IDL2JAVA产生的Client类叫做Helper并且被命名为CountHelper.java,Client用helper类去调用Server的功能,IDL2JAVA产生的Server类叫做ImplBase并且被命名为_CountImpleBase.java,你将要执行这些Server扩展ImplBase的方法。

  注意:当你在Client直接用CounterHelper.java类时,当你调用一个Counter接口的方法时执行在Client的代码是_st_Counter.java。这个类调用stub把数据打包发送到Server并且返回正确的数据,它同Server端的skeleton(是_sk_Counter.java,继承与_CounterImplBase.java)通信。




↑返回目录
前一篇: 消除JDBC的瓶颈
后一篇: 用JavaMail API编写可带附件的邮件发送程序