chapter 11-01

執行多套資料模型

此章節說明如何同時運作多個 mcm_daemon 並各自使用不同的資料模型.


例如程式一使用 主要設定 (main) 的資料模型, 程式二使用關於 紀錄 (log) 的資料模型.


修改的部分

假設要使用二套資料模型.
資料模型-01 :  內容是設備的基本設定, 簡稱 main
資料模型-02 :  內容是設備的系統紀錄, 簡稱 log


為了分辨不同的資料模型, 需要在原本的名稱加上後綴作區分, 在後續的說明中 :
$(suffix) 表示小寫的後綴, 例如 main, log.
$(SUFFIX) 表示大寫的後綴, 例如 MAIN, LOG.

mcm_build
每一個資料模型需要各自的 mcm_build 作處理.

每一個資料模型複製一份 mcm_build, 並更名為 mcm_build_$(suffix)

例如 :
複製二份 mcm_build,
一個改名為 mcm_build_main
一個改名為 mcm_build_log

mcm_daemon
每一個資料模型需要各自的 mcm_daemon.

每一個資料模型複製一份 mcm_daemon, 並更名為 mcm_daemon_$(suffix)

例如 :
複製二份 mcm_daemon,
一個改名為 mcm_daemon_main
一個改名為 mcm_daemon_log

mcm_build_$(suffix)/mcm_data_profile.xml

資料模型檔的檔名必須是 mcm_data_profile_$(suffix).xml

例如 :
mint_cm/mcm_build_main :
撰寫的資料模型檔的檔名必須是 mcm_data_profile_main.xml
mint_cm/mcm_build_log :
撰寫的資料模型檔的檔名必須是 mcm_data_profile_log.xml

mcm_build_$(suffix)/mcm_store_profile_default.txt

資料模型的預設值檔的檔名必須是 mcm_store_profile_default_$(suffix).txt

例如 :
mint_cm/mcm_build_main :
撰寫資料模型的預設值檔的檔名必須是 mcm_store_profile_default_main.txt
mint_cm/mcm_build_log :
撰寫資料模型的預設值檔的檔名必須是 mcm_store_profile_default_log.txt

編譯的順序

編譯需要加上指定模型的參數 :
MODEL_SUFFIX_LOWER=$(suffix) MODEL_SUFFIX_UPPER=$(SUFFIX)

01.  處理資料模型, binary_profile (需要加上指定模型的參數並使用多次處理每個模型)
例如 :
make binary_profile MODEL_SUFFIX_LOWER=main MODEL_SUFFIX_UPPER=MAIN
make binary_profile MODEL_SUFFIX_LOWER=log MODEL_SUFFIX_UPPER=LOG


02.  編譯函式庫, binary_library (只需要一次)
例如 :
make binary_library


03.  編譯網頁伺服器, binary_httpd (只需要一次)
例如 :
make binary_httpd


04.  編譯執行檔, binary_daemon (需要加上指定模型的參數並使用多次處理每個模型)
例如 :
make binary_daemon MODEL_SUFFIX_LOWER=main MODEL_SUFFIX_UPPER=MAIN
make binary_daemon MODEL_SUFFIX_LOWER=log MODEL_SUFFIX_UPPER=LOG


05.  複製複製資料模型和資料預設值檔到到執行目錄, install_profile (需要加上指定模型的參數並使用多次處理每個模型)
例如 :
make install_profile MODEL_SUFFIX_LOWER=main MODEL_SUFFIX_UPPER=MAIN
make install_profile MODEL_SUFFIX_LOWER=log MODEL_SUFFIX_UPPER=LOG


06.  複製函式庫到執行目錄, install_library (只需要一次)
例如 :
make install_library


07.  複製網頁伺服器到執行目錄, install_httpd (只需要一次)
例如 :
make install_httpd


08.  複製執行檔到執行目錄, install_daemon (需要加上指定模型的參數並使用多次處理每個模型)
例如 :
make install_daemon MODEL_SUFFIX_LOWER=main MODEL_SUFFIX_UPPER=MAIN
make install_daemon MODEL_SUFFIX_LOWER=log MODEL_SUFFIX_UPPER=LOG


*.  如果需要清除編譯, clean (需要加上指定模型的參數並使用多次處理每個模型)
例如 :
make clean MODEL_SUFFIX_LOWER=main MODEL_SUFFIX_UPPER=MAIN
make clean MODEL_SUFFIX_LOWER=log MODEL_SUFFIX_UPPER=LOG


撰寫資料模型檔的注意事項

所有的資料模型檔內, 不可以使用相同的根節點名稱.
mcm_build_$(suffix) 會根據資料模型檔的內容, 在 mint_cm/mcm_lib/mcm_lheader/mcm_data_exinfo_$(suffix)_auto.h 產生對應的結構定義 (struct mcm_dv_*_t {...}, struct mcm_ds_*_t {...}), 相同的根節點名稱會導致重複定義.


撰寫程式的注意事項

外部程式部分

include 部分
原本 #include "mcm_lheader/mcm_data_exinfo_auto.h"
改為 #include "mcm_lheader/mcm_data_exinfo_$(suffix)_auto.h"

define 部分
原本這些定義
#define MCM_PROFILE_VERSION ...
#define MCM_PATH_MAX_LEVEL ...
#define MCM_PATH_MAX_LENGTH ...

都會被改為
#define MCM_PROFILE_VERSION_$(SUFFIX) ...
#define MCM_PATH_MAX_LEVEL_$(SUFFIX) ...
#define MCM_PATH_MAX_LENGTH_$(SUFFIX) ...


網頁程式部分

include Javascript 部分
原本
<script type="text/javascript" src="mcm_jslib_data_info_auto.js"></script>

改為
<script type="text/javascript" src="mcm_jslib_data_info_$(suffix)_auto.js"></script>


內部模組程式部分

include 部分
原本
#include "mcm_lib/mcm_lheader/mcm_data_exinfo_auto.h"

改為
#include "mcm_lib/mcm_lheader/mcm_data_exinfo_$(suffix)_auto.h"


define 部分
原本這些定義
#define MCM_PROFILE_VERSION ...
#define MCM_PATH_MAX_LEVEL ...
#define MCM_PATH_MAX_LENGTH ...

都會被改為
#define MCM_PROFILE_VERSION_$(SUFFIX) ...
#define MCM_PATH_MAX_LEVEL_$(SUFFIX) ...
#define MCM_PATH_MAX_LENGTH_$(SUFFIX) ...



執行時的注意事項

執行參數

<-a $(server_socket_path)>
開啟服務的位址路徑, 其他程式需要連線到此位址路徑作資料存取.
需要指定不同的服務位址, 例如 :
mcm_daemon_main 使用 @mcm-main
mcm_daemon_log 使用 @mcm-log

<-l $(module_path)>
內部模組函式庫的路徑, 需要使用加上後綴的檔案名稱.

<-m $(model_profile_path)>
資料模型檔案的路徑, 需要使用加上後綴的檔案名稱.

<-d $(store_default_profile_path)>
資料預設值檔案的路徑, 需要使用加上後綴的檔案名稱.

<-c $(store_current_profile_path)>
紀錄資料現在值檔案的路徑, 需要使用加上後綴的檔案名稱.

[-p $(pid_path)]
紀錄 mcm_daemon 的 PID 的檔案的路徑, 需要使用加上後綴的檔案路徑.