Java-ICE入门教程(2-2:Java实例)

2 篇文章 0 订阅
1.安装ICE
需要配置环境变量:
classPath添加:
%ICE_HOME%/lib/db.jar;%ICE_HOME%/lib/Ice.jar  
path添加:%ICE_HOME%/bin;

cmd命令: slice2java  出现如下画面表示安装成功:
.


3.手写ICE文件,注意后缀名为 .ice:
 message.ice,文件内容如下:

module  message
{
        interface messageDemo{//接口类
            int maxNum(int a,int b);//接口方法,参数和返回值为int
            };
};

4.生成 JAVA文件:
cmd:slice2java  message.ice




5.接下来要写接口实现类,需要继承这么一个类:_XXXXXXXXDisp:
package ice.message.impl;
import Ice.Current; 
import message._messageDemoDisp;
public class MessageI extends _messageDemoDisp {
 @Override
 public int maxNum(int a, int b, Current __current) {
  // TODO Auto-generated method stub
 
  if(a>b)
   return a;
  else if(a<b)
   return b;
  else {
   System.out.println("妹的,他俩居然一样大!!!");
   return 0;
  }
 }

}


6.服务端代码:


package ice.message.server;
import ice.message.impl.MessageI;
import com.bean.PrinterI;
public class IceInit {
 public static void init()
 {
   int status = 0;  
         Ice.Communicator ic = null;  
         try {  
             //初使化连接,args可以传一些初使化参数,如连接超时时间,初使化客户连接池的数量等  
             ic = Ice.Util.initialize();  
             //创建名为meaaageDemoAdapter的适配器,并要求适配器使用缺省的协议(TCP/IP侦听端口为10000的请求)  
             Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("meaaageDemoAdapter", "default -h 10.0.67.106 -p 10000");  
             //实例化一个MessageI对象,为Message接口创建一个服务对象  
             Ice.Object object = new MessageI();  
             //将服务单元增加到适配器中,并给服务对象指定名称为meaaageDemo,该名称用于唯一确定一个服务单元  
             adapter.add(object, Ice.Util.stringToIdentity("meaaageDemo"));  
             //激活适配器,这样做的好处是可以等到所有资源就位后再触发  
             adapter.activate();  
              System.out.println("已启动 meaaageDemoAdapter  default -h 10.0.67.106 -p 10000");
             //让服务在退出之前,一直持续对请求的监听  
             ic.waitForShutdown();  
         } catch (Ice.LocalException e) {  
             e.printStackTrace();  
             status = 1;  
         } catch (Exception e) {  
             System.err.println(e.getMessage());  
             status = 1;  
         }  
         if (ic != null) {  
             // Clean up  
             //  
             try {  
                 ic.destroy();  
             } catch (Exception e) {  
                 System.err.println(e.getMessage());  
                 status = 1;  
             }  
         }  
         System.exit(status);  
 }
 
}


7:客户端调用代码:

package ice.message.client;
import java.lang.reflect.Method;
public class IceClient {
 public int  maxNum(int a,int b)
 {
    int status = 0;  
    int resultNum = 0;
         Ice.Communicator ic = null;  
         try {  
             //初使化  
             ic = Ice.Util.initialize();  
             //传入远程服务单元的名称、网络协议、IP及端口,获取Printer的远程代理,这里使用的stringToProxy方式  
             Ice.ObjectPrx objectPrx = ic.stringToProxy("meaaageDemo:default -h 10.0.67.106  -p 10000");  
             //通过checkedCast向下转换,获取Printer接口的远程,并同时检测根据传入的名称获取的服务单元是否Printer的代理接口,如      果不是则返回null对象        
             Method method = objectPrx.getClass().getMethod("maxNum",   new Class[] {Integer.class,Integer.class}); 
         
             resultNum= (Integer) method.invoke(objectPrx, new Object[] {a,b});
           
         } catch (Ice.LocalException e) {  
             e.printStackTrace();  
             status = 1;  
         } catch (Exception e) {  
             System.err.println(e.getMessage());  
             status = 1;  
         }  
         if (ic != null) {  
             // Clean up  
             //  
             try {  
                 ic.destroy();  
             } catch (Exception e) {  
                 System.err.println(e.getMessage());  
                 status = 1;  
             }  
         }  
        // System.exit(status);  
  return   resultNum;
 }
 
}
****************************蓝色字体也可以这么写*,但是还是建议第一种方法********************************
   message.messageDemoPrx  messageDemoPrx = message.messageDemoPrxHelper.checkedCast(base);  
             if (messageDemoPrx == null) throw new Error("Invalid proxy");  
             //把Hello World传给服务端,让服务端打印出来,因为这个方法最终会在服务端上执行  
             resultNum=    messageDemoPrx.maxNum(a, b);; 


8.测试代码来敲门:
1)先启动服务端:
public class MessageTest { 
 public static void main(String[] args) {
  IceInit.init();
 }
}
2)测试调用:
public class MessageClientTest {
 public static void main(String[] args) {
  IceClient iceClient=new IceClient();
  int rer=iceClient.maxNum(14,14);
  System.out.println("结果:"+rer);
 }
}



***********************************************************************
本人才疏学浅:如未看懂:请移驾:













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值