java corba_Java Corba
1)首先要熟悉idl语言,这个是专门进行接口设计的语言,它与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的奥秘了。From: http://www.javaeye.com/topic/136691
java corba_Java Corba相关推荐
- java corba_JAVA版CORBA程序
1.题目分析 题目1.Java版CORBA程序1--HelloWorld 编写实现显示"Hello,World!+班级+中文姓名"字符串. 题目2.JAVA版CORBA程序2--C ...
- java实现CORBA
1. 利用CORBA实现数据的访问,也就是通过客户端的代码,访问服务器端的代码.首先是定义一个idl文件,里面的主要类型就是定义一个接口,类容如下: 2. 然后利用idlj –fa ...
- Java与CORBA技术结合的前景展望
随着Internet.Intranet及Extranet在全球范围内的普及和发展,下一代的Web必须能够处理企业-企业(business-to- business)交易和客户-企业(consumer- ...
- java corba_Java编写CORBA的一个简单例子(CORBA入门)
最近写毕业论文学习CORBA,看了几天的理论.今天在网上搜了个HelloCORBA的小程序,调试了一下,弄明白了一些概念和原理.人的记忆力是有限的,特开博将过程写下来.供以后参考. 写一个CORBA程 ...
- java corba_Java基础系列之六:CORBA入门示例
1.概述 CORBA: Common Object Request Broker Architecture. CORBA是一套标准,包含了相关的API以及通信协议的定义,开发者据此可以实现一种与Web ...
- java有any类型吗_Java开发网 - 一个关于CORBA中any类型的问题
Posted by:an350901450 Posted on:2008-12-30 14:44 请教一个问题 我的IDL文件: module anyM{ interface anyI{ any pr ...
- CORBA 简单了解和JAVA与C++互操以及C++调用Java web service
CORBA了解 CORBA(Common Object Request Broker Architecture, 公共对象请求代理体系结构)是由OMG(对象管理组织,Object Management ...
- java cobra_java实现CORBA
1. 利用CORBA实现数据的访问,也就是通过客户端的代码,访问服务器端的代码.首先是定义一个idl文件,里面的主要类型就是定义一个接口,类容如下: 2. 然后利用idlj –fa ...
- Java EE学习心得
–Java EE学习心得 1. 称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...
最新文章
- java try catch_异常处理,JAVA中异常处理的介绍
- 与vnpy相关的有用博客网址
- nginx用户权限问题
- linux 写脚本登录ftp,Linux使用Shell脚本实现ftp的自动上传下载-Go语言中文社区
- pycharm里怎么关闭一个项目_【周末分享】一个完整的项目复盘到底要怎么做?...
- 霍金一生重要时刻照片合集,3次来中国,年轻时也是帅哥一枚
- vue slot scope使用_20、slot插槽的用法
- zabbix4监控mysql_Zabbix4监控Mysql5.7
- 哈夫曼树编码和译码c语言,C++哈夫曼树编码和译码的实现
- c++string类的相关操作
- python3d绘图代码_python机器学习之3D Matplotlib绘图
- Linux 编译安装 openssl库
- 三农数据(1990-2020)七:农村居民家庭生产现金支出、农村固定资产构成、固定资产投向
- zabbix 清理历史数据
- css渐变背景色与切角
- IOS7.1.2越狱手工美化(字体,状态栏等资源) CSDN
- Js常用40个页面效果
- JavaWeb下载文件时文件名乱码
- winform设置默认打印机
- win10加装机械硬盘卡_win10重装,机械硬盘和SSD的C盘如何分区?记住这2点电脑10年不卡...
热门文章
- 三维点云体素滤波python_一种基于点云的Voxel(三维体素)特征的深度学习方法...
- 光遇服务器维修补偿,光遇服务器连崩2天上热搜,官方大方补偿:跑图能拿56根蜡烛!...
- 《品味大数据》的“魔力”
- url参数值中有+、空格、%20、%2b
- 全排列算法C++实现
- Windows WSUS更新服务
- 谷歌浏览器添加React Developer Tools和 Redux DevTools
- nacos事件监控,监听配置变化
- Java 分页读取文件,从第N行开始读取!
- .NET Core(C#) 反射类的属性(PropertyInfo)、字段(FieldInfo)和方法(MethodInfo)相关操作扩展方法工具类