您的位置:首页 > 编程语言 > Java开发

Java&CORBA编程实例2

2009-07-21 11:26 330 查看
Java&CORBA编程实例2
要熟练掌握CORBA也并不容易。本文再提供一个Java与CORBA编程的例子,以进一步加深对CORBA的认识。



一、编写IDL文件

counter.idl源码:

module CounterApp{
	interface Counter{
		readonly attribute long value;
		void inc();
		void dec();
	};
};




二、用idlj生成需要的文件

命令:idlj -fall counter.idl

生成的文件如下图所示:





三、编写服务器端文件

1)编写Server.java

Server.java源码:

package server;
import CounterApp.*;

import java.util.Properties;
import org.omg.CORBA.*;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import java.io.*;
import static java.lang.System.*;

public class Server {
	public static void main(String[] args){
		try{
			Properties props = getProperties();
			ORB orb = ORB.init(args, props);
			org.omg.CORBA.Object obj = null;
			POA rootPOA = null;
			try{
				obj = orb.resolve_initial_references("RootPOA");
				rootPOA = POAHelper.narrow(obj);
			}catch(org.omg.CORBA.ORBPackage.InvalidName e){
				
			}
			CounterImpl c_impl = new CounterImpl();
			Counter c = c_impl._this(orb);
			try{
				FileOutputStream file = new FileOutputStream("Counter.ref");
				PrintWriter writer = new PrintWriter(file);
				String ref = orb.object_to_string(c);
				writer.println(ref);
				writer.flush();
				file.close();
				out.println("Server started."+" Stop: Ctrl-c");
			}catch(IOException ex){
				out.println("File error: "+ex.getMessage());
				exit(2);
			}
			rootPOA.the_POAManager().activate();
			orb.run();
		}catch(Exception ex){
			out.println("Exception: "+ex.getMessage());
			exit(1);
		}
	}
}


2)编写CounterImpl.java

CounterImpl.java源码:

package server;
import CounterApp.*;

public class CounterImpl extends CounterPOA {
	private int count;
	public CounterImpl(){
		count = 0;
	}
	public void inc(){
		count++;
	}
	public void dec(){
		count--;
	}
	public int value(){
		return count;
	}
}




四、编写客户端文件

Client.java源码:

package client;
import CounterApp.*;

import java.util.*;
import java.io.*;
import org.omg.CORBA.*;
import static java.lang.System.*;
public class Client {
	public static void main(String[] args){
		try{
			Properties props = getProperties();
			ORB orb = ORB.init(args, props);
			String ref = null;
			org.omg.CORBA.Object obj = null;
			try{
				Scanner reader = new Scanner(new File("Counter.ref"));
				ref = reader.nextLine();
			}catch(IOException ex){
				out.println("File error: "+ex.getMessage());
				exit(2);
			}
			obj = orb.string_to_object(ref);
			if(obj == null){
				out.println("Invalid IOR");
				exit(4);
			}
			Counter c = null;
			try{
				c = CounterHelper.narrow(obj);
			}catch(BAD_PARAM ex){
				out.println("Narrowing failed");
				exit(3);
			}
			int inp = -1;
			do{
				out.print("Counter value: "+c.value()+"/nAction(+/-/e)?");
				out.flush();
				do{
					try{
						inp = in.read();
					}catch(IOException ioe){}
				}while(inp != '+' && inp != '-' && inp != 'e');
				if(inp == '+')
					c.inc();
				else if(inp == '-')
					c.dec();
			}while(inp != 'e');
		}catch(Exception ex){
			out.println("Exception: "+ex.getMessage());
			exit(1);
		}
	}
}




五、整个项目结构图

如图所示:





六、运行程序:

1)启动orbd
start orbd -ORBInitialPort 1050 -ORBInitialHost localhost



2)开始Server服务器
java server/Server -ORBInitialPort 1050 -ORBInitialHost localhost

注:如在同一台主机上运行,可省略-ORBInitialHost localhost

3)运行客户端应用程序
java client/Client -ORBInitialPort 1050 -ORBInitialHost localhost



七、运行结果截图:

服务器端截图:





客户端截图:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: