ZeroC ICE之旅------Slice

 

ZeroC ICE之旅------java

关键字: ice, 分布式
关于Ice请见, 
ICE之轻量级分布式通讯中间件 
http://masterkey.javaeye.com/blog/182954 
ZeroC ICE之旅------C++ 
http://masterkey.javaeye.com/blog/183307 
ZeroC ICE之旅------Slice 
http://masterkey.javaeye.com/blog/184064 
ZeroC ICE之旅------多语言互通互联 
http://masterkey.javaeye.com/blog/183742 
ZeroC ICE之旅------集群和容错 
http://masterkey.javaeye.com/blog/185081 
更多ICE文章,请关注: 
Titan的天空 
http://masterkey.javaeye.com 

工欲善其事,必先利其器,我们首先从www.zero.com,下载最新安装包; 
btw: 

目前最新的v3.3 
http://www.zeroc.com/download_beta.html 
最新稳定版本: 
http://www.zeroc.com/download.html 


由于我自己的平台是CentOS release 4.4 (Final),java version "1.6.0_01" 
所以下载的是: 
http://www.zeroc.com/download/Ice/3.3/Ice-3.3b-rhel4-i386-rpm.tar.gz 

解开之后: 
-rw-r--r--  1 506 users 1130231  4月  1 10:39 db46-4.6.21-2ice.rhel4.i386.rpm 
-rw-r--r--  1 506 users   51459  4月  1 10:39 db46-devel-4.6.21-2ice.rhel4.i386.rpm 
-rw-r--r--  1 506 users  810562  4月  1 10:40 db46-java-4.6.21-2ice.rhel4.i386.rpm 
-rw-r--r--  1 506 users   72125  4月  1 10:40 db46-utils-4.6.21-2ice.rhel4.i386.rpm 
-rw-r--r--  1 506 users   84281  4月  1 10:15 ice-3.3b-1.rhel4.noarch.rpm 
-rw-r--r--  1 506 users  450359  4月  1 10:15 ice-c++-devel-3.3b-1.rhel4.i386.rpm 
-rw-r--r--  1 506 users 2823701  4月  1 10:16 ice-java-3.3b-1.rhel4.noarch.rpm 
-rw-r--r--  1 506 users  263085  4月  1 10:16 ice-java-devel-3.3b-1.rhel4.i386.rpm 
-rw-r--r--  1 506 users 3439061  4月  1 10:17 ice-libs-3.3b-1.rhel4.i386.rpm 
-rw-r--r--  1 506 users  162092  4月  1 10:19 ice-php-3.3b-1.rhel4.i386.rpm 
-rw-r--r--  1 506 users  739055  4月  1 10:19 ice-python-3.3b-1.rhel4.i386.rpm 
-rw-r--r--  1 506 users   32913  4月  1 10:19 ice-python-devel-3.3b-1.rhel4.i386.rpm 
-rw-r--r--  1 506 users  223577  4月  1 10:19 ice-ruby-3.3b-1.rhel4.i386.rpm 
-rw-r--r--  1 506 users   21406  4月  1 10:19 ice-ruby-devel-3.3b-1.rhel4.i386.rpm 
-rw-r--r--  1 506 users 3657167  4月  1 10:20 ice-servers-3.3b-1.rhel4.i386.rpm 
-rw-r--r--  1 506 users 4350193  4月  1 10:24 ice-utils-3.3b-1.rhel4.i386.rpm 
-rw-r--r--  1 506 users   74856  4月  1 10:40 mcpp-devel-2.6.4-1ice.rhel4.i386.rpm 
由于需要c和java的包: 
所以我们仅安装: 
rmp -ivh ice-3.3b-1.rhel4.noarch.rpm 
rmp -ivh ice-3.3b-1.rhel4.noarch.rpm 
rpm -ivh ice-3.3b-1.rhel4.noarch.rpm 
rpm -ivh ice-libs-3.3b-1.rhel4.i386.rpm 
rpm -ivh ice-utils-3.3b-1.rhel4.i386.rpm 
rpm -ivh mcpp-devel-2.6.4-1ice.rhel4.i386.rpm 
rpm -ivh ice-servers-3.3b-1.rhel4.i386.rpm 
rpm -ivh ice-libs-3.3b-1.rhel4.i386.rpm 
rpm -ivh ice-c++-devel-3.3b-1.rhel4.i386.rpm 
rpm -ivh ice-java-3.3b-1.rhel4.noarch.rpm 
rpm -ivh ice-java-devel-3.3b-1.rhel4.i386.rpm 

安装之后的Ice相关路径: 
slice2cpp,slice2java在/usr/bin/下 
Ice.jar 存储于 /usr/share/java/下 
相关的Ice的库存储于/usr/lib下. 

一切就绪,我们开始Ice之旅的Slice地带: 
首先,我们建立一个demo.ice的文件: 

module Demo{
interface  test{  
 string   execute(string mth,string cmd);  
};  
};  


注意,后两个"}"一定要包含";",否则slice2java就会过不去,赫赫 
执行: 
slice2java demo.ice 

