日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JMX学习笔记(一)-MBean

發布時間:2024/7/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JMX学习笔记(一)-MBean 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JMX學習筆記(一)-MBean

標簽:?jmxstringjavainterfaceexceptionclass ?分類: 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; ??
  • ??
  • /**??
  • ?*?JMX?MBean?Interface??
  • ?*???
  • ?*?@author?haitao.tu??
  • ?*???
  • ?*/??
  • public?interface?EchoMBean?{ ??
  • ??
  • ????public?void?print(String?yourName); ??
  • ??
  • }??
  • [java]?view plaincopy
  • package?com.haitao.jmx;??
  • ??
  • /**?
  • ?*?JMX?MBean?Interface?
  • ?*??
  • ?*?@author?haitao.tu?
  • ?*??
  • ?*/??
  • public?interface?EchoMBean?{??
  • ??
  • ????public?void?print(String?yourName);??
  • ??
  • }??
  • ?

    ?

    很簡單的,在EchoMBean接口中,定義了一個print方法,帶一個yourName的String類型參數,只有接口貌似沒什么用,下邊我們實現這個接口

    ?

    ?

    Java代碼?
  • package?com.haitao.jmx; ??
  • ??
  • /**??
  • ?*?Implements?of?JMX?EchoMBean??
  • ?*???
  • ?*?@author?haitao.tu??
  • ?*??
  • ?*/??
  • public?class?Echo?implements?EchoMBean?{ ??
  • ??
  • ????@Override??
  • ????public?void?print(String?yourName)?{ ??
  • ????????System.out.println("Hi?"?+?yourName?+?"!"); ??
  • ????} ??
  • ???? ??
  • }??
  • [java]?view plaincopy
  • package?com.haitao.jmx;??
  • ??
  • /**?
  • ?*?Implements?of?JMX?EchoMBean?
  • ?*??
  • ?*?@author?haitao.tu?
  • ?*?
  • ?*/??
  • 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; ??
  • ??
  • /**??
  • ?*?JMX?App?Demo??
  • ?*???
  • ?*?@author?haitao.tu??
  • ?*/??
  • public?class?App?{ ??
  • ???? ??
  • ????public?static?void?main(String[]?args)?throws?Exception?{ ??
  • ????????//?創建MBeanServer???
  • ????????MBeanServer?mbs?=?ManagementFactory.getPlatformMBeanServer(); ??
  • ???????? ??
  • ????????//?新建MBean?ObjectName,?在MBeanServer里標識注冊的MBean???
  • ????????ObjectName?name?=?new?ObjectName("com.haitao.jmx:type=Echo"); ??
  • ???????? ??
  • ????????//?創建MBean???
  • ????????Echo?mbean?=?new?Echo(); ??
  • ???????? ??
  • ????????//?在MBeanServer里注冊MBean,?標識為ObjectName(com.tenpay.jmx:type=Echo)???
  • ????????mbs.registerMBean(mbean,?name); ??
  • ??
  • ???????? ??
  • ????????//?在MBeanServer里調用已注冊的EchoMBean的print方法???
  • ????????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;??
  • ??
  • /**?
  • ?*?JMX?App?Demo?
  • ?*??
  • ?*?@author?haitao.tu?
  • ?*/??
  • public?class?App?{??
  • ??????
  • ????public?static?void?main(String[]?args)?throws?Exception?{??
  • ????????//?創建MBeanServer??
  • ????????MBeanServer?mbs?=?ManagementFactory.getPlatformMBeanServer();??
  • ??????????
  • ????????//?新建MBean?ObjectName,?在MBeanServer里標識注冊的MBean??
  • ????????ObjectName?name?=?new?ObjectName("com.haitao.jmx:type=Echo");??
  • ??????????
  • ????????//?創建MBean??
  • ????????Echo?mbean?=?new?Echo();??
  • ??????????
  • ????????//?在MBeanServer里注冊MBean,?標識為ObjectName(com.tenpay.jmx:type=Echo)??
  • ????????mbs.registerMBean(mbean,?name);??
  • ??
  • ??????????
  • ????????//?在MBeanServer里調用已注冊的EchoMBean的print方法??
  • ????????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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。