`
pleasetojava
  • 浏览: 733729 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

CORBA Programming with TAO - 7.IIOP(体验IIOP--一个Java作客户端的例子)

阅读更多
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
即可。
参考:
1. Sun Microsystems. Java IDL Documentation. http://java.sun.com/j2se/1.4.2/docs/guide/idl/
分享到:
评论

相关推荐

    CORBA Programming with TAO

    CORBA Programming with TAO,整理自“大卫的思维空间”,内容简洁,快速入门。格式制作为CHM,方便阅读。

    java-11-openjdk-11.0.7.10-1.windows.redhat.x86_64.zip

    2. **HTTP客户端(HttpClient)**:Java 11提供了一个新的内置HTTP客户端API,替代了旧的`HttpURLConnection`,为开发者提供了更现代、更易于使用的接口,支持异步和同步请求,以及HTTPS和连接池。 3. **文本块...

    《CORBA Programming with TAO》

    《CORBA Programming with TAO》是一篇专门为CORBA编程初学者准备的文章,它详细介绍了如何使用TAO(The ACE ORB)这一实现CORBA标准的开源ORB(对象请求代理)。TAO是ACE(Adaptive Communication Environment)...

    jdk-11.0.11_windows-x64_bin.exe

    **Java Development Kit...总之,JDK 11作为Java的一个关键版本,不仅带来了新的功能和优化,也强化了开发者的体验和效率。无论是初学者还是经验丰富的开发者,都应该掌握JDK 11的基础知识,以适应不断变化的Java生态。

    glassfish-corba-source-3.1.0-b021.zip

    Glassfish-CORBA-Source-3.1.0-b021.zip是一个压缩包,其中包含了Glassfish服务器的一个特定版本的CORBA(Common Object Request Broker Architecture)源代码。Glassfish是Oracle公司提供的一个开源Java EE应用...

    CORBA-sample-of-java.rar_corba

    在“CORBA-sample-of-java.rar_corba”这个压缩包中,包含了一个基于Java实现的CORBA实例,以及一个名为“基于Java的CORBA实验参考.mht”的文档,用于指导如何编译和运行这个程序。 **CORBA的核心概念** 1. **ORB...

    jdk-11.0.13_windows-x64_bin.zip

    2. **HTTP客户端API(JEP 321)**: JDK 11包含了新的`java.net.http`包,提供了一个内置的高性能HTTP/2客户端,支持异步和同步操作,简化了网络编程。 3. **动态类型语言支持(JEP 335)**: 通过在Java虚拟机(JVM...

    JacORB-2.3.0-bin.zip

    JacORB,全称为 Java Object Request Broker,是一个开源的、完全符合CORBA(Common Object Request Broker Architecture)规范的Java ORB(Object Request Broker)。它允许不同计算机上的对象相互通信,仿佛它们都...

    jdk-11.0.12_windows-x64_bin.zip

    标题中的"jdk-11.0.12_windows-x64_bin.zip"指的是Java Development Kit (JDK) 的一个特定版本,11.0.12,为Windows 64位系统的可执行安装包。JDK是Oracle公司提供的用于开发和运行Java应用程序的重要工具集,它包含...

    jdk-11.0.22-windows-x64

    1. **Java版本**: JDK 11.0.22是Oracle公司发布的Java 11的一个更新版本,Java 11是长期支持(LTS)版本,意味着它将获得更长时间的安全性和性能更新。此版本修复了一些已知问题,提升了整体稳定性和安全性。 2. **...

    (Addison) - Advanced CORBA Programming with C++.pdf

    《Advanced CORBA Programming with C++》是一本专为高级CORBA编程者设计的书籍,由Addison-Wesley出版社出版。这本书深入探讨了CORBA(Common Object Request Broker Architecture,公共对象请求代理架构)的高级...

    axis2相关的jar包

    axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-jibx-1.5.4.jar axis2-json-1.5.4.jar axis2-kernel-1.5.4.jar axis2-metadata...

    jdk-11.0.16.1_linux-x64_bin.tar.gz

    本文将详细讨论JDK 11.0.16.1的Linux x64版本,这是一个针对64位Linux操作系统的特定构建,对于Java开发者来说至关重要。 首先,JDK 11是一个长期支持(Long-Term Support, LTS)版本,这意味着它会得到Oracle公司...

    ACE+TAO源码及编译流程.zip

    ACE提供了一组C++库,用于构建高性能、跨平台的应用程序,而TAO是基于ACE的一个ORB(Object Request Broker),实现了CORBA(Common Object Request Broker Architecture)标准。在Linux系统,特别是CentOS 7.6环境...

    RMI-IIOP.zip_The Client_rmi iiop

    这个"RMI-IIOP.zip_The Client_rmi iiop"压缩包很可能包含了一个示例,展示了如何使用RMI-IIOP来实现客户端与服务器之间的通信。 **RMI介绍** RMI是Java中用于在不同JVM之间调用方法的机制。它允许对象在不同的网络...

    AXIS2实现webservice jar包

    axis2-corba-1.7.4.jar axis2-fastinfoset-1.7.4.jar axis2-java2wsdl-1.7.4.jar axis2-jaxbri-1.7.4.jar axis2-jaxws-1.7.4.jar axis2-jibx-1.7.4.jar axis2-json-1.7.4.jar axis2-kernel-1.7.4.jar axis2-metadata...

    Ice-3.5.1-el6-x86_64-rpm.tar.gz

    标题 "Ice-3.5.1-el6-x86_64-rpm.tar.gz" 提供的是一个软件分发包的名称,其中包含了 Ice 的3.5.1版本,适用于64位的EL6(Enterprise Linux 6)操作系统。这个压缩包采用tar.gz格式,这是一种在Linux和Unix系统中...

    axis2相关jar包~eclipse支持插件包

    axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-jibx-1.5.4.jar axis2-json-1.5.4.jar axis2-kernel-1.5.4.jar axis2-metadata...

    jdk-11.0.11_windows-x64_bin.zip

    JDK 11是Java的一个长期支持(LTS)版本,这意味着它将接收长期的安全更新和技术支持,这对企业和开发团队来说非常重要。 1. **JDK 11版本**:Java 11是Java SE(标准版)平台的第17个主要版本,于2018年9月发布。...

    apache-ant-1.9.14.zip

    - **构建工具**:Ant是一个基于Java的构建工具,与Make类似,但设计更为灵活,适合Java项目。 - **XML配置**:Ant通过XML文件定义构建过程,其中包含了一系列的任务(tasks)和目标(targets)。 - **任务(Tasks...

Global site tag (gtag.js) - Google Analytics