一个关于ice中间件客户端调用服务器的小例子java语言

  前几天熟悉项目时,看到项目要用到ice因此就写了一个ice版本的helloworld程序看似简单但是还是耗费了不少的经历.
  首先第一点要确认你的机器上面已经安装了ice 我安装的是ice3.4.2 建立一个名为slice的文件夹最好用集成开发环境比如myeclipse
设置好你的环境变量ICE_HOME 设置为你的ice的安装目录比如我的是C:\Program Files (x86)\ZeroC\Ice-3.4.2
刚才说到建立一个slice的文件夹里面建立一个Printer.ice的文件
这个Printer.ice文件里面定义了一个接口里面定义了一个add方法和一个printString的方法
  interface{
      void printString(String s);
      void add(int a ,int b);
}

然后进行对这个ice文件的编译我用的是java ice应用
首先进入你的电脑的slice文件的那个地方比如我的就是D:\Workspaces\hlw\TestIce\slice
然后打开命令行执行mkdir aaa 这句话的意思是建立一个名为aaa的文件夹 然后输入slice2java --output-dir aaa Printer.ice这样就会在aaa文件夹下出现很多java源文件
然后我们就可以正式进行客户端调用服务端的开发了
首先我们把刚刚ice自己生成的java文件用集成开发环境装入一个包中我用的是myeclipse
比如com.sjy
然后建立一个名为PrinterI.java的类当然名字可以随便取
    import Ice.Current;

import com.energyfuture._PrinterDisp;

public class PrinterI extends _PrinterDisp {

	public void add(int a, int b, Current current) {
		System.out.println(a + b);
	}

	public void printString(String s, Current current) {
		System.out.println(s);
	}

}

这里注意_PrinterDisp这个类是ice自己生成的
然后是Server.java
 public class Server {
	public static void main(String[] args) {
		int status = 0;
		Ice.Communicator ic = null;
		
		try {
			ic = Ice.Util.initialize(args);
			Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter","default -p 10000");
			Ice.Object object = new PrinterI();
			adapter.add(object, Ice.Util.stringToIdentity("SimplePrinter"));
			adapter.activate();
			ic.waitForShutdown();
		} catch (Ice.LocalException e) {
			e.printStackTrace();
			status = 1;
		}catch (Exception e){
			System.err.println(e.getMessage());
		}finally{
			if(ic != null){
				ic.destroy();
			}
		}
		System.exit(status);
	}
}


然后是client端
  public class Client {
	public static void main(String[] args) {
		int status = 0;
		Ice.Communicator ic = null;
		
		try {
			ic = Ice.Util.initialize(args);
			Ice.ObjectPrx base = ic.stringToProxy("SimplePrinter:default -p 10000");
			PrinterPrx printer = PrinterPrxHelper.checkedCast(base);
			if(printer == null){
				System.err.println("Ivalid proxy");
			}
			printer.add(1, 2);
			printer.printString("Hello World");
		} catch (Ice.LocalException e) {
			status = 1;
			e.printStackTrace();
		}catch (Exception e) {
			status = 1;
			System.err.print(e.getMessage());
		}finally{
			if(ic != null){
				ic.destroy();
			}
		}
		System.exit(status);
	}
	
}


运行的时候直接run as java application注意先起server在起client而且一定要等到server端完全起起来再起client端
好了至此一个简单的ice客户端调用服务器端的小例子已经做好了.
再复杂的技术也是要先从helloworld写起嘛

猜你喜欢

转载自rlox.iteye.com/blog/2021669