<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    笨笨的思想片斷

    零碎片斷,雜七雜八。
    posts - 25, comments - 79, trackbacks - 0, articles - 0

    一個通用的文件配置框架

    Posted on 2008-02-10 15:44 笨笨 閱讀(2491) 評論(0)  編輯  收藏 所屬分類: Java

    一個通用的文件配置框架


    配置需求說明

    在工作中,項目需要實現多種程序配置方式,每種程序配置均有各自的文件復制,變量替換(替換文本文件中的變量占位符),修改腳本文件的需求. 為減少重復代碼,簡化配置實現,我們實現了此配置框架.需求片斷示例:
    1. 復制文件到某處
    2. 創建/append 某個 properties/txt 文本文件
    3. 修改腳本文件,插入一段文本到腳本文件某處
    4. 通過JMX/JNDI連接到遠程應用服務器, 用Java code修改應用服務器的配置.

    需求分析

    從上述需求來看,第一印象就是用ANT或類ANT XML文件就可以很好的滿足上述需求, 但是還需要做下面增強才會好用:
    1. 配置過程需要有類似于事務的機制,以保證多處改動的一致性.
    2. 各種配置過程之間有許多相同之處,為減少重復,可以考慮引入公共配置片斷文件.
    3. 由于配置過程相對固定, ANT BUILD XML文件的多個target以及依賴關系檢查就不需要了,但是需要更加靈活的條件判斷機制來控制單個配置動作和變量賦值.

    實現簡介

    根據上述分析,項目最終的XML配置文件格式如下:
    <root>
        <common>
            <resource-bundle>ResourceBundle Message Class</resource-bundle>
            <variables>
                <!-- If contains CONFIG_XINFO ,copy it to PLATCODE -->
                <variable name="PLATCODE" value="${CONFIG_XINFO}">
                    <condition>
                        <varexists name="CONFIG_XINFO" />
                    </condition>
                </variable>
                <!-- Give it a default value -->
                <variable name="IS_WINDOWS" value="FALSE" />
                <variable name="IS_WINDOWS" value="TRUE">
                    <condition>
                        <or>
                           <variable name="PLATCODE" value="windows"/>
                           <variable name="PLATCODE" value="windows64"/>
                        </or>
                    </condition>
                </variable>
            </variables>
        </common>
        <configure>
            <action-invoke
                class="CustomizedActionClass"
                index="1"
            />
            <action-copy
                file="${Source File Variable}"
                dest="${Dest file Variable}"
                index="60"
                reason="Error Reason Key"
                />
            <action-write
                file="${File to Write}"
                index="20"
                reason="Error Reason Key"
            ><![CDATA[QUALDIR=${QUALDIR}
    ]]></action-write>
            <action-expand
                file="${File to be expanded}"
                index="30"
            />
        </configure>
    </root>


    與ANT BUILD XML相類似的,分為變量定義區域和配置動作定義區域. 為實現方便,變量可以被覆蓋,變量賦值語句可以帶條件.
    具體配置過程由多個action-***規定,配置框架已經預提供標準動作: action-copy/action-write/action-expand 等等, action-invoke可以插入自定義Java代碼.


    為了解決問題1,配置框架實現了一套類似于兩階段提交的機制. 每個Action實現類需要實現三個方法:
    1. Action.performAction(): 實現正常配置動作,如果失敗則返回錯誤碼.
    2. Action.performCompensation(): 實現回滾動作,負責將配置對象(如文件內容)回滾到修改前的狀態.
    3. Action.performComplete(): 實現正常配置完成動作, 負責釋放配置過程占用的臨時資源.
    配置框架依次對每個要執行的動作調用performAction動作,如果當前Action返回失敗錯誤碼,則對已經成功執行的Action反向依次調用 performCompensation動作,執行回滾操作,從而保證配置過程的一致性; 如果全部成功,則依次調用performComplete操作,釋放占用的臨時資源,如下圖:



    為解決問題2,我們為每個action指定了一個index,用它規定執行順序,配置框架從公共配置文件和私有配置文件中合并并排序所有的配置 action, 通過預先分配common action和private action的index范圍, 每個單獨的配置過程可以完全抽出重復配置動作.

    為解決問題3, 每個action,每個變量定義(property 標記) 都可以有自己的condition 定義. 如此一來,配置文件的寫法更類似于程序的執行過程,從開發角度也更加自然.


    其它特性:腳本文件自動分析和插入配置行

    應用服務器的啟動腳本是用戶可定制的,我們無法預見文件格式. 為解決這個問題,我們采用了如下方式:
    1. 對腳本進行語法分析,找出腳本的Java啟動行(或Windows Service設置行),進而找出可用的shell變量和插入位置. 期望這種方式能夠解決大多數用戶自定義腳本.
    2. 對于復雜或分析條件不充分的腳本(如變量位于別的文件), 用戶需要在合適位置插入一行有指定格式和參數的注釋行(稱之為anchor),配置框架會自動在該行后插入配置代碼. 這種方式的主要的問題是用戶理解困難,項目組支持的工作量大;不過這也是沒有辦法的辦法了.

    總結

    本文介紹了一種多文件操作配置框架的思路,并具體解釋類事務的配置動作實現過程, 該配置框架在項目實踐中達到了預期目的,收到不錯的效果.

    主站蜘蛛池模板: 亚洲综合AV在线在线播放| 亚洲日韩中文在线精品第一| 久久精品国产亚洲av麻豆色欲| a级片免费在线观看| 亚洲精品成人无码中文毛片不卡| 四虎影视在线看免费观看| 免费v片在线观看品善网| 精品视频免费在线| 亚洲无码日韩精品第一页| 有码人妻在线免费看片| 激情97综合亚洲色婷婷五| 国产免费一区二区视频| 亚洲视频在线观看地址| 希望影院高清免费观看视频| jiz zz在亚洲| 免费国产高清视频| 两个人看的www高清免费观看| 亚洲国产成人久久综合一| av无码国产在线看免费网站| 亚洲欧美日韩自偷自拍| mm1313亚洲精品国产| 精品视频在线免费观看| 亚洲欧洲日产专区| 韩国欧洲一级毛片免费| 国产久爱免费精品视频| 久久精品国产亚洲av麻豆色欲| 永久免费av无码不卡在线观看| 国产成人人综合亚洲欧美丁香花| 国产亚洲精品福利在线无卡一| 污视频在线观看免费| 亚洲色大成网站www尤物| 亚洲精品乱码久久久久久不卡| 国产麻豆一精品一AV一免费| 亚洲色www永久网站| 伊人久久大香线蕉亚洲五月天| 国产四虎免费精品视频| 特级毛片免费观看视频| 97亚洲熟妇自偷自拍另类图片| 国产精品麻豆免费版| 久久久久久免费一区二区三区| 亚洲人成人无码.www石榴|