CORBA版HelloWorld
2015-12-14 00:00
211 查看
注:文章转自:
http://lavasoft.blog.51cto.com/62575/240268/
一、定义IDL
module HelloApp{
interface Hello{
string sayHello();
oneway
void shutdown();
};
};
没有IDL的专门的开发工具,写起来容易出错,而且不美观,IDEA勉强支持语法高亮,但不支持格式化和语法校验!
二、从IDL生成存根
进入IDL文件存放目录,然后执行:idlj -fall Hello.idl
会生成一批Java文件:
helloCorba\src\HelloApp
HelloPOA.java
_HelloStub.java
HelloHolder.java
HelloHelper.java
Hello.java
HelloOperations.java
三、实现IDL接口,开发服务端程序
import HelloApp.Hello;
import HelloApp.HelloHelper;
import HelloApp.HelloPOA;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
class HelloImpl
extends HelloPOA {
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);
}
}
public
class HelloServer {
public
static
void main(String args[]) {
try {
//创建一个ORB实例
ORB orb = ORB.init(args,
null);
//得到一个RootPOA的引用,并激活POAManager
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references(
"RootPOA"));
rootpoa.the_POAManager().activate();
// create servant and register it with the ORB
//创建一个HelloImpl实例(servant),并注册到ORB上
HelloImpl helloImpl =
new HelloImpl();
helloImpl.setORB(orb);
//从服务中得到对象的引用
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);
Hello href = HelloHelper.narrow(ref);
//得到一个根名称的上下文
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);
//在命名上下文中绑定这个对象
String name =
"Hello";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);
System.out.println(
"HelloServer ready and waiting ...");
//启动线程服务,等待客户端的调用
orb.run();
}
catch (Exception e) {
System.err.println(
"ERROR: " + e);
e.printStackTrace(System.out);
}
System.out.println(
"HelloServer Exiting ...");
}
}
四、实现CORBA的客户端
import HelloApp.Hello;
import HelloApp.HelloHelper;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
public
class HelloClient {
static Hello helloImpl;
public
static
void main(String args[]) {
try {
//创建一个ORB实例
ORB orb = ORB.init(args,
null);
//获取根名称上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references(
"NameService");
// Use NamingContextExt instead of NamingContext. This is
// part of the Interoperable naming Service.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
//从命名上下文中获取接口实现对象
String name =
"Hello";
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);
}
}
}
五、运行
1)运行CORBA服务
orbd -ORBInitialPort 1050 -ORBInitialHost 192.168.14.117
2)运行CORBA应用的服务端
java HelloServer -ORBInitialPort 1050
输出:
HelloServer ready and waiting ...
HelloServer Exiting ...
3)运行CORBA应用的客户端
java HelloClient -ORBInitialHost 192.168.14.117 -ORBInitialPort 1050
Obtained a handle on server object: IOR:000000000000001749444c3a48656c6c6f4170702f48656c6c6f3a312e30000000000001000000000000008a000102000000000f3139322e3136382e31342e313137000006db000000000031afabcb00000000206d3bb80000000001000000000000000100000008526f6f74504f410000000008000000010000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002
Hello world !!
其中,<选项> 包括:
-port 启动 ORBD 的激活端口,缺省值为 1049 (可选)
-defaultdb ORBD 文件的目录,缺省值为 "./orb.db" (可选)
-serverid ORBD 的服务器标识符,缺省值为 1 (可选)
-ORBInitialPort 初始端口(必需)
-ORBInitialHost 初始主机名称(必需)
http://lavasoft.blog.51cto.com/62575/240268/
一、定义IDL
module HelloApp{
interface Hello{
string sayHello();
oneway
void shutdown();
};
};
没有IDL的专门的开发工具,写起来容易出错,而且不美观,IDEA勉强支持语法高亮,但不支持格式化和语法校验!
二、从IDL生成存根
进入IDL文件存放目录,然后执行:idlj -fall Hello.idl
会生成一批Java文件:
helloCorba\src\HelloApp
HelloPOA.java
_HelloStub.java
HelloHolder.java
HelloHelper.java
Hello.java
HelloOperations.java
三、实现IDL接口,开发服务端程序
import HelloApp.Hello;
import HelloApp.HelloHelper;
import HelloApp.HelloPOA;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
class HelloImpl
extends HelloPOA {
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);
}
}
public
class HelloServer {
public
static
void main(String args[]) {
try {
//创建一个ORB实例
ORB orb = ORB.init(args,
null);
//得到一个RootPOA的引用,并激活POAManager
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references(
"RootPOA"));
rootpoa.the_POAManager().activate();
// create servant and register it with the ORB
//创建一个HelloImpl实例(servant),并注册到ORB上
HelloImpl helloImpl =
new HelloImpl();
helloImpl.setORB(orb);
//从服务中得到对象的引用
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);
Hello href = HelloHelper.narrow(ref);
//得到一个根名称的上下文
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);
//在命名上下文中绑定这个对象
String name =
"Hello";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);
System.out.println(
"HelloServer ready and waiting ...");
//启动线程服务,等待客户端的调用
orb.run();
}
catch (Exception e) {
System.err.println(
"ERROR: " + e);
e.printStackTrace(System.out);
}
System.out.println(
"HelloServer Exiting ...");
}
}
四、实现CORBA的客户端
import HelloApp.Hello;
import HelloApp.HelloHelper;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
public
class HelloClient {
static Hello helloImpl;
public
static
void main(String args[]) {
try {
//创建一个ORB实例
ORB orb = ORB.init(args,
null);
//获取根名称上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references(
"NameService");
// Use NamingContextExt instead of NamingContext. This is
// part of the Interoperable naming Service.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
//从命名上下文中获取接口实现对象
String name =
"Hello";
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);
}
}
}
五、运行
1)运行CORBA服务
orbd -ORBInitialPort 1050 -ORBInitialHost 192.168.14.117
2)运行CORBA应用的服务端
java HelloServer -ORBInitialPort 1050
输出:
HelloServer ready and waiting ...
HelloServer Exiting ...
3)运行CORBA应用的客户端
java HelloClient -ORBInitialHost 192.168.14.117 -ORBInitialPort 1050
Obtained a handle on server object: IOR:000000000000001749444c3a48656c6c6f4170702f48656c6c6f3a312e30000000000001000000000000008a000102000000000f3139322e3136382e31342e313137000006db000000000031afabcb00000000206d3bb80000000001000000000000000100000008526f6f74504f410000000008000000010000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002
Hello world !!
orbd.exe
用法:orbd <选项>其中,<选项> 包括:
-port 启动 ORBD 的激活端口,缺省值为 1049 (可选)
-defaultdb ORBD 文件的目录,缺省值为 "./orb.db" (可选)
-serverid ORBD 的服务器标识符,缺省值为 1 (可选)
-ORBInitialPort 初始端口(必需)
-ORBInitialHost 初始主机名称(必需)
相关文章推荐
- PDF 解密
- SP2-0042:未知的命令开头'imp;ora-08002;
- android定位服务:查看位置源及其属性
- 使用JQuery UI插件以拖动的方式管理图片8-9
- Merge into 详细介绍
- tcp/ip协议中消息传输对帧消息的操作
- @SuppressWarnings(unchecked)作用解释文档
- HTTP请求模型和头信息
- JavaScript 函数
- sun.misc.Launcher 找不到jar包?
- JSP中的文件操作(文件流)
- android下载插件
- JS中文转换(UTF-8),url传递中文乱码解决
- android TabHost选项卡示例
- jQuery HTML 操作
- JAVA读写文件,避免中文乱码
- 利用RMI技术开发聊天案例(尚有疑问,待解决!!!)
- $.tree 的简单使用
- udp 传输,可解决中文不能正确传输,乱码问题
- Spring+Quartz实现定时任务的配置方法