分享
 
 
 

用CORBA创建Client/Server程序

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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 ORB从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)通信。

下一页

客户端代码是非常简单的,下面是你能创建的最小的客户端程序。

// Client.java

public class Client

public static void main(String[] args)

Counter.Count count = null;

org.omg.CORBA.ORB orb = null;

// Initialize the ORB

orb = org.omg.CORBA.ORB.init();

// Bind to the object on the server

count = Counter.CountHelper.bind(orb, "test");

// Call the server functions

count.increment();

System.out.println("Current Count = " + count.getCounter());

// clean up

count = null;

orb.shutdown();

在这段代码里你可以看到Client实例化ORB,绑定helper对象为了连接Server,接着开始调用方法,为了编译这段代码,储存文件名为Client.java并且输入:

vbjc Client.java

另外,为ORB可以加入三个jar文件到你的Class Path中并其用javac编译Client(三个jar文件是:vbjorb.jar,vbjapp.jar和vbjtools.jar)

假如你想让客户端代码发现问题并且告诉你,你要修改Client.java如下:

// Client.java

public class Client

public static void main(String[] args)

Counter.Count count = null;

org.omg.CORBA.ORB orb = null;

// Initialize the ORB

try

orb = org.omg.CORBA.ORB.init();

catch (org.omg.CORBA.SystemException se)

System.err.println("initializtion problem in the ORB " + se);

System.exit(1);

// Bind to the object on the server

try

count = Counter.CountHelper.bind(orb, "test");

catch (org.omg.CORBA.SystemException se)

System.err.println("Binding problem in the ORB " + se);

System.exit(1);

try

count.increment();

System.out.println("Current Count = " + count.getCounter());

catch (org.omg.CORBA.SystemException se)

System.err.println("Increment failure " + se);

System.exit(1);

// clean up

try

count = null;

orb.shutdown();

catch (org.omg.CORBA.SystemException se)

System.err.println("Problem with cleanup " + se);

System.exit(1);

当你初始化ORB并且绑定到Server时你有多个选项:

1.ORB可以从命令行中接受并且分析这些选项。

2.你可以设置绑定选项。

3.你可以直接连到一个指定的机器。

下面的代码段为你展示了这三个选项

orb = org.omg.CORBA.ORB.init(args, null);

org.omg.CORBA.BindOptions bindOptions = new

org.omg.CORBA.BindOptions();

bindOptions.defer_bind = false;

bindOptions.enable_rebind = true;

count = Counter.CountHelper.bind(orb, "test", "marshall.iftech.com",

bindOptions);

这是初始化从命令行中接受参数,绑定接受了一个指定的机器名和选项。

在Server你需要创建两段代码,一段为了Client绑定而且执行Count类(Count类继承与ImplBase类),如下所示:

// CountImpl.java

public class CountImpl extends Counter._CountImplBase

private int c = 0;

public CountImpl(String name) {

super(name);

public CountImpl() {

super();

public void increment() {

c = c + 1;

System.out.println(c);

public int getCounter()

return c;

这个类不能再少了,它的功能只是实现类里的方法,执行这个类的Server代码如下:

// Server.java

public class Server

public static void main(String[] args)

org.omg.CORBA.ORB orb = null;

org.omg.CORBA.BOA boa = null;

Counter.Count count = null;

try

orb = org.omg.CORBA.ORB.init(args, null);

catch (org.omg.CORBA.SystemException se)

System.err.println("Initialization problem in the ORB " + se);

System.exit(1);

try

boa = orb.BOA_init();

catch (org.omg.CORBA.SystemException se)

System.err.println("Initialization problem in the BOA " + se);

System.exit(1);

try

count = new CountImpl("test");

boa.obj_is_ready(count);

System.out.println(count + " ready.");

boa.impl_is_ready();

catch (org.omg.CORBA.SystemException se)

System.err.println("Ready problem " + se);

System.exit(1);

Server代码用Server.java保存,编译这个Serve.java:

? vbjc Serve

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有