CORBA通过IOR文件远程获取实现类

之前的那篇文章是通过命名服务来获得server端的实现类的,在CORBA中还有一种方式,是通过ior文件来获取实现类对象的。ior文件就是将server端的实现类转换成一个字符串存到后缀名为ior的文件中,在client端通过读取这个文件中的字符串来获得实现类的对象。

这里只贴出server和client的代码,其余代码和之前的HelloWorld大同小异。

server:

package test;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import org.omg.CORBA.ORB;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.POAManagerPackage.AdapterInactive;

public class Server {
	public static void main(String[] args) throws InvalidName, AdapterInactive, IOException {
		
		//创建一个ORB实例
		ORB orb = ORB.init(args, null);
		//拿到RootPOA的引用
		POA root = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));//get root POA 
		
		/*
		 * CorbaD:idlj自动创建的标识接口
		 * CorbaDPOA:idlj自动创建的server端的实现类
		 * DemoImpl:继承自CorbaDPOA
		 * 
		 */
		//创建实现类的实例
		DemoImpl imp = new DemoImpl();
		//调用DemoImpl的父类CorbaDPOA方法_this,获得目标对象的引用
		CorbaD obj = imp._this(orb);
		
		//创建ior文件
		File file = new File("my.ior");
		file.createNewFile();
		PrintWriter writer = new PrintWriter(new FileWriter(file));
		//具体实现转化成字符串写入ior文件
		writer.println(orb.object_to_string(obj));
		writer.close();
		
		//激活 POA,使客户机请求开始排队,并强制服务器输入其事件循环,以接收这些传入的请求
		root.the_POAManager().activate();
		System.out.println("server start...");
		orb.run();
	}
}
client:
package test;

import org.omg.CORBA.ORB;

public class Client {
	public static void main(String[] args) {
		
		//创建一个ORB实例
		ORB orb = ORB.init(args,null);
		//通过idlj自动生成的帮助类CorbaDHelper,
		//传入server实现类的的字符串(在这里直接把字符串粘贴进来了,没有再读取ior文件),从而拿到实现类
		CorbaD obj = CorbaDHelper.narrow(orb.string_to_object("IOR:000000000000001449444c3a746573742f436f726261443a312e3000000000010000000000000086000102000000000d31302e3233372e38392e31310000f2f700000031afabcb000000002057d497fe00000001000000000000000100000008526f6f74504f410000000008000000010000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002"));
		System.out.println(obj.getTime());
	}
}
在CorbaDHelper传入的字符串就是server端生成的ior文件中的内容,ior中记录了server端的所有信息(IP、port),所以在做例子的时候不要直接粘贴上面ior的代码,ior文件需要自己重新生成。

先启动server后,在启动client,即可执行成功。

你可能感兴趣的:(corba)