如果想开发一个CORBA的Helloworld,基本上有以下几个步骤:
1.使用idl语言开发idl文件,这个文件中描述了接口的定义
module:对应了java中的package
interface:对应了java中的interface,HelloWorld即接口名称
sayHello:对应了java中interface声明的方法
string:对应了java中方法的返回值
2.使用java中的idlj命令,将idl语言翻译成java语言,并生成java代码
idlj -fall m.idl
idlj:java自带的工具
-fall:生成server和client端代码,也可以单独生成server或client
下面包含了6个java源文件,分述如下:
HelloPOA POA指的是Portable Object Adapter(轻便对象适配器)。这个抽象类是一个基于流的服务器端骨架,提供了服务器端基本的CORBA功能。
_HelloSutb 客户端的存根类,为客户端提供了CORBA功能。
Hello 这是java版的Hello接口,它提供了标准的CORBA对象功能。
HelloHelper 这是一个辅助类,负责向CORBA流中写入或读取对象。
HelloHolder 这是一个final类,它持有一个public的Hello实例变量。它用来操作CORBA输入输出流的参数。
HelloOperations 这个类才是我们所预想的那个接口,只包含我们定义的那个方法,不包含CORBA的任何东西。
3、开发server端的代码
实现是在server端的,需要继承自的HelloWorldPOA
copy六个存根文件到Server项目中
1)接口实现类
package server;
import helloworld.HelloWorldPOA;
/**
* 服务器端的实现代码
*
*/
public class HelloWorldImpl extends HelloWorldPOA {
@Override
public String sayHello() {
return "Hello World!12333"; //服务器端的实现代码
}
}
2)服务类
package server;
import org.omg.CORBA.ORB;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.CosNaming.NamingContextPackage.CannotProceed;
import org.omg.CosNaming.NamingContextPackage.NotFound;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.POAManagerPackage.AdapterInactive;
import org.omg.PortableServer.POAPackage.ServantNotActive;
import org.omg.PortableServer.POAPackage.WrongPolicy;
import helloworld.HelloWorld;
import helloworld.HelloWorldHelper;
public class HelloServer {
public static void main(String[] args) throws ServantNotActive, WrongPolicy, InvalidName, AdapterInactive, org.omg.CosNaming.NamingContextPackage.InvalidName, NotFound, CannotProceed {
//指定ORB的端口号 -ORBInitialPort 1050
args = new String[2];
args[0] = "-ORBInitialPort";
args[1] = "1050";
//创建一个ORB实例
ORB orb = ORB.init(args, null);
//拿到RootPOA的引用,并激活POAManager,相当于启动了server
org.omg.CORBA.Object obj=orb.resolve_initial_references("RootPOA");
POA rootpoa = POAHelper.narrow(obj);
rootpoa.the_POAManager().activate();
//创建一个HelloWorldImpl实例
HelloWorldImpl helloImpl = new HelloWorldImpl();
//从服务中得到对象的引用,并注册到服务中
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);
HelloWorld href = HelloWorldHelper.narrow(ref);
//得到一个根名称的上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
//在命名上下文中绑定这个对象
String name = "Hello";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);
//启动线程服务,等待客户端调用
orb.run();
System.out.println("server startup...");
}
}
4、开发client端的代码
server端的实现与服务监听都已经做完,现在需要写一个client来调用server的方法
copy六个存根文件到client项目中
package client;
import helloworld.HelloWorld;
import helloworld.HelloWorldHelper;
import org.omg.CORBA.ORB;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.CosNaming.NamingContextPackage.CannotProceed;
import org.omg.CosNaming.NamingContextPackage.NotFound;
public class HelloClient {
static HelloWorld helloWorldImpl;
static {
System.out.println("client开始连接server.......");
//初始化ip和端口号,-ORBInitialHost 127.0.0.1 -ORBInitialPort 1050
String args[] = new String[4];
args[0] = "-ORBInitialHost";
//server端的IP地址,在HelloServer中定义的
args[1] = "127.0.0.1";
args[2] = "-ORBInitialPort";
//server端的端口,在HelloServer中定义的
args[3] = "1050";
//创建一个ORB实例
ORB orb = ORB.init(args, null);
// 获取根名称上下文
org.omg.CORBA.Object objRef = null;
try {
objRef = orb.resolve_initial_references("NameService");
} catch (InvalidName e) {
e.printStackTrace();
}
NamingContextExt neRef = NamingContextExtHelper.narrow(objRef);
String name = "Hello";
try {
//通过ORB拿到了server实例化好的实现类
helloWorldImpl = HelloWorldHelper.narrow(neRef.resolve_str(name));
} catch (NotFound e) {
e.printStackTrace();
} catch (CannotProceed e) {
e.printStackTrace();
} catch (org.omg.CosNaming.NamingContextPackage.InvalidName e) {
e.printStackTrace();
}
System.out.println("client connected server.......");
}
public static void main(String args[]) throws Exception {
sayHello();
}
//调用实现类的方法
public static void sayHello() {
String str = helloWorldImpl.sayHello();
System.out.println(str);
}
}
5.启动orbd服务
仅仅创建了server和client的代码还不足以跑起来一个HelloWorld,还需要启动一个orbd服务,orbd包含自启动服务、透明的命名服务、持久化命名服务和命名管理器的后台处理进程。
orbd -ORBInitialPort 1050 -ORBInitialHost 127.0.0.1
6、启动server服务
7.启动client
相关推荐
**CORBA示例代码解析** 在提供的压缩包文件"crypt_service"中,可能包含了一个使用CORBA实现的加密服务示例。通常,这样的示例会涉及以下步骤: 1. 定义服务接口:使用IDL定义加密服务的接口,例如包含加密和解密...
**CORBA Hello World 实例详解** CORBA(Common Object Request Broker Architecture,公共对象请求代理架构)是一种中间件技术,用于构建分布式系统,使得不同计算机上的软件对象能够相互通信,仿佛它们都在同一台...
通常,一个简单的CORBA示例会包含以下组件: 1. IDL文件:定义了跨进程通信的接口,可以被编译为Java接口。 2. 服务器端代码:实现接口,并通过ORB注册,以便客户端可以找到并调用。 3. 客户端代码:创建ORB,查找...
在压缩包文件名为"CORBATEST"的情况下,我们可以推测这可能是一个包含了整个CORBA示例项目的文件夹,其中可能包含以下内容: 1. **源代码**:Java源文件,定义了ORB(对象请求代理)、IR(接口库)、GIOP(通用对象...
这个“CORBA.rar”压缩包包含了一些基础的Java CORBA示例,是学习和理解CORBA技术的良好起点。 CORBA是由OMG(Object Management Group,对象管理组织)制定的一种开放标准,它的目标是提供跨平台、跨语言的透明性...
这里提供了一个简单的CORBA示例,演示了如何使用CORBA实现客户端从服务器获取时间的功能。 #### 五、接口文件CorbaDemo.idl ```idl module TheDateApp { interface TheDate { string getTheDate(); }; }; ``` ...
- Delphi的Corba示例代码,演示如何创建ORB,注册和调用远程对象。 - 三层架构的模板项目,展示如何划分和实现各层。 - 相关的库文件和ORB实现,如Torry's Delphi Pages上的开源Corba实现。 - 文档和教程,解释如何...
#### CORBA示例 下面是一个使用CORBA的简化示例,展示如何定义IDL接口和服务,并使用JDK 1.2的ORB来实现和发布这些服务: ```java import org.omg.CORBA.ORB; import org.omg.CosNaming.NamingContextExt; import ...
**CORBA核心规范——一个简单的CORBA/Java示例** **一、CORBA基础** **CORBA(Common Object Request Broker Architecture)**,即公共对象请求代理架构,是一种跨平台、跨语言的分布式计算模型,旨在解决不同系统...
这个CORBA示例帮助我们理解了如何在Java中使用CORBA实现分布式对象通信。通过这样的实验,我们可以学习到CORBA的基本概念、组件以及它们在实际开发中的应用。理解并熟练掌握这些知识对于构建分布式系统和跨平台应用...
CORBA示例 使用Java的简单CORBA实现 指示 1.写入IDL文件 IDL文件定义客户端和服务器将用于通信和传递对象的接口。 编译IDL文件时,它将生成许多文件,称为存根和框架: 客户端使用存根与服务器进行通信 服务器使用...
这是一个简单的 CORBA 示例(没什么特别的)。 一般要求是: *) 创建一个生成随机矩阵并将其发送到服务器的客户端应用程序 *) 创建一个接收 2 个矩阵并将它们相乘的服务器(将结果发送给两个客户端) 为了运行该...
CORBA(Common Object Request Broker ...通过这个示例,开发者可以学习到如何在Python中使用OmniORB这样的ORB实现进行CORBA通信,并且能够处理和操作对象引用,这对于构建可扩展和高可用性的分布式应用程序至关重要。
- **定义示例:** 在`Bank.idl`文件中,定义了两个主要接口:`Account` 和 `AccountManager`。 - `Account` 接口定义了一个名为 `balance()` 的方法,该方法用于获取账户的当前余额。 - `AccountManager` 接口定义...
CORBA支持多种传输协议和编码格式,如IIOP(Internet Inter-ORB Protocol)和GIOP(General Inter-ORB Protocol),确保了跨网络和系统的互操作性。 当涉及到COM与CORBA的互用时,由于它们的设计理念和实现机制不同...
【描述】:这些源代码示例涵盖了多个使用CORBA(Common Object Request Broker Architecture)技术的程序,包括Java RMI(Remote Method Invocation)、Inprocess通信、简单的HELLO世界示例、基础的CORBA实现以及...
**CORBA命名服务编程实例C++(SSD8Exercise5)** **一、CORBA基础** CORBA(Common Object Request Broker Architecture,公共对象请求代理架构)是一种标准的分布式计算框架,它允许不同操作系统、网络环境下的对象...
通过以上步骤,您可以在 Windows 7 系统下完成 JacORB 的安装与配置,并成功创建并运行一个简单的 CORBA 示例程序。这不仅有助于加深对 JacORB 的理解,还能让您掌握如何在实际项目中运用这一技术。