Terry.Li-彬

          虛其心,可解天下之問(wèn);專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評(píng)論 :: 0 Trackbacks

          1、前言

          JMX管理及使用日趨成熟。spring對(duì)bean的管理功能也很強(qiáng)大,通過(guò)annotation把某些方法暴露成MBean,然后通過(guò)JMX遠(yuǎn)程管理,在某些場(chǎng)景下會(huì)帶來(lái)意想不到的效果。

          ?

          本文只介紹兩個(gè)內(nèi)容:spring通過(guò)annotation暴露MBean、相關(guān)的xml配置。

          ?

          ?

          2、spring通過(guò)annotation暴露MBean

          ?

          ??????2.1?? 涉及到三個(gè)重要的annotation:@ManagedResource @ManagedAttribute 和 @ManagedOperation。

          ?

          用途 Commons Attributes屬性 JDK 5.0注解 屬性/注解類型
          將類的所有實(shí)例標(biāo)識(shí)為JMX受控資源 ManagedResource @ManagedResource Class 類
          將方法標(biāo)識(shí)為JMX操作 ManagedOperation @ManagedOperation Method方法
          將getter或者setter標(biāo)識(shí)為部分JMX屬性 ManagedAttribute @ManagedAttribute Method (only getters and setters) 方法(僅getters和setters)
          定義操作參數(shù)說(shuō)明 ManagedOperationParameter @ManagedOperationParameter@ManagedOperationParameters Method 方法

          ?

          ?

          ????2.2?? 看了上面官方解釋,應(yīng)該有個(gè)大概的了解,下面再舉個(gè)例子。

          ?

          Java代碼??收藏代碼
          1. @ManagedResource (objectName= "bean:name=lionbuleTest" ,?description= "My?Managed?Bean" )??
          2. public ? class ?AnnotationTestMBean{??
          3. ????private?String?name;??
          4. ????private?int?age;??
          5. ??????
          6. ????@ManagedAttribute(description="The?Name?Attribute")??
          7. ????public?void?setName(String?name)?{??
          8. ????????this.name?=?name;??
          9. ????}??
          10. ??
          11. ????@ManagedAttribute()??
          12. ????public?String?getName()?{??
          13. ????????return?name;??
          14. ????}????
          15. ????public?int?getAge()?{??
          16. ????????return?age;??
          17. ????}??
          18. ????public?void?setAge(int?age)?{??
          19. ????????this.age?=?age;??
          20. ????}??
          21. ??????
          22. ????@ManagedOperation(description="Add?two?numbers")??
          23. ????@ManagedOperationParameters({??
          24. ????@ManagedOperationParameter(name?=?"x",?description?=?"The?first?number"),??
          25. ????@ManagedOperationParameter(name?=?"y",?description?=?"The?second?number")})??
          26. ????public?int?add_1(int?x,?int?y)?{??
          27. ????????return?x?+?y;??
          28. ????}??
          29. ??
          30. ????@ManagedOperation??
          31. ????public?int?add_2(int?x,?int?y){??
          32. ????????return?x?+?y;??
          33. ????}??
          34. ????
          35. ????public?void?dontExposeMe()?{??
          36. ????????throw?new?RuntimeException();??
          37. ????}??
          38. ??
          39. }??

          ?

          ???2.3??Jconsole的管理界面截圖:

          ?

          圖1、查看已暴露MBean的屬性

          ?

          圖2、查看已暴露MBean的方法

          ?

          ???2.4?? 解釋說(shuō)明:

          ?

          ???????? 1、@ManagedResource?@ManagedAttribute 和 @ManagedOperation?還有許多參數(shù),具體使用請(qǐng)參考spring官方手冊(cè)。(?spring手冊(cè)[2.5.3] ---- 20.3.4.?源代碼級(jí)的元數(shù)據(jù)類型)

          ?

          ???????? 2、@ManagedOperationParameters 是對(duì)@ManagedOperation的補(bǔ)充。具體看代碼樣例中的add1方法上的注解,然后再看圖2(查看已暴露MBean的方法)的add1方法和add2的區(qū)別。添加參數(shù)說(shuō)明的add1方法會(huì)顯示出參數(shù)名,而add2方法則是默認(rèn)的參數(shù)名p1/p2。

          ?

          ???????? 3、沒(méi)有添加@ManagedOperation和@ManagedAttribute的方法,在圖2中就沒(méi)有看到,說(shuō)明添加了注解的方法暴露MBean是可用的。

          ?

          ???????? 4、@ManagedOperation和@ManagedAttribute的區(qū)別,請(qǐng)查看2.1的詳解。

          ?

          3、xml配置

          ? ? 方式一、通用spring bean配置

          Xml代碼??收藏代碼
          1. ??? < bean ? id = "jmxAttributeSource" ??
          2. ?????????class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>??
          3. ???<!--?使用注解元數(shù)據(jù)創(chuàng)建管理接口?-->??
          4. ???<bean?id="assembler"??
          5. ?????????class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">??
          6. ???????<property?name="attributeSource"?ref="jmxAttributeSource"/>??
          7. ???</bean>??
          8. ???<!--?從注解中得到ObjectName??-->??
          9. ???<bean?id="namingStrategy"??
          10. ?????????class="org.springframework.jmx.export.naming.MetadataNamingStrategy">??
          11. ???????<property?name="attributeSource"?ref="jmxAttributeSource"/>??
          12. ???</bean>??
          13. ???<bean?id="exporter"?class="org.springframework.jmx.export.MBeanExporter">??
          14. ???????<property?name="assembler"?ref="assembler"/>??
          15. ???????<property?name="namingStrategy"?ref="namingStrategy"/>??
          16. ???????<property?name="autodetect"?value="true"/>??
          17. ???</bean>??
          18. ??
          19. <!--?配置服務(wù)器端連接器RMI?--> ??
          20. < bean ? class = "org.springframework.remoting.rmi.RmiRegistryFactoryBean" > ??????????
          21. ????<property?name="port"?value="2088"/>??
          22. </ bean > ??
          23. < bean ? id = "serverConnector" ??
          24. ??????class="org.springframework.jmx.support.ConnectorServerFactoryBean">??
          25. ??<property?name="objectName"?value="connector:name=rmi"/>??
          26. ?????????<!--?客戶端鏈接地址配置?-->??
          27. ??<property?name="serviceUrl"??
          28. ????????????value="service:jmx:rmi://localhost/jndi/rmi://localhost:2088/myconnector"/>??
          29. </ bean > ??
          30. ??
          31. <!--?自定義的mbean?--> ??
          32. ???<bean?id="annotationTestMBean"?class="com.lionbule.biz.test.AnnotationTestMBean">??
          33. ???????<property?name="name"?value="TEST"/>??
          34. ???????<property?name="age"?value="100"/>??
          35. ???</bean>??

          ??? 配置中,已經(jīng)加了相應(yīng)的注釋。還不是很清楚,可以查詢spring官方手冊(cè)。

          ?

          ? ? 方式二、簡(jiǎn)化spring-context配置

          Xml代碼??收藏代碼
          1. <? xml ? version = "1.0" ? encoding = "UTF-8" ?> ??
          2. < beans ? xmlns = "http://www.springframework.org/schema/beans" ??
          3. ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
          4. ????xmlns:context="http://www.springframework.org/schema/context"??
          5. ????xsi:schemaLocation="http://www.springframework.org/schema/beans??
          6. ????????????????????????http://www.springframework.org/schema/beans/spring-beans.xsd??
          7. ????????????????????????http://www.springframework.org/schema/context??
          8. ????????????????????????http://www.springframework.org/schema/context/spring-context.xsd"??
          9. ????default-autowire="byName">??
          10. ??
          11. ????<context:mbean-export?default-domain="ShowCase"?registration="replaceExisting"?/>??
          12. ????<!--?自定義的mbean?-->??
          13. ????<bean?id="annotationTestMBean"?class="com.lionbule.biz.test.AnnotationTestMBean">??
          14. ????????<property?name="name"?value="TEST"/>??
          15. ????????<property?name="age"?value="100"/>??
          16. ????</bean>??
          17. </ beans > ??

          ? ??注意:方式二對(duì)ClassName和beanName有約束,請(qǐng)以‘MBean’結(jié)尾。?

          ?

          4、客戶端工具連接

          ?

          ??? 常用的客戶端工具:Jconsole、jvisualvm、jmanager等。

          ??? 連接方式有多種,但本案只介紹了RMI連接管理,所以本案的鏈接地址為:

          Xml代碼??收藏代碼
          1. service:jmx:rmi://localhost/jndi/rmi://localhost:2088/myconnector??

          ?

          參考資料:

          1、spring官方手冊(cè)

          ?????http://static.springsource.org/spring/docs/2.5.x/reference/jmx.html#jmx-interface

          2. ?http://wiki.springside.org.cn/display/SpringSide3/JMX

          posted on 2013-01-31 17:02 禮物 閱讀(2480) 評(píng)論(0)  編輯  收藏 所屬分類: JMX

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。

          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 普安县| 政和县| 宜都市| 舟曲县| 甘肃省| 丹阳市| 东阳市| 乌海市| 吉林市| 东辽县| 漳州市| 海南省| 龙岩市| 新丰县| 黔江区| 黎城县| 仙桃市| 古田县| 平山县| 察雅县| 荣昌县| 榆中县| 武夷山市| 平原县| 灵川县| 汾阳市| 永平县| 什邡市| 西城区| 双桥区| 焉耆| 林口县| 东丽区| 灵宝市| 亚东县| 广西| 白山市| 霞浦县| 泰安市| 安龙县| 习水县|