JAVA开发CORBA(学习笔记)

一、CORBA介绍

CORBA的具体概念就不介绍了,CORBA的主要作用如下:

1、支持多种编程语言,可用于不通语言之间的调用

2、远程分布式调用,结合前一点就可以实现多语言之间分布式计算


二、开发步骤

 一般使用CORBA开发有以下几个步骤:

1、编写IDL文件,IDL,Interface Description Language,即接口描述语言(特有的一套语法),定义远程调用的接口并将其写成IDL文件。

2、将IDL文件生成服务端程序所使用编程语言的代码,在生成的代码基础上实现所提供接口的具体实现。在服务端注册提供的接口实现,并启动服务监听。

3、将IDL文件生成客户端程序所使用编程语言的代码,基于生成的代码和CORBA的API调用接口,CORBA将远程调用服务端的接口实现,并可以将调用结果返回给客户端程序。


三、示例

以下基于JAVA写一个简单的CORBA示例。

1、定义idl文件

创建一个hello.idl文件,内容如下:

module HelloApp
{
   interface Hello
   {
      string sayHello();
   };
};

2、生成骨架文件

在hello.idl所在目录,运行以下命令

idlj–fall hello.idl

将在同目录中生成一个HelloApp文件夹

idlj.exe是jdk中提供的文件,在%JAVA_HOME%\bin中


3、实现服务端

将HelloApp文件夹放入服务端工程中。

3.1、实现sayHello方法

创建服务端实现类HelloImpl.java,实现sayHello方法。

public class HelloImpl extends HelloPOA{
	@Override
	public String sayHello() {
		return "Hello World";
	}
}

3.2、编写服务端监听代码

HelloServer.java

public class HelloServer {
	//启动ORB以及等待远程客户机的调用的代码
	public static void main(String[] args) {
		try{
			args = new String[2];
			args[0] = "-ORBInitialPort";
			args[1] = "1050";
			
			// 创建一个ORB实例
			ORB orb = ORB.init(args, null);
			// 得到一个RootPOA的引用,并激活POAManager
			org.omg.CORBA.Object obj = orb.resolve_initial_references("RootPOA");
			POA rootpoa = POAHelper.narrow(obj);
			rootpoa.the_POAManager().activate();
			// 创建一个HelloImpl实例
			HelloImpl helloImpl = new HelloImpl();
			// 从服务中得到对象的引用
			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");
			NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
			// 在命名上下文中绑定这个对象
			String name = "Hello";
			NameComponent path[] = ncRef.to_name(name);
			ncRef.rebind(path, href);
			// 启动线程服务,等待客户端调用
			orb.run();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

4、实现客户端

同样,将HelloApp文件夹放入客户端工程中(为了测试方便,客户端和服务端都写在同一个工程中了)。

创建HelloClient.java,编写客户端调用的代码。

public class HelloClient {
	public static void main(String[] args) {
		Hello helloImpl = null;
		String args[] = new String[4];
		args[0] = "-ORBInitialHost";
		args[1] = "127.0.0.1";
		args[2] = "-ORBInitialPort";
		args[3] = "1050";
		try{
			// 创建一个ORB实例
			ORB orb = ORB.init(args, null);
			// 获取根名称上下文
			org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
			NamingContextExt neRef = NamingContextExtHelper.narrow(objRef);
			String name = "Hello";	//与服务端的名称对应
			helloImpl = HelloHelper.narrow(neRef.resolve_str(name));
		}catch(Exception e){
			e.printStackTrace();
		}
		String str = helloImpl.sayHello();
		System.out.println(str);
	}	
}

5、启动服务端

5.1在服务端运行以下命令,启动orbd服务

orbd-ORBInitialPort 1050 -ORBInitialHost 127.0.0.1

JAVA开发CORBA(学习笔记)

其中参数与HelloServer中的对应

orbd.exe也是jdk中的

5.2运行HelloServer中的main方法


6、运行客户端

运行客户端HelloClient中的main方法进行调用测试

运行输出结果:

Hello World

JAVA开发CORBA(学习笔记),布布扣,bubuko.com

JAVA开发CORBA(学习笔记)

上一篇:java死锁的例子


下一篇:Java多线程-(8)线程同步、锁、死锁