• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 定義Service4JMX2組件 簡單擴展MX4j

    發表于:2007-04-27來源:作者:點擊數: 標簽:Service4JMX2定義擴展簡單組件
    前做的服務器框架,已經支持JMXri的JMX實現,但框架直接綁定JMX環境,不是一個良好的 設計 ,當時沒想到好辦法。最近研究MX4j的實現,重構了一下,可以同時支持JMXri和MX4j了,與JMX環境接耦了?,F在又有了新的 需求 ,要求提供HttpServer功能,在Service4Soc
    前做的服務器框架,已經支持JMXri的JMX實現,但框架直接綁定JMX環境,不是一個良好的設計,當時沒想到好辦法。最近研究MX4j的實現,重構了一下,可以同時支持JMXri和MX4j了,與JMX環境接耦了?,F在又有了新的需求,要求提供HttpServer功能,在Service4Sock的基礎上已經實現了,但是浪費了一個端口資源,需要想辦法與JMX公用才好。繼續研究MX4j的源碼,又有了新的收獲。

    已經完成的工作:
    * DONE 定義Service4JMX服務器組件,使用JMX技術僅僅為了便于管理;主要使用Spring作為IoC容器;
    * DONE 修改register/unregister;對于"Start:開頭的,自動調用start()/stop()
    * DONE 定義Service4JMX2服務器組件,同時支持JMXri和MX4j等多種JMX實現!
    * DONE 開頭對應Domain;修改為標志:start=1,stop=1
    * DONE 使用JMXri返回html能直接顯示;而在MX4j中被自動替換;
    * DONE 配置:對于MX4j使用processorNameString替換processorName,后者需要ObjectName類型;
    * TODO 如何直接顯示某個xml文檔,而非html文檔?(即沒有XSLT解析器)

    某個業務日志需求
    (1)業務日志需要按天寫到一文件中去,一天一個文件,參照以前日志文件規則
    (2)服務器支持一監控端口,用戶可以通過瀏覽器訪問端口獲取數據頁面
    (3)用戶可見到的數據內容參考老的業務服務器內容
    (4)用戶view由日志內容和一樣式文件組合而成,采用技術為xml(日志內容)+xsl(樣式文件)

    我的思路是,擴展HttpAdaptor的實現,定義若干新的Command功能。

    代碼
    1. public interface MyHttpAdaptorMBean extends HttpAdaptorMBean, MBeanRegistration {}   
    2. public class MyHttpAdaptor extends HttpAdaptor implements MyHttpAdaptorMBean {}  

    研究mx4j.tools.adaptor.http.HttpAdaptor源碼,發現以下幾處:
    1,缺省提供的功能項:
    代碼
    1. private String[][] defaultCommandProcessors = {   
    2.    {"server""mx4j.tools.adaptor.http.ServerCommandProcessor"},   
    3.    {"serverbydomain""mx4j.tools.adaptor.http.ServerByDomainCommandProcessor"},   
    4.    {"mbean""mx4j.tools.adaptor.http.MBeanCommandProcessor"},   
    5.    {"setattributes""mx4j.tools.adaptor.http.SetAttributesCommandProcessor"},   
    6.    {"setattribute""mx4j.tools.adaptor.http.SetAttributeCommandProcessor"},   
    7.    {"getattribute""mx4j.tools.adaptor.http.GetAttributeCommandProcessor"},   
    8.    {"delete""mx4j.tools.adaptor.http.DeleteMBeanCommandProcessor"},   
    9.    {"invoke""mx4j.tools.adaptor.http.InvokeOperationCommandProcessor"},   
    10.    {"create""mx4j.tools.adaptor.http.CreateMBeanCommandProcessor"},   
    11.    {"constructors""mx4j.tools.adaptor.http.ConstructorsCommandProcessor"},   
    12.    {"relation""mx4j.tools.adaptor.http.RelationCommandProcessor"},   
    13.    {"empty""mx4j.tools.adaptor.http.EmptyCommandProcessor"}};  
    2,用戶增加新的頁面:
    代碼
    1. public void addCommandProcessor(String path, HttpCommandProcessor processor)   
    2. public void addCommandProcessor(String path, String processorClass)  
    3,設置XSLT解析器:
    代碼
    1. public void setProcessor(ProcessorMBean processor)   
    2. public void setProcessorClass(String processorClass)   
    3. public void setProcessorNameString(String processorName) throws MalformedObjectNameException   
    4. public void setProcessorName(ObjectName processorName)  

    4,defaultCommandProcessors在preRegister()/buildCommands()中被添加到commands中。而commands在run()/getProcessor(String path)中使用,然后由postProcess(httpOut, httpIn, document)來處理,最后生成text/html文檔。因而可能需要修改postProcess,判斷對應的xsl文件是否存在。

    研究mx4j.tools.adaptor.http.XSLTProcessor源碼,發現以下幾處:
    1,在mx4j-3.0.1\src\tools\mx4j\tools\adaptor\http\xsl目錄下有很多xsl文件,用于解析xml的。

    代碼
    1. private String path = "mx4j/tools/adaptor/http/xsl";  

    2,系統缺省訪問的 serverbydomain 功能項
    代碼
    1. private String defaultPage = "serverbydomain";  

      閱讀關于 JAVA 組件 的全部文章

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    ...
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>