会在当前目录产生一个Demo目录,目录下自动生成: 
-rw-r--r--  1 root root 2316  4月 15 17:01 _testDelD.java 
-rw-r--r--  1 root root  560  4月 15 17:01 _testDel.java 
-rw-r--r--  1 root root 1929  4月 15 17:01 _testDelM.java 
-rw-r--r--  1 root root 4177  4月 15 17:01 _testDisp.java 
-rw-r--r--  1 root root 1070  4月 15 17:01 testHolder.java 
-rw-r--r--  1 root root  488  4月 15 17:01 test.java 
-rw-r--r--  1 root root  481  4月 15 17:01 _testOperations.java 
-rw-r--r--  1 root root  460  4月 15 17:01 _testOperationsNC.java 
-rw-r--r--  1 root root 5418  4月 15 17:01 testPrxHelper.java 
-rw-r--r--  1 root root  569  4月 15 17:01 testPrxHolder.java 
-rw-r--r--  1 root root  567  4月 15 17:01 testPrx.java 
到目前为止,demo.ice所以Ice接口部分的定义以及相关依赖都已经自动生成. 

我们要实现自己的execute方法,覆盖testPrx.java的同名方法:  //
TestImp.java   
package  Demo;   
import  Ice.Current;  
public   class  TestImp  extends  _testDisp{  
public String execute(String mth, String cmd, Current __current) {  
 // TODO Auto-generated method stub  
  return mth+cmd;  }}

    看到了,就是这么简单,仅仅覆盖_testDisp里面的抽象方法,实现把我们自己的实现代码填充到里面就行了. 
    之后,我们建立一个Server服务在10000端口进行侦听。 
    //Server.java   
    1. package Demo;  
    2.   
    3. public class Server {  
    4.     public static void main(String[] args) {  
    5.         int status = 0;  
    6.         Ice.Communicator ic = null;  
    7.         try {  
    8.             ic = Ice.Util.initialize(args);  
    9.             Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(  
    10.                     "TestAdapter""default -p 10000");  
    11.             Ice.Object object = new TestImp();  
    12.             adapter.add(object, ic.stringToIdentity("TestAdapter"));  
    13.             adapter.activate();  
    14.             ic.waitForShutdown();  
    15.         } catch (Ice.LocalException e) {  
    16.             e.printStackTrace();  
    17.             status = 1;  
    18.         } catch (Exception e) {  
    19.             System.err.println(e.getMessage());  
    20.             status = 1;  
    21.         }  
    22.         if (ic != null) {  
    23.             // Clean up  
    24.             //  
    25.             try {  
    26.                 ic.destroy();  
    27.             } catch (Exception e) {  
    28.                 System.err.println(e.getMessage());  
    29.                 status = 1;  
    30.             }  
    31.         }  
    32.         System.exit(status);  
    33.     }  
    34. }  

    貌似很复杂,其实里面的很多内容都是固定格式,有些部分需要固定和约定。其中上述红色部分是修改部分。 

    到目前为止,我们已经完成了大部分工作,我们还需要建一个客户端来对服务端的方法进行调用。 
    package  Demo;  
    1.   
    2. public class Client {  
    3.     public static void main(String[] args) {  
    4.         int status = 0;  
    5.         Ice.Communicator ic = null;  
    6.         try {  
    7.             ic = Ice.Util.initialize(args);  
    8. //          Ice.ObjectPrx base = ic  
    9. //                  .stringToProxy("SimplePrinter:tcp -h 172.17.12.101 -p 10000");  
    10.             Ice.ObjectPrx base = ic  
    11.             .stringToProxy("TestAdapter:default -p 10000");  
    12.   
    13.             testPrx test = testPrxHelper.checkedCast(base);  
    14.             if (test == null)  
    15.                 throw new Error("Invalid proxy");  
    16.             System.out.println(test.execute("My first Ice ""demo"));  
    17.             //System.out.println("ok");  
    18.         } catch (Ice.LocalException e) {  
    19.             e.printStackTrace();  
    20.             status = 1;  
    21.         } catch (Exception e) {  
    22.             System.err.println(e.getMessage());  
    23.             status = 1;  
    24.         }  
    25.         if (ic != null) {  
    26.             // Clean up  
    27.             //  
    28.             try {  
    29.                 ic.destroy();  
    30.             } catch (Exception e) {  
    31.                 System.err.println(e.getMessage());  
    32.                 status = 1;  
    33.             }  
    34.         }  
    35.         System.exit(status);  
    36.     }  
    37. }  


    也貌似很复杂吧,其实不然,也很简单,同样包含很多固定格式。其中 

    System.out.println(test.execute( "my first Ice ""demo" ));  


    是我们自己调用的逻辑。 

    赫赫,大功告成了,现在我们开始运行Server,再运行Client看到了么? 
    "My first Ice demo" 

    得到这样的结果,基本Ice之旅的Java部分简单实例我们基本完成。 

    Ice的性能和稳定性远超于我们的想象,skype知道么?其部分通讯架构就是采用的Ice. 

     

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 1
      评论
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值