ICE 2.0学习笔记1(HelloWorld)

类别:Java 点击:0 评论:0 推荐:

Hello.ice #ifndef SIMPLE_ICE
#define SIMPLE_ICE
//名字空间 or 包名
module demo.slice.Hello
{
 interface Hello{
  void printString(string s);
 };
};

#endif

服务器:
 HelloI.java

package demo.ice.Hello.server;

import demo.slice.Hello._HelloDisp;
import Ice.Current;

/**
 * @author MudfishCN
 *
 * servant class: HelloI
 * _HelloDisp 基类由slice2java编译器生成,它是一个抽象类。
 * _HelloDisp 抽象类包含一个printString()方法。
 */
public class HelloI extends _HelloDisp {

    /* (non-Javadoc)
     * @see demo._HelloOperations#printString(java.lang.String, Ice.Current)
     */
    public void printString(String s, Current __current) {
        // TODO Auto-generated method stub
        System.out.println(s);
    }

}

HelloServer.java

 package demo.ice.Hello.server;

import Ice.LocalException;

/**
 * @author  MudfishCN
 * version: 1.0.1
 */
public class HelloServer {
    public static void main(String[] args) {
        // 定义status变量,用来控制服务器.
        int status = 0;
        Ice.Communicator ic = null; //声明一个Communicator 对象ic
        try {
            // 初始化Ice运行时
            ic = Ice.Util.initialize(args);
            /*
             * 创建一个对象适配器(ObjectAdapter)对象IOAdapter,并初始化之。
             * 参数"HelloWorldAdapter":表示适配器的名字。
             * 参数"default -p 10000":表示适配器使用缺省协议(TCP/IP)在端口10000处监听到来的请求。
             * 服务器配置完成.
             */
            Ice.ObjectAdapter IOAdapter = ic.createObjectAdapterWithEndpoints(
                    "HelloWorldAdapter", "default -p 10000");

            /*
             * 为Hello接口创建一个servant.
             */
            Ice.Object IObject = (Ice.Object) new HelloI();
           
            /*
             * 将新的servant添加到适配器,
             * 并将这个新的servant命名为"HelloWorld"
             */
            IOAdapter.add(IObject, Ice.Util.stringToIdentity("HelloWorld"));
           
            /*
             * 激活适配器,以使服务器开始处理来自客户的请求
             */
            IOAdapter.activate();

            /*
             * 挂起发出调用的线程,直到服务器实现终止为止.
             * 或者是通过发出一个调用关闭运行时(run time)的指令来使服务器终止.
             */
            ic.waitForShutdown();
        } catch (LocalException e) {
            // 捕捉ICE运行时可能抛出的所有异常
            e.printStackTrace();
            status = 1;
        } catch (Exception e) {
            // 捕捉串常量
            e.printStackTrace();
            status = 1;
        } finally {
            if (ic != null) {
                ic.destroy();
            }
        }
        System.exit(status);
    }
}

HelloClient.java

package demo.ice.Hello.client;

import Ice.ObjectPrx;
import Ice.Util;
import demo.slice.Hello.HelloPrx;
import demo.slice.Hello.HelloPrxHelper;

/**
 * @author MudfishCN 
 */
public class HelloClient {
    public static void main(String[] args) {
        int status = 0;
        String s;
        //创建一个通信器的对象ic
        Ice.Communicator ic = null;
        try {
            // 初始化ICE运行时
            ic = Util.initialize(args);
           
            /*
             * 获取远程对象的代理
             * 创建一个代理对象,并用通信器的stringToProxy()方法初始化之。
             * 参数:"HelloWorld:default -p 10000"
             * 表示:
             */
            ObjectPrx base = ic.stringToProxy("HelloWorld:default -p 10000");
            /*
             * 关键点
             */
            HelloPrx hello = HelloPrxHelper.checkedCast(base);
            //测试向下转换是否成功。如果不成功抛出异常信息"Invalid proxy".
            if (hello == null) {
                throw new Error("Invalid proxy");
            }
            //向服务器发送十条消息
            for(int i=1;i<=10;i++){
                s = "Hello,world!"+Integer.toString(i);
                hello.printString(s);
            }          
        } catch (Ice.LocalException e) {
            e.printStackTrace();
            status = 1;
        } catch (Exception e) {
            e.printStackTrace();
            status = 1;
        } finally {
            if (ic != null) {
                //销毁通信连接
                ic.destroy();
            }
        }
        System.exit(status);
    }
}


本文地址:http://com.8s8s.com/it/it10207.htm