下载并设置java platform这里就不详细讲了。
这里以一个java的corba实例说明corba这种c-s结构的程序的实现。
NB:这篇文章虽然是用java语言写的,但是由于corba的多语言特性,idl文件即可以用java编译器编译,也可以使用其他支持corba的语言编译例如c#. 把以下的java 格式改成c#风格照样可以使用。而且c-s没什么联系,你也可以用c#写server,用java写client,这就是corba强悍的地方!
1)首先要熟悉idlj 语言,这个是专门进行接口设计的语言,它与java没关系,有自己的语法,具体的规则需要大家自己再网上研究,这里不多说了(或者访问如下网站详细察看http://www.iona.com/support/docs/manuals/orbix/33/html/orbix33cxx_pguide/IDL.html)。
module HelloApp
{
interface Hello
{
string sayHello();
oneway void shutdown();
};
};
这里定义了一个简单的interface, 将其保存为hello.idl, 然后再dos命令框里面输入 idlj.exe -fall hello.idl 编译。之后会出现一个叫做HelloApp的目录,corba就是通过这个目录里面的类来进行c-s之间的数据沟通。
2)下一步,就是我们的server端:
// A server for the Hello object
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;
public class HelloServer {
public static void main(String args[]) {
try{
// create and initialize the ORB
ORB orb = ORB.init(args, null);
// get reference to rootpoa & activate the POAManager
POA rootpoa =
(POA)orb.resolve_initial_references("RootPOA");
rootpoa.the_POAManager().activate();
// create servant and register it with the ORB
HelloImpl helloImpl = new HelloImpl();
helloImpl.setORB(orb);
// get object reference from the servant
org.omg.CORBA.Object ref =
rootpoa.servant_to_reference(helloImpl);
// and cast the reference to a CORBA reference
Hello href = HelloHelper.narrow(ref);
// get the root naming context
// NameService invokes the transient name service
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
// Use NamingContextExt, which is part of the
// Interoperable Naming Service (INS) specification.
NamingContextExt ncRef =
NamingContextExtHelper.narrow(objRef);
// bind the Object Reference in Naming
String name = "Hello1";
NameComponent path[] = ncRef.to_name( name );
ncRef.rebind(path, href);
System.out.println
("HelloServer ready and waiting ...");
// wait for invocations from clients
orb.run();
}
catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
System.out.println("HelloServer Exiting ...");
} //end main
} // end class
将其保存为HelloServer.java.放在刚才的hello.idl的目录。编译这个文件就不多说了。
3)还记得在hello中定义的interface吗?我们需要对自己定义的接口中的方法进行实现,因此HelloImp.java
// The servant -- object implementation -- for the Hello
// example. Note that this is a subclass of HelloPOA, whose
// source file is generated from the compilation of
// Hello.idl using j2idl.
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;
class HelloImpl extends HelloPOA //必须继承这个类,在helloApp目录中已自动生成
{
private ORB orb;
public void setORB(ORB orb_val) {
orb = orb_val;
}
// implement sayHello() method
public String sayHello()
{
return "\nHello world !!\n";
}
// implement shutdown() method
public void shutdown() {
orb.shutdown(false);
}
} //end class
同样放在server所在目录中。
4)接下来是客户端(HelloClient.java):
// A sample Java IDL object client application.
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
public class HelloClient
{
static Hello helloImpl;
String [] x=new String[6];
public static void main(String args[]){
try{
// create and initialize the ORB
ORB orb = ORB.init(args, null);
System.out.println("ORB initialised\n");
// get the root naming context
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
// Use NamingContextExt instead of NamingContext,
// part of the Interoperable naming Service.
NamingContextExt ncRef =
NamingContextExtHelper.narrow(objRef);
// resolve the Object Reference in Naming
String name = "Hello1";
helloImpl =
HelloHelper.narrow(ncRef.resolve_str(name));
System.out.println
("Obtained a handle on server object: "
+ helloImpl);
System.out.println(helloImpl.sayHello());
helloImpl.shutdown();
}
catch (Exception e) {
System.out.println("ERROR : " + e) ;
e.printStackTrace(System.out);
}
} //end main
} // end class
这个文件最好放在一个新建的目录,已表示和server有区别,放在一起也没有关系。如果分开的话,记着把HelloApp这个目录复制到client的目录来。
5)好啦!已经可以开始爽了,我们编译所有的java文件
6)再dos窗口输入orbd.exe –ORBInitialPort 1234(端口号可以自定义,但是记得s-c要保持一致),启动corba服务。
7)启动服务器:java HelloServer –ORBInitialPort 1234 –ORBInitialHost localhost
8)启动客户端:java HelloClient –ORBInitialPort 1234 –ORBInitialHost localhost
9)严格执行上述过程是应该直接成功的。 已经经过测试。
10)然后再仔细研究这段代码,你就会发现corba的奥秘了。
分享到:
相关推荐
本实例和相关资料旨在深入理解并实践Java CORBA的核心概念。 首先,我们需要理解CORBA的核心理念:对象请求代理(ORB)。ORB是CORBA系统的心脏,它负责对象间的通信,将对象的调用转换为网络消息,然后将结果返回给...
**CORBA核心规范——一个简单的CORBA/Java示例** **一、CORBA基础** **CORBA(Common Object Request Broker Architecture)**,即公共对象请求代理架构,是一种跨平台、跨语言的分布式计算模型,旨在解决不同系统...
在这个实例中,我们将深入探讨如何在Java环境中使用CORBA。 首先,我们需要理解CORBA的核心概念:ORB(Object Request Broker),它是整个体系架构的心脏。ORB负责对象的定位、激活和消息传递,使得客户端能够透明...
这个“corba实例”可能是一个包含示例代码和配置文件的压缩包,用于帮助开发者理解和学习CORBA的基本工作原理和应用。 在CORBA系统中,对象请求代理(ORB,Object Request Broker)是核心组件,它负责对象之间的...
### JAVA与CORBA的深度整合:构建服务端与客户端实例 #### 一、CORBA概述与架构 CORBA(Common Object Request Broker Architecture)是对象管理组织(OMG)提出的一种面向对象的分布式计算架构标准,旨在实现不同...
在Java中实现CORBA,主要依赖于Java IDL(Interface Definition Language)和JDK中的CORBA库。Java IDL允许将接口定义为IDL文件,然后这些接口可以被编译成Java接口,使得Java对象能够符合CORBA规范。CORBA库则提供...
Java CORBA(Common Object Request Broker Architecture)是一种中间件技术,用于构建分布式应用程序。它允许不同计算机上的对象相互交互,仿佛它们都在同一台机器上运行。Java CORBA与RMI(Remote Method ...
学习Java CORBA的过程中,你可能会遇到如何定义接口、创建ORB实例、注册对象、查找和调用远程对象等问题。理解这些概念并熟练应用是成为CORBA高手的关键。通过阅读和实践这个压缩包中的内容,你可以逐步掌握这一技术...
"CORBA.rar_Java CORBA_corba_corba银行账户"是一个关于如何使用Java CORBA实现银行账户管理的实例项目。在这个项目中,我们将深入探讨如何利用CORBA构建一个简单的银行账户系统,包括账户余额查询、取款和存款等...
CORBA实例详解 CORBA(Common Object Request Broker Architecture)是一种分布式对象计算架构,允许...这个CORBA实例演示了如何使用IDL定义接口、生成Java语言映射、实现服务器端的Java语言程序和服务器启动程序。
- 创建ORB实例:演示如何在Java中初始化和使用ORB。 2. **Chapter03**:对象定位与引用 - IOR(Object Reference):解释IOR的概念,它是ORB用于标识远程对象的字符串。 - 对象定位:演示如何通过IOR获取并激活...
在这个C++版本的CORBA实例中,我们将深入探讨如何利用CORBA标准来实现跨平台的通信。 首先,我们需要了解CORBA的核心概念——ORB(Object Request Broker)。ORB是整个CORBA架构的心脏,它负责对象的定位、调用以及...
- **对象发布**:可以导出Java类并将其实例化,然后通过命名/目录服务发布。 - **远程调用**:远程客户端可以发现这些对象,调用其方法并接收数据,就像它们在本地运行一样。 - **多语言支持**:不同于RMI的是,使用...
**Java CORBA:构建分布式对象系统** Java CORBA是一种强大的技术,它允许不同的软件应用程序在不同的计算机上相互通信,仿佛它们都在同一台机器上运行。这个技术是基于Common Object Request Broker Architecture...
关于CORBA客户端开发,开发者需要了解如何创建ORB实例、发布和查找服务、以及如何调用远程方法。这个过程通常涉及编写IDL文件来定义服务接口,将其编译为目标语言(如Java),然后在客户端和服务端分别创建ORB并进行...
### Java客户端通过CORBA方式访问C++服务器 #### 背景与概念 CORBA(Common Object Request Broker Architecture,通用对象请求代理系统)是一种面向分布式计算环境的标准接口规范,允许不同语言编写的程序通过...
"CORBA 计算器实例"是一个经典的IT教学资源,旨在帮助初学者快速理解和应用CORBA(Common Object Request Broker Architecture)技术。CORBA是一种标准的中间件技术,它允许不同计算机上的应用程序通过网络进行通信...
CORBA允许不同计算机上的软件组件通过网络进行通信,这些组件可以是任何语言编写的,例如Java、C++等。 CORBA的主要特点包括: - **平台无关性**:CORBA能够在不同的操作系统和硬件平台上运行。 - **语言无关性**...