ICE的屬性設置

1、ICE的屬性即"name=value"值,具體的name範疇可以見後續描述。可以在程序中設置屬性值到ICE的運行環境中
   但一定要注意在Communicator::Initialize方法調用之前設置好值,在之後設置的值會被ICE的運行環境忽略
2、屬性名不能包含如下前綴:Ice、IceBox、IceGrid、IcePatch2、IceSSL、IceStorm、Freeze、Glacier2
3、屬性名稱和屬性值中開始和結束的空格或者tab字符會被忽略
4、有一個特殊的屬性Ice.Warn.UnusedProperties,將其設置爲非零值,那麼在communicator析構時會檢測是否有
   屬性從未讀取過,則會報告異常,可用來檢測是否有哪些屬性因爲名字拼寫錯誤從未讀取
5、設置屬性的方式有如下幾種
   A、通過簡單的命令行參數指定:./server --Ice.Trace.Protocol=1
   B、通過配置文件指定: ./server --Ice.Config=/data/home/server.conf
   C、通過程序實現屬性設置:setProperty("Ice.Trace.Protocol", "1");
6、ice的屬性配置文件需要遵循以下規則:
   A、配置文件中以#開始的行爲註釋行
   B、配置文件中的特殊字符'#'、'\'、'='可以通過轉移字符'\'來標示
   C、缺省配置文件通過環境變量ICE_CONFIG指定
   D、可以通過命令行參數--Ice.Config特殊指定配置文件路徑
   E、命令行上的參數優先級高於配置文件中的優先級
   F、可以通過--Ice.Config指定多個屬性配置文件,文件路徑間以','分割
   G、不管輸屬性配置文件還是命令參數,後面的屬性值會覆蓋前面定義的屬性值
7、在命令行上設置屬性有如下幾種格式:
   A、--Ice.Trace.Protocol=1               //將屬性設置爲1
   B、--Ice.Trace.Protocol                 //未標示值的屬性值爲1
   C、--Ice.Trace.Protocol=                //清除默認屬性
8、應用程序中可以通過設置Ice.ProgramName來修改運行程序的名稱
9、ICE的運行時環境維護一個程序的屬性集合PropertiesPtr,可以通過如下方式獲取一個屬性集合:
   A、調用Ice::createProperties創建一個屬性集合
   B、調用Ice::CommunicatorI::getProperties獲取系統當前環境的屬性集合
   C、調用
10、屬性集合Properties提供如下方法用於屬性的讀寫操作:
   A、std::string getProperty(const std::string&);
   B、std::string getPropertyWithDefault(const std::string&, const std::string&);
   C、Ice::Int getPropertyAsInt(const std::string&);
   D、Ice::Int getPropertyAsIntWithDefault(const std::string&, Ice::Int);
   E、PropertyDict getPropertiesForPrefix(const std::string&);
   F、void setProperty(const std::string&, const std::string&);
   G、PropertiesPtr clone();                   // 深度拷貝屬性集合
   H、void load(const std::string&);           // 從配置文件中加載屬性集合
   I、StringSeq getCommandLineOptions();       // 將屬性解析成命令行格式
   J、StringSeq parseCommandLineOptions(const std::string&, const StringSeq&); // 從StringSeq中匹配前綴的參數解析成屬性,並移除對應值
   K、StringSeq parseIceCommandLineOptions(const StringSeq&); // 從StringSeq中解析ICE運行環境屬性,並移除對應值
11、setProperty方法一般需要在調用Communicator::initialize之前調用,常用的調用格式如下:
    Ice::InitializationData id;
    id.properties = Ice::createProperties(args);
    id.properties->setProperty("MyProperties", "abcdefg");
    _communicator = Ice::initialize(id);
12、屬性集合對象提供的方法好多是基於StringSeq的,但是有些時候我們需要的是argc、argv這樣的參數,那麼ICE提供方法在其間進行轉換:
    StringSeq Ice::argsToStringSeq(int argc, char* argv[]);
void Ice::stringSeqToArgs(const StringSeq& args, int& argc, char* argv[]);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章