CORBA Programming with TAO - 7.IIOP(体验IIOP--一个Java作客户端的例子)
摘要:
CORBA2.0引入的IIOP(Internet Inter-ORB Protocol)是GIOP(General Inter-ORB Protocol)针对TCP/IP协议的一个实现,IIOP使得不同ORB间可以相互访问,同时也使得基于不同ORB的复杂分布式应用成为可能。
一、简介
TAO是一个C++ ORB,因此,我们在没有其它附加“转接”模块的情况下,仅能使用C++来直接使用该ORB进行程序设计,但是,由于TAO同时也支持IIOP(Internet Inter-ORB Protocol),因此,我们的客户程序并不一定要用C++来编写;反之,我们基于TAO的客户程序也可以与基于其它ORB实现的Server程序进行通信。
IIOP是不同ORB实现间进行交互的桥梁,由于这种支持是内建的,因此,对于应用程序来讲,并不需要为此额外做些什么。
Java从1.3开始,提供了一个内建的ORB实现--Java IDL,该ORB被定义在org.omg.CORBA及其子包中。
本文中,我们将通过一个Java作客户端的例子向大家讲述如何在TAO与Java IDL间进行通信。
二、实例
这里,我们尝试编写一个Java Client与上一篇中的echo服务程序(eg2_svr)进行通信。具体步骤如下:
1、在原echo工程目录下新建一个目录:java;
2、到idl子工程目录下执行如下命令编译echo.idl,生成存根(Stub,桩)代码:
idlj -td ../java echo.idl
注:其中的-td用于将输出目录改为../java。
通过编译,我们将得到如下几个.java文件:
Echo.java
接口类,从EchoOperations接口及org.omg.CORBA.Object等接口派生,从而保证其实现者除具有idl中定义的接口特性外,还具有org.omg.CORBA.Object所规定的特性。
EchoHelper.java
辅助支持类,为对Echo对象提供读写、类型检查等辅助支持。
EchoHolder.java
另一辅助支持类。
EchoOperations.java
idl直接映射的接口声明。
_EchoStub.java
这是一个stub类,为Client程序提供Echo接口的Stub实现。
对于我们的客户程序而言,我们一般仅需与Echo接口及EchoHelper类直接打交道。
下面是直接通过IOR访问TAO Server程序的代码:
// EchoClient_IOR.java
import org.omg.CORBA.*;
import org.omg.CosNaming.*;
public class EchoClient_IOR {
public static void main(String args []) {
if (args.length != 1) {
System.out.println("Usage: EchoClient_IOR svc_IOR_string");
return;
}
try {
ORB orb = ORB.init(args, null);
org.omg.CORBA.Object objRef = orb.string_to_object(args[0]);
Echo h = EchoHelper.narrow(objRef);
System.out.println("This is a Java Client.");
System.out.println("Calling echoString...");
System.out.println("The server returns: " + h.echoString("Hello World!"));
} catch (Exception e) {
System.out.println("Error: " + e);
e.printStackTrace(System.out);
}
}
}
启动eg1_svr后只需将程序输出的IOR拷贝传递给EchoClient_IOR即可。
同样,我们还可以通过访问TAO Naming Service来访问对应的服务程序。下面是Naming Service版本的EchoClient:
import org.omg.CORBA.*;
import org.omg.CosNaming.*;
public class EchoClient_NS {
public static void main(String args []) {
try {
ORB orb = ORB.init(args, null);
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
String name = "test.my_context/Echo.Object";
NameComponent path [] = ncRef.to_name(name);
for (int i = 0; i < path.length; i++) {
System.out.println(i + ": " + path[i].id + "." + path[i].kind);
}
Echo h = EchoHelper.narrow(ncRef.resolve(path));
System.out.println("This is a Java Client.");
System.out.println("Calling echoString...");
System.out.println("The server returns: " + h.echoString("Hello World!"));
} catch (Exception e) {
System.out.println("Error: " + e);
e.printStackTrace(System.out);
}
}
}
由于我们启用的是Naming_Service,即TAO的Naming Service,因此,需要在启动Java客户程序时作一些额外的工作--指定Naming Service的相关信息,以下几种都是正确指定Naming Service的方法:
java EchoClient_NS -ORBInitRef NameService=corbaloc:iiop:1.2@localhost:2809/NameService
java EchoClient_NS -ORBInitRef NameService=corbaloc:iiop:1.2@localhost:2809
java EchoClient_NS -ORBInitRef NameService=corbaloc::localhost:2809
如果你的Echo Client与Server程序不在一台机器上,只需将localhost换成相应的主机IP即可。
当然,你也可以直接指定Naming_Service的IOR,如:
java EchoClient_NS -ORBInitRef NameService=IOR:01000000xxxx
同样,你也可以尝试用TAO客户程序连接Java IDL服务程序,道理是一样的。
总的来看,由于各ORB实现均支持IIOP,同时,各种不同实现在使用上基本上是一致的,给我们实现分布式应用带来了极大的方便。
另附:
本系列源码包java目录下还有一个名为EchoServer.java的文件,这是一个Java IDL的服务程序实现(要编译EchoServer.java需先在java目录下运行命令:idlj -fall ../echo.idl生成POA代码),你可以分别尝试用IOR和Name Service方式连接EchoServer。启动EchoServer前需要启动Java IDL Name Service: tnameserv或orbd,相应的启动EchoServer的命令是:
java EchoServer
启动EchoClient时也无需再额外指定初始化参数,只需执行:
java EchoClient
即可。
参考:
相关推荐
qtz40塔式起重机总体及塔身有限元分析法设计().zip
Elasticsearch是一个基于Lucene的搜索服务器
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
美国纽约HVAC(暖通空调)数据示例,谷歌地图数据包括:时间戳、名称、类别、地址、描述、开放网站、电话号码、开放时间、更新开放时间、评论计数、评级、主图像、评论、url、纬度、经度、地点id、国家等。 在地理位置服务(LBS)中,谷歌地图数据采集尤其受到关注,因为它提供了关于各种商业实体的详尽信息,这对于消费者和企业都有极大的价值。本篇文章将详细介绍美国纽约地区的HVAC(暖通空调)系统相关数据示例,此示例数据是通过谷歌地图抓取得到的,展示了此技术在商业和消费者领域的应用潜力。 无需外网,无需任何软件抓取谷歌地图数据:wmhuoke.com
2023-04-06-项目笔记-第四百五十五阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.453局变量的作用域_453- 2025-04-01
1_实验三 扰码、卷积编码及交织.ppt
北京交通大学901软件工程导论必备知识点.pdf
内容概要:本文档总结了 MyBatis 的常见面试题,涵盖了 MyBatis 的基本概念、优缺点、适用场合、SQL 语句编写技巧、分页机制、主键生成、参数传递方式、动态 SQL、缓存机制、关联查询及接口绑定等内容。通过对这些问题的解答,帮助开发者深入理解 MyBatis 的工作原理及其在实际项目中的应用。文档不仅介绍了 MyBatis 的核心功能,还详细解释了其在不同场景下的具体实现方法,如通过 XML 或注解配置 SQL 语句、处理复杂查询、优化性能等。 适合人群:具备一定 Java 开发经验,尤其是对 MyBatis 有初步了解的研发人员,以及希望深入了解 MyBatis 框架原理和最佳实践的开发人员。 使用场景及目标:①理解 MyBatis 的核心概念和工作原理,如 SQL 映射、参数传递、结果映射等;②掌握 MyBatis 在实际项目中的应用技巧,包括 SQL 编写、分页、主键生成、关联查询等;③学习如何通过 XML 和注解配置 SQL 语句,优化 MyBatis 性能,解决实际开发中的问题。 其他说明:文档内容详尽,涵盖面广,适合用于面试准备和技术学习。建议读者在学习过程中结合实际项目进行练习,以更好地掌握 MyBatis 的使用方法和技巧。此外,文档还提供了丰富的示例代码和配置细节,帮助读者加深理解和应用。
《基于YOLOv8的智能电网设备锈蚀评估系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
插头模具 CAD图纸.zip
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
《基于YOLOv8的智慧农业水肥一体化控制系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
python爬虫;智能切换策略,反爬检测机制
台区终端电科院送检文档
e235d-main.zip
丁祖昱:疫情对中国房地产市场影响分析及未来展望
MCP快速入门实战,详细的实战教程
YD5141SYZ后压缩式垃圾车的上装箱体设计.zip
IMG_20250401_195352.jpg
DeepSeek系列专题 DeepSeek技术溯源及前沿探索.pdf