關於Ice請見,
ICE之輕量級分佈式通信中間件
http://masterkey.iteye.com/blog/182954
ZeroC ICE之旅------C++
http://masterkey.iteye.com/blog/183307
ZeroC ICE之旅------Slice
http://masterkey.iteye.com/blog/184064
ZeroC ICE之旅------多語言互通互聯
http://masterkey.iteye.com/blog/183742
ZeroC ICE之旅------集羣和容錯
http://masterkey.iteye.com/blog/185081
更多ICE文章,請關注:
Titan的天空
http://masterkey.iteye.com
工欲善其事,必先利其器,咱們首先從www.zero.com,下載最新安裝包;
btw:
目前最新的v3.4
http://www.zeroc.comphp
最新穩定版本:
http://www.zeroc.com/download.html
因爲我本身的平臺是CentOS release 5.3 (Final),java version "1.6.0_01"
因此下載的是:
http://www.zeroc.com/download/Ice/3.4/Ice-3.4.2-rhel5-x86_64-rpm.tar.gz
解開以後:
-rw-r--r-- 1 222 mysql 1341046 Jun 4 2010 db48-4.8.30-1ice.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 51886 Jun 4 2010 db48-devel-4.8.30-1ice.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 1180156 Jun 4 2010 db48-java-4.8.30-1ice.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 120935 Jun 4 2010 db48-utils-4.8.30-1ice.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 91574 Jun 16 05:36 ice-3.4.2-1.rhel5.noarch.rpm
-rw-r--r-- 1 222 mysql 531513 Jun 16 05:36 ice-c++-devel-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 2837924 Jun 16 05:36 ice-java-3.4.2-1.rhel5.noarch.rpm
-rw-r--r-- 1 222 mysql 282937 Jun 16 05:36 ice-java-devel-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 3371844 Jun 16 05:36 ice-libs-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 200760 Jun 16 05:36 ice-php-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 65172 Jun 16 05:36 ice-php-devel-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 1069585 Jun 16 05:36 ice-python-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 32678 Jun 16 05:36 ice-python-devel-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 238228 Jun 16 05:36 ice-ruby-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 25797 Jun 16 05:36 ice-ruby-devel-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 3301850 Jun 16 05:36 ice-servers-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 175745 Jun 16 05:36 ice-sqldb-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 4545116 Jun 16 05:36 ice-utils-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 97474 Jun 4 2010 mcpp-devel-2.7.2-2ice.rhel5.x86_64.rpmhtml
因爲須要c和java的包:
因此咱們僅安裝: java
irpm -ivh ce-3.4.2-1.rhel5.noarch.rpmpython
irpm -ivh db48*
rpm -ivh ice-libs-3.4.2-1.rhel5.x86_64.rpm
rpm -ivh ice-utils-3.4.2-1.rhel5.x86_64.rpm
rpm -ivh mcpp-devel-2.7.2-2ice.rhel5.x86_64.rpm
rpm -ivh ice-servers-3.4.2-1.rhel5.x86_64.rpm
rpm -ivh ice-c++-devel-3.4.2-1.rhel5.x86_64.rpm
rpm -ivh ice-java*
安裝以後的Ice相關路徑:
在/usr/bin/下有:mysql
slice2cpp
slice2freeze
slice2freezej
slice2html
slice2javalinux
存儲於 /usr/share/java/下 有:c++
nt-ice-3.4.2.jar db-4.8.30.jar Freeze.jar IceGridGUI-3.4.2.jar Ice.jar
ant-ice.jar Freeze-3.4.2.jar Ice-3.4.2.jar IceGridGUI.jarsql
相關的Ice的庫存儲於/usr/lib下.
一切就緒,咱們開始Ice之旅的Slice地帶:
首先,咱們創建一個demo.ice的文件:
ruby
注意:string 確實是小寫(java開發人員注意)架構
module Demo{ interface test{ string execute(string mth,string cmd); }; };
//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.java package Demo; 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( "TestAdapter", "default -p 10000"); Ice.Object object = new TestImp(); adapter.add(object, ic.stringToIdentity("TestAdapter")); adapter.activate(); 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); } }
package Demo; 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:tcp -h 172.17.12.101 -p 10000"); Ice.ObjectPrx base = ic .stringToProxy("TestAdapter:default -p 10000"); testPrx test = testPrxHelper.checkedCast(base); if (test == null) throw new Error("Invalid proxy"); System.out.println(test.execute("My first Ice ", "demo")); //System.out.println("ok"); } 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); } }
System.out.println(test.execute("my first Ice ", "demo"));
是咱們本身調用的邏輯。
赫赫,大功告成了,如今咱們開始運行Server,再運行Client看到了麼?
"My first Ice demo"
獲得這樣的結果,基本Ice之旅的Java部分簡單實例咱們基本完成。
Ice的性能和穩定性遠超於咱們的想象,skype知道麼?其部分通信架構就是採用的Ice.
注意:
1》在linux環境下,必定要配置CLASSPTH變量,把 /usr/share/java/Ice.jar 必定要加入進去,不然編譯時就會報錯,找不到Ice相關的類,加入後必定要使其神效,使用source或者是. ;
2》運行時,在Demo目錄級別運行,eg:java Demo/Server、java Demo/Client