編譯腳本 :http://zhaoningbo.iteye.com/admin/blogs/1135564(依賴Ice環境)
追究存在性:http://doc.zeroc.com/pages/viewpage.action?pageId=3900811
正文:
首先不得不讚美一下Zeroc Ice異常機制的人性化,很多時候直接報到“根源”(當然,遇上報Endpoint, socket, pipe糾結是必須的)。
解決方法,根據大宗使用手法可分以下幾類:
1,基於IceGrid-IceBox/IceGrid部署
果斷兩大手法:
(1)給“registry_node.config”(ICE註冊及結點配置文件,忘名知意;-D)添加“Ice.MessageSizeMax”值爲更合適的整數(不帶單位,默認1024,即1024K)。
(2)IceGridGUI.jar跑起來,在界面給相應的“Server”添加一個“Ice.MessageSizeMax”屬性及值。犀利些的,直接去“application.xml”玩吧。
2,基於Ice.Application的javac/java命令行
手法千千萬,關注一個點:
(1)Ice.Application.main(String appName, String[] args, T),在T上做文章。
然後,愛傳配置文件的隨便建個名字不跟“Ice命名犯衝”的名稱,在T處放個文件路徑;愛命令行思路的,直接丟個“Ice.MessageSizeMax=NNN”。愛傳對象的,整個“Ice.InitializationData”……
這裏不寫樣例是因爲Ice.Application.main(...)的一組方法有說明。
3,基於&*(^**,基於手寫(編寫測試圖方便可能用到;-d)
先上樣例代碼
- // 加載屬性文件
- Ice.Properties beforeProperties = Ice.Util.createProperties();
- beforeProperties.setProperty("Ice.MessageSizeMax", "10240");
- Ice.InitializationData initData = new Ice.InitializationData();
- initData.properties = beforeProperties;
- System.out.println(beforeProperties.getProperty("Ice.MessageSizeMax"));
- // 1, 初始化環境
- Ice.Communicator ic = Ice.Util.initialize(initData);
- Ice.Properties afterProperties = ic.getProperties();
- System.out.println(afterProperties.getProperty("Ice.MessageSizeMax"));
- // 2, 初始化Adapter
其中:
L2:beforeProperties,創建一個空的配置文件
L9:afterProperties,從生成的通訊員拿回的配置信息
意圖就在驗證設置是否生效。驗證效果如下
- 10240
- 10240
- <<HelloUID started>>
成功了。
最後特別要強調的是:如果在服務方Ice.Communicator設置了“Ice.MessageSizeMax”,請務必在客戶方也設置。