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

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

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

    zcx

    Commons Modeler 開發JMX應用

    ModelerJakarta Commons 針對Model MBeans提供的一個便利的開發組件

    首先介紹一下基本的概念:Managed bean簡稱Mbean,是對可被管理的資源的抽象定義,ModelBeanJMX定義的Mbean中動態和靈活的一種。但是要實現它開發人員必須設置大量的Metadata信息。Modeler組件針對ModelBean的開發,通過采用xml來定義metadata的方式來簡化了ModelBean的開發強度,同時它和提供了注冊的支持和缺省的ModelMbean的支持。這些我們都將在下面的例子中看到。另外關于JMXModelMBean的介紹有很多可以參考。這里都不提了。

     

    下面主要通過例子來寫一下如何使用它進行JMX開發。

    在實際開發中,我們都是首先定義需要被管理的資源對象,然后把它注冊到MBeanServer中進行發布。最后再通過客戶端訪問。

    所以我的例子也通過這個來完成。

    1. 資源對象和MBean的實現

    首先編寫一個需要管理的對象。該對象很簡單有一個屬性和一個操作。

    public class TestBean {

        private String oneAttr;

        public String getOneAttr(){

            return "one attribute be testing";

        }

        public void setOneAttr(String attr){

            this.oneAttr = attr;

        }

       public String toString(){

            return "toString be testing";

        }

    }

    根據需要被管理的要求編寫Mbeans-descriptors.xml

    <?xml version="1.0"?>

    <mbeans-descriptors>

      <mbean         name="TestBean"

              description="the test bean"

                   domain="mydomain"

                    group="testGroup"

                     type="mbeans.TestBean">

        <attribute   name="oneAttr"

              description="one Attr to be tested"

                     type="java.lang.String"

                writeable="true"/>

        <operation   name="toString"

              description="one Oper to be tested"

                   impact="INFO"

               returnType="String">

        </operation>

      </mbean>

    </mbeans-descriptors>

     

    通過這個xml文件的定義就描述了ModelBean所需要的metadata信息和一個基本的ModelMBean的實現。

    關于這個xml文件有幾個需要說明的地方:

    <mbean>的屬性classname,nametype

    name屬性是每個MbeanRegistry對象注冊的對象名。

    type屬性是是真正被管理資源的全名(包括包名)。

    classname屬性是用戶擴展的用于實現代理功能的ModelMbean的全名,如果不提供Modeler會使用BaseModelMBean;如果提供了代理的ModelMBean對象,在使用時可以使用如下的代碼樣本訪問他所代理的資源對象。

     Function foo(){

                  TestObject object = this.resource;  //得到所代理的對象。

                  Object.foo();                                     //具體實現的調用。

    }

    Mbeans-descriptors.xml的其他的部分都比較好理解,具體參考DTD就可以了。

    下面我們就要把完成MBeanServer的實現和Mbean的注冊。

     

    2. MBeanServer的實現和MBean的注冊

    MBeanServer的實現代碼:

            registry = Registry.getRegistry();

            InputStream stream = MyMBeanServer.class

                    .getResourceAsStream("Mbeans-descriptors.xml");

           registry.loadRegistry(stream);

           stream.close();

           mserver = registry.getMBeanServer();

     

    通過Modeler組件提供的Registry對象,可以很方便的完成MBeanServer的創建。

    MBean的注冊代碼:

                  /*創建被管理的資源實例*/

                TestBean bean = new TestBean();  

                  /*Modeler組件提供的對managedbean配置信息的封裝對象,通過它建立資源和ModelMBean的聯系*/

            ManagedBean managed = registry.findManagedBean("TestBean");

            String domain = managed.getDomain();

                  /*得到ModelMbean*/

            ModelMBean mbean = managed.createMBean(bean);

                  /*創建ObjectName*/

            ObjectName oname = new ObjectName(domain+":test=zcx");

                  /*注冊MBean*/

            mserver.registerMBean(mbean,oname);

        

    3. MBeanServerConnector的實現。

    JMXRemoteAPI 發布之后,Agent需要提供ConnectorServer,我們可以這樣注冊一個JMXMPConnectorServer.

              /*定義JMXServiceURL這個對象是客戶端和服務器聯系的關鍵*/

          JMXServiceURL address = new JMXServiceURL("jmxmp", null, 7777);

          connectorSrv=JMXConnectorServerFactory.newJMXConnectorServer(address, null, null);

          ObjectName csName = new ObjectName(":type=cserver,name=mycserver");

          mserver.registerMBean(connectorSrv, csName);

           connectorSrv.start();

     

    在這里需要說明的是通過JMXServiceURL的可以定義ConnectorServer的類型是JMXMP,RMI或者其他什么類型。按照規范規定這個JMXServiceURL應該在服務器端通過JNDI或者SLP等進行發布。然后客戶端通過相應的訪問得到這個對象,進行通信。如何通過JNDI訪問這個對象,我就不在這里寫了。

    4. MBeanServerAdaptor的實現。

          madaptor = new HtmlAdaptorServer();

            mserver.registerMBean(madaptor,new,ObjectName("adaptor:protocol=HTTP"));

            madaptor.setPort(8888);

               madaptor.start();

     

    5. MBeanClient的實現。

     

    使用http瀏覽器,我們可以通過HtmlAdaptorServer訪問MBean

     

    另外我們通過JMXRemoteAPI也可以在客戶端訪問MBean

    客戶端代碼如下:

    JMXServiceURL address = new  JMXServiceURL("jmxmp","zcx" , 7777);

    connector = JMXConnectorFactory.connect(address);

    mbsConn = connector.getMBeanServerConnection();

     

    通過MBeanServerConnection對象我們可以對MBean進行各種操作。

     

    到這里一個簡單的JMX的應用流程就完成了。J

     

     

     

    posted on 2005-01-11 18:05 zcx 閱讀(2130) 評論(1)  編輯  收藏
    Comments
    • # re: 用Commons Modeler 開發JMX應用
      LeighSword
      Posted @ 2005-01-11 18:14
      model MBeans are the most flexible,but hard to set it up.  回復  更多評論   

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
     
    主站蜘蛛池模板: 在线看片免费人成视频久网下载| 亚洲国产中文在线视频| 青青视频免费在线| 免费大香伊蕉在人线国产| 亚洲国产成人精品无码区二本| 成人免费视频试看120秒| 亚洲av无码专区首页| 国产高清免费观看| 一二三四在线观看免费中文在线观看| 无码专区一va亚洲v专区在线| 免费的黄色的网站| 国产亚洲精品一品区99热| 国内精品久久久久影院免费| 亚洲av伊人久久综合密臀性色 | 亚洲国产精品网站久久| 成人AV免费网址在线观看| 亚洲人成网站999久久久综合| 日韩免费无码一区二区视频| 婷婷亚洲综合五月天小说在线| 亚洲AV蜜桃永久无码精品| 青青操在线免费观看| 亚洲色图校园春色| 日韩精品免费一区二区三区| 无码免费又爽又高潮喷水的视频| 亚洲午夜久久久久久久久电影网 | 成全视频在线观看免费| 亚洲黄色中文字幕| 免费特级黄毛片在线成人观看| 色视频在线观看免费| 亚洲成av人片在线观看无码不卡| 国内精品乱码卡1卡2卡3免费| 国产成人 亚洲欧洲| 亚洲va在线va天堂va888www| 成年性羞羞视频免费观看无限| 一级A毛片免费观看久久精品| 久久久无码精品亚洲日韩蜜臀浪潮| 18禁无遮挡无码网站免费| 国产99久久久久久免费看| 久久狠狠高潮亚洲精品| 免费理论片51人人看电影| 久久99免费视频|