最近写毕业论文学习CORBA,看了几天的理论.今天在网上搜了个HelloCORBA的小程序,调试了一下,弄明白了一些概念和原理.人的记忆力是有限的,特开博将过程写下来.供以后参考.

写一个CORBA程序的步骤:

1.

编写IDL接口定义文件; 2.

将接口定义文件编译为相应高级语言源代码,产生服务器框架与客户端存根; 3.

基于服务器框架,编写服务对象实现程序;

4.

基于客户端存根,编写客户对象调用程序; 5.

分别编译客户对象和服务对象程序; 6.

运行服务对象和客户对象程序;

这个步骤网上COPY的,比较笼统.不过程序根据步骤一步一步来还是很好写的.

写一个Hello,CORBA的小程序

1. 编写IDL接口定义文件

文件名:Hello.idl

module HelloApp{

interface

Hello{

string sayHello(in string sayHello);

}

}

程序解释:定义一个模块

HelloApp,这个相当于JAVA里面的包.然后定义了一个接口Hello,该接口包含一个方法sayHello,用来显示Hello,CORBA

2.

将接口定义文件编译为相应高级语言源代码,产生服务器框架与客户端存根;Java IDL 即是CORBA 的一个实现,它是JDK1.3

或更高版本的核心软件包之一,定义在org.omg.CORBA及其子包中。我们利用JAVA提供的IDL编译工具对IDL文件进行编译.

idlj -oldImplBase -fall

Hello.idl

先解释一下参数的意思.-oldImplBase

表示生成与旧(1.4 版之前)JDK ORB 兼容的框架.-f

是定义要发出的绑定。-fall表示绑定所有.包括客户端和服务器端.

编译后会产生六个文件,文件的意义从别的网站COPY过来了

n

_HelloImplBase.java

该抽象类是一个服务器

skeleton,它可为服务器提供基本的 CORBA

功能。它实现 Hello.java 接口。服务器类 HelloServant

扩展 _HelloImplBase。

n _HelloStub.java

该类是客户机 stub,可为客户机提供 CORBA

功能。它实现 Hello.java 接口。

n Hello.java

该接口含有 IDL 接口的 Java 版本。Hello.java 接口扩展

org.omg.CORBA.Object 并提供标准的 CORBA 对象功能。

n HelloHelper.java

这是一个终态类,可以提供辅助功能,特别是提供将

CORBA 对象引用转换为适当类型所需的 narrow()

方法。

n HelloHolder.java

这是一个终态类,其中含有 Hello

类型的公有实例成员。它可为“out” 和 “inout”

变量提供操作。CORBA 有这些变量,但不容易映射为

Java 的语义。

n

HelloOperations.java

这是一个接口类,其中含有方法 sayHello()。

生成了相应的代码后,接下来对Hello接口进行实现,该类继承_HelloImplBase类.因为_HelloImplBase类是对HELLO接口的一个抽象的实现.新建一个HelloImpl.java文件,用来实现HELLO接口

HelloImpl.java

import HelloApp.*;

public class HelloImpl extends _HelloImplBase

{

HelloImpl()

{

super();

} public String sayHello(String message)

{

System.out.println("It's server,clint is invoking..");

System.out.println("Hello"+message);

return

message;

}

}

实现Hello接口后,接下来就是对服务器端和客户端分别编写相应的代码

3.

基于服务器框架,编写服务对象实现程序;

服务器端程序编写的步骤

1. 创建一个 ORB

实例 2. 创建一个HelloImpl实例(CORBA

Hello对象的实现)并通知 ORB 3. 获取一个命名上下文的 CORBA

对象引用,在该命名上下文中注册新 CORBA

对象 4.

在命名上下文中将新对象注册在“Hello”名下 5. 等待对新对象的调用

按此步骤写一个HelloServer.java的程序

HelloServer.java

import org.omg.CosNaming.*;

import org.omg.CORBA.*;

public class HelloServer

{

public static void main(String args[]){

try{

//初始化ORB

ORB

orb=ORB.init(args,null);

System.out.println("ORB initial...");

//创建一个实例,并向ORB注册

HelloImpl

helloImpl = new HelloImpl();

orb.connect(helloImpl);

System.out.println("将实例注册到ORB");

//获取一个命名上下文

org.omg.CORBA.Object obRef =

orb.resolve_initial_references("NameService");

NamingContext ncRef = NamingContextHelper.narrow(obRef);

//绑定命名中的对象引用

NameComponent nc = new NameComponent("Hello","");

NameComponent path[] = { nc };

ncRef.rebind(path, helloImpl);

//等待客户机的调用

java.lang.Object sync = new java.lang.Object();

synchronized (sync) {

sync.wait();

}

System.out.println("等待CORBA客户端调用...");

} catch (Exception e) {

System.err.println("错误: " + e);

e.printStackTrace(System.out);

}

}

}

4.

基于客户端存根,编写客户对象调用程序;

HelloClient.java

//· 创建一个 ORB

//· 获取一个指向命名上下文的引用

//· 在命名上下文中查找 "Hello" 并获得指向该 CORBA

对象的引用

//· 调用对象的 sayHello() 操作并打印结果

import org.omg.CosNaming.*;

import org.omg.CORBA.*;

import HelloApp.*;

public class HelloClient

{

public static void main(String args[]){

try{

ORB orb =

ORB.init(args,null);

System.out.println("ORB

initial...");

//获取一个命名上下文

org.omg.CORBA.Object obRef =

orb.resolve_initial_references("NameService");

NamingContext ncRef = NamingContextHelper.narrow(obRef);

NameComponent nc = new NameComponent("Hello", "");

NameComponent path[] = { nc };

Hello h = HelloHelper.narrow(ncRef.resolve(path));

System.out.println("我在客户端,开始调用CORBA服务器端的'sayHello'方法");

System.out.println("欢迎, " + h.sayHello("javamxj blog"));

}catch

(Exception e) {

System.out.println("错误 : " + e);

e.printStackTrace(System.out);

}

}

}

5.

分别编译客户对象和服务对象程序;

程序写好后,接下来就是对程序的编译了,先做如下的准备工作.将上面编写的四个文件复制到一个新文件夹,如d:/HelloCorba

编译Hello.idl

D:\HelloCorba>idlj -oldImplBase -fall

Hello.idl

这会生成一个HelloApp的目录

再对所有的JAVA文件进行编译

D:\HelloCorba>javac *.java

HelloApp/*.java

编译中如果有问题,那代表程序中有些地方不正确,根据相应提示修改一下就可以了

接下来就可以运行程序了.为了看执行效果,将服务器端和客户端代码分开

新建一个SERVER的文件夹,再建一个CLIENT的文件夹用来表示服务器和客户.

分别在Client和Server目录下建立HelloApp子目录,将D:\CorbaSample\HelloApp目录中的 _HelloStub.class

Hello.class

HelloHelper.class

HelloHolder.class

HelloOperations.class

复制到D:\CorbaSample\Client\HelloApp目录下,再将D:\CorbaSample目录中的HelloClient.class复制到D:\CorbaSample\Client目录下。

将D:\CorbaSample\HelloApp目录中的

_HelloImplBase.class

Hello.class

HelloOperations.class

复制到D:\CorbaSample\Server\HelloApp目录下,再将D:\CorbaSample目录中的HelloServer.class和

HelloImpl.class 复制到D:\CorbaSample\Server目录中

确保名字服务器处于运行状态:

D:\HelloCorba\Server>tnameserv -ORBInitialPort 1050

· 启动 Hello 服务器:

D:\HelloCorba\Server>java HelloServer -ORBInitialPort

1050

· CORBA客户端调用CORBA服务:

D:\HelloCorba\Client>java HelloClient -ORBInitialPort

1050

这样程序就可以运行了

如果调试过程中有什么问题,可以留言给我

java corba_Java编写CORBA的一个简单例子(CORBA入门)相关推荐

  1. java hashtable import,Hashtable的一个简单例子

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 以下是关于Hashtable的简单例子,谁知道别的遍历Hashtable的方法,请回复! package no1; import java.util.En ...

  2. 一个简单的CORBA例子

    因为对CORBA分析的需要,这里写一个简单的CORBA例子.从JDK1.2开始,JDK中集成了ORB的实现,本例子使用了JDK1.7,对于JDK1.2+应该都没有问题.这个例子实现一个简单的加减乘除的 ...

  3. 一个简单例子:贫血模型or领域模型

    转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...

  4. 一个简单的iBatis入门例子

    一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. ibatis-2.3.4.726.jar ojdbc14.jar 2.创建类com/ ...

  5. SAP MM采购定价过程的一个简单例子

    SAP MM采购定价过程的一个简单例子 本文以一个简单的例子阐述了SAP MM模块中采购定价的基本原理.本例中,假定采购订单里输入的是含税采购价,然后系统自动计算出物料最终的采购价格(含税价-税额=采 ...

  6. 将Java程序变成可执行文件的一个简单方法

    将Java程序变成可执行文件的一个简单方法 运行Java程序(SWING或SWT的桌面程序)可以直接执行.class文件或将所有的.class文件及相关的其他文件压缩成.jar文件,然后使用javaw ...

  7. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  8. KaTex的一个简单例子

    在网页中可以用KaTex显示数学公式,KaTex官网是https://katex.org 以下是KaTex的一个简单例子: 下载https://github.com/KaTeX/KaTeX/archi ...

  9. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

最新文章

  1. 人工智能写散文之错位时空
  2. 诺顿360“偷偷”挖矿被怒喷,杀毒软件手伸向GPU,官方:都是为了用户好
  3. Android监视返回键
  4. centos打显卡驱动命令_CentOS7显卡驱动问题
  5. 读《白帽子讲Web安全》之安全意识篇(一)
  6. [NOI2007]货币兑换
  7. 双击IE出现打开方式解决办法
  8. 人机交互式编程_并发编程从操作系统底层工作整体认识开始
  9. java转码工具应用程序_java转码工具native2ascii.exe的使用方法
  10. 【考研日记1】:看到2016年数学考的如此之难后
  11. pdf打开错误之读取本文档时出现问题(14)
  12. ubuntu QT Creator Fatal IO error 2 (没有那个文件或目录) on X server :0
  13. 利用阿里云ECS搭建微信公众平台服务器
  14. UE4 射击类游戏 手机端视角随触摸改变方法
  15. 小学生四则运算考试系统Java
  16. C语言基础——C语言概述——语句和每行代码的含义
  17. 示波器的使用及其原理
  18. 首家优秀型厂商,百度智能云智能对话通过信通院权威评测!
  19. 百度飞桨PaddelePaddle-21天零基础实践深度学习-【手写数字任务】2
  20. R语言使用sd函数计算向量数据的标准差

热门文章

  1. python使用curve_fit拟合任意分布
  2. Linux配置jdk
  3. 解决新安装的Ubuntu18.04没有网络连接的问题
  4. python监控程序执行_python如何监控PostgreSQL代码运行
  5. SQL*Plus 系统变量之53 - TERM[OUT]
  6. 【AMAD】django-activity-stream
  7. 百度编辑器的初步使用
  8. JAVA中集合输出的四种方式
  9. java模式之观察者模式
  10. 解题报告 Toy Bricks