<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.  回復  更多評論   

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


    網站導航:
     
     
    主站蜘蛛池模板: 黄页视频在线观看免费| 亚洲高清乱码午夜电影网| 四虎影视无码永久免费| 亚洲国产中文字幕在线观看| 色偷偷亚洲男人天堂| 四虎永久免费影院| 一区二区三区AV高清免费波多| 亚洲AV无码一区二区三区在线观看| 美女扒开屁股让男人桶爽免费| 无码专区一va亚洲v专区在线| fc2免费人成在线| 久久亚洲高清观看| 精品一区二区三区无码免费视频| 亚洲综合网美国十次| 三年片在线观看免费大全| 亚洲一区二区三区高清在线观看 | 偷自拍亚洲视频在线观看99| 亚洲av区一区二区三| GOGOGO免费观看国语| 久久久久亚洲av无码专区导航| 亚洲视频在线免费看| 亚洲欧美乱色情图片| 免费人妻无码不卡中文字幕18禁| 国产精品1024在线永久免费| 亚洲一区精品中文字幕| 午夜高清免费在线观看| 日韩少妇内射免费播放| 久久夜色精品国产嚕嚕亚洲av| 四虎最新永久免费视频| 美女扒开屁股让男人桶爽免费 | 一级女人18毛片免费| 免费国产黄网站在线看| 亚洲AV无码久久寂寞少妇| 最近免费中文字幕大全视频| 一级毛片免费在线| 亚洲精品国产手机| 亚洲国产成人久久综合一区77| 国内永久免费crm系统z在线| 亚洲AV日韩综合一区尤物| av在线亚洲欧洲日产一区二区| 亚洲免费视频观看|