生活随笔
收集整理的這篇文章主要介紹了
JMX学习笔记(一)-MBean
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JMX學習筆記(一)-MBean
標簽:?jmxstringjavainterfaceexceptionclass 2010-12-07 22:20?15360人閱讀? ?分類: JMX(11)?
JMX ? ? ? ?即?Java?Management Extensions?? Java管理擴展
MBean ? 即 managed beans ? ? ? ? ? ? ? ? ? ? ? ? 被管理的Beans
一個MBean是一個被管理的Java對象,有點類似于JavaBean,一個設備、一個應用或者任何資源都可以被表示為MBean,MBean會暴露一個接口對外,這個接口可以讀取或者寫入一些對象中的屬性,通常一個MBean需要定義一個接口,以MBean結尾, 例如: EchoMBean, 格式為XXXMBean,這個是規范,必須得遵守。例如:
?
?
Java代碼?
package?com.haitao.jmx; ????public?interface?EchoMBean?{ ????????public?void?print(String?yourName); ????}?? [java]?view plaincopy
package?com.haitao.jmx;????public?interface?EchoMBean?{????????public?void?print(String?yourName);????}?? ?
?
很簡單的,在EchoMBean接口中,定義了一個print方法,帶一個yourName的String類型參數,只有接口貌似沒什么用,下邊我們實現這個接口
?
?
Java代碼?
package?com.haitao.jmx; ????public?class?Echo?implements?EchoMBean?{ ????????@Override??????public?void?print(String?yourName)?{ ??????????System.out.println("Hi?"?+?yourName?+?"!"); ??????} ?????? ??}?? [java]?view plaincopy
package?com.haitao.jmx;????public?class?Echo?implements?EchoMBean?{????????@Override??????public?void?print(String?yourName)?{??????????System.out.println("Hi?"?+?yourName?+?"!");??????}????????}?? ?
Echo實現了EchoMBean接口,很簡單我們只是print了hi yourName!
按照JMX的定義,是被管理的對象,現在我們只是定義了該對象,并沒有被管理,接著我們讓這個Echo類的實例對象被管理起來:
Java代碼?
package?com.haitao.jmx; ????import?java.lang.management.ManagementFactory; ????import?javax.management.MBeanServer; ??import?javax.management.ObjectName; ????public?class?App?{ ?????? ??????public?static?void?main(String[]?args)?throws?Exception?{ ??????????????????MBeanServer?mbs?=?ManagementFactory.getPlatformMBeanServer(); ?????????? ??????????????????ObjectName?name?=?new?ObjectName("com.haitao.jmx:type=Echo"); ?????????? ??????????????????Echo?mbean?=?new?Echo(); ?????????? ??????????????????mbs.registerMBean(mbean,?name); ???????????? ??????????????????mbs.invoke(name,?"print",?new?Object[]?{?"haitao.tu"},?new?String[]?{"java.lang.String"}); ?????????? ??????????Thread.sleep(Long.MAX_VALUE); ??????} ????}?? [java]?view plaincopy
package?com.haitao.jmx;????import?java.lang.management.ManagementFactory;????import?javax.management.MBeanServer;??import?javax.management.ObjectName;????public?class?App?{????????????public?static?void?main(String[]?args)?throws?Exception?{??????????????????MBeanServer?mbs?=?ManagementFactory.getPlatformMBeanServer();????????????????????????????ObjectName?name?=?new?ObjectName("com.haitao.jmx:type=Echo");????????????????????????????Echo?mbean?=?new?Echo();????????????????????????????mbs.registerMBean(mbean,?name);??????????????????????????????mbs.invoke(name,?"print",?new?Object[]?{?"haitao.tu"},?new?String[]?{"java.lang.String"});????????????????????Thread.sleep(Long.MAX_VALUE);??????}????}?? ?
1. 首先我們在App類中向ManagementFactory申請了一個MBeanServer對象
2. 接著我們即然要使Echo的實例對象被管理起來,我們就需要給這個對象一個標識,這個標識是ObjectName.注意這個ObjectName構造函數,這里使用了(包名:type=類名)的形式.
3. 然后我們通過mbs.registerMBean方法注冊了echo,并傳入了ObjectName在MBeanServer中標識該MBean.
4. 隨后我們通過mbs.invoke方法調用了已經注冊的Echo的print方法,通過ObjectName找到該MBean, 并通過最后兩個參數,傳入print方法執行的參數,與參數的類型。
5. 最后我們sleep主線程,等待其他線程的調用.
通過這個例子我們可以看出,MBean的好處,在Echo的實例對象未被管理之前,我們只能通過Echo對象的句柄,來調用Echo里的public方法,在被管理之后,我們可以通過MBeanServer的句柄mbs來調用Echo對象的print方法。
更詳細的內容,我們可以通過JDK自帶工具jconsole或者?VisualVM?來查看MBean:
?
1.jconsole
?
jconsole的位置在%JAVA_HOME%/bin/jconsole.exe
?
開后會看到:
?
?
選擇com.haitao.jmx.App,然后點擊連接, 選擇MBean后會看到
?
這里可以直接調用Echo的print方法, 當然大家看到這里邊還有好多其他的table,包括概述、內存、線程、類、VM摘要、MBean。
?
?
2.VisualVM
?
VisualVM的位置在%JAVA_HOME%/bin/jvisualvm.exe
?
打開后經過連接我們會看到類似的效果:
?
轉載于:https://www.cnblogs.com/developer-ios/p/5775762.html
總結
以上是生活随笔為你收集整理的JMX学习笔记(一)-MBean的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。