国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Java Management Extensions管理擴展原理解析

瀏覽:112日期:2022-09-03 10:47:55

所謂JMX,是Java Management Extensions(Java管理擴展)的縮寫,是一個為應(yīng)用程序植入管理功能的框架。用戶可以在任何Java應(yīng)用程序中使用這些代理和服務(wù)實現(xiàn)管理。

一、JMX架構(gòu)圖

Java Management Extensions管理擴展原理解析

從圖中我們可以看到,JMX的結(jié)構(gòu)一共分為三層:

1、 基礎(chǔ)層:主要是Mbean,被管理的java bean

Mbean分為如下四中

類型 描述 standard MBean 這種類型的MBean最簡單,它能管理的資源(包括屬性,方法,時間)必須定義在接口中,然后MBean必須實現(xiàn)這個接口。它的命名也必須遵循一定的規(guī)范,例如我們的MBean為Hello,則接口必須為HelloMBean。 dynamic MBean 必須實現(xiàn)javax.management.DynamicMBean接口,所有的屬性,方法都在運行時定義 model MBean 與標準和動態(tài)MBean相比,你可以不用寫MBean類,只需使用javax.management.modelmbean.RequiredModelMBean即可。RequiredModelMBean實現(xiàn)了ModelMBean接口,而ModelMBean擴展了DynamicMBean接口,因此與DynamicMBean相似,Model MBean的管理資源也是在運行時定義的。與DynamicMBean不同的是,DynamicMBean管理的資源一般定義在DynamicMBean中(運行時才決定管理那些資源),而model MBean管理的資源并不在MBean中,而是在外部(通常是一個類),只有在運行時,才通過set方法將其加入到model MBean中。

2、適配層:MbeanServer,提供對資源的注冊和管理

3、接入層: 提供遠程訪問的入口

二、standard MBean演示

1、根據(jù)standard MBean的要求,我們首先要定義一個MBean接口,接口的命名規(guī)范以具體的實現(xiàn)類為前綴,為了后續(xù)可以注冊到

MBean Server中

package jmx;public interface HelloMBean{ public String getName(); public void setName(String name); public String getAge(); public void setAge(String age); public void helloWorld(); public void helloWorld(String str); public void getTelephone();}

2、定義一個實現(xiàn)類

package jmx;/* * 該類名稱必須與實現(xiàn)的接口的前綴保持一致(即MBean前面的名稱 */public class Hello implements HelloMBean{ private String name; private String age; public void getTelephone() { System.out.println('get Telephone'); } public void helloWorld() { System.out.println('hello world'); } public void helloWorld(String str) { System.out.println('helloWorld:' + str); } public String getName() { System.out.println('get name 123'); return name; } public void setName(String name) { System.out.println('set name 123'); this.name = name; } public String getAge() { System.out.println('get age 123'); return age; } public void setAge(String age) { System.out.println('set age 123'); this.age = age; } }

3、定義agent層

package jmx;import java.lang.management.ManagementFactory;import javax.management.JMException;import javax.management.MBeanServer;import javax.management.ObjectName;public class HelloAgent{ public static void main(String[] args) throws JMException, Exception { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ObjectName helloName = new ObjectName('jmxBean:name=hello'); //create mbean and register mbean server.registerMBean(new Hello(), helloName); Thread.sleep(60*60*1000); }}

1、 通過工廠類獲取Mbean Server,用來做Mbean的容器

2、 ObjectName的取名規(guī)范:域名:name=Mbean名稱,其中域名和Mbean的名稱可以任取。這樣定義后,我們可以唯一標示我們定義的這個Mbean的實現(xiàn)類了

3、最后將Hello這個類注冊到MbeanServer中,注入需要創(chuàng)建一個ObjectName類,我們可以用jdk自帶的Jconsole用來觀察,可以設(shè)置屬性值和調(diào)用相關(guān)方法。

三、Notification

MBean之間的通信是必不可少的,Notification起到了在MBean之間溝通橋梁的作用。JMX 的通知由四部分組成:

1、Notification這個相當于一個信息包,封裝了需要傳遞的信息

2、Notification broadcaster這個相當于一個廣播器,把消息廣播出。

3、Notification listener 這是一個監(jiān)聽器,用于監(jiān)聽廣播出來的通知信息。

4、Notification filiter 這個一個過濾器,過濾掉不需要的通知。這個一般很少使用。保留Hello及HelloMBean,增加如下

package jmx;public interface JackMBean{ public void hi();}

package jmx;import javax.management.Notification;import javax.management.NotificationBroadcasterSupport;public class Jack extends NotificationBroadcasterSupport implements JackMBean{ private int seq = 0; public void hi() { //創(chuàng)建一個信息包 Notification notify = //通知名稱;誰發(fā)起的通知;序列號;發(fā)起通知時間;發(fā)送的消息 new Notification('jack.hi',this,++seq,System.currentTimeMillis(),'jack'); sendNotification(notify); }}

這里的類Jack不僅實現(xiàn)了MBean接口,還繼承了NotificationBroadcasterSupport。jack在這里創(chuàng)建并發(fā)送了一個消息包。

package jmx;import javax.management.Notification;import javax.management.NotificationListener;public class HelloListener implements NotificationListener{ public void handleNotification(Notification notification, Object handback) { if(handback instanceof Hello) { Hello hello = (Hello)handback; hello.printHello(notification.getMessage()); } }}

對HelloAgent做以下修改

package jmx;import java.lang.management.ManagementFactory;import javax.management.JMException;import javax.management.MBeanServer;import javax.management.ObjectName;public class HelloAgent{ public static void main(String[] args) throws JMException, Exception { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ObjectName helloName = new ObjectName('yunge:name=Hello'); Hello hello=new Hello(); server.registerMBean(hello, helloName); Jack jack = new Jack(); server.registerMBean(jack, new ObjectName('jack:name=Jack')); jack.addNotificationListener(new HelloListener(), null, hello); Thread.sleep(500000); }}

我們利用jconsole調(diào)用jack的hi方法,這里當jack發(fā)出消息后,Notification被廣播至所有的MBean,當有MBean屬于Hello類時則調(diào)用Hello的printHello()方法。

四、JMX的應(yīng)用

在linux下利用jmx監(jiān)控Tomcat,在catlina.sh中進行一些環(huán)境變零的配置

配置 功能 Dcom.sun.management.jmxremote=true 相關(guān) JMX 代理偵聽開關(guān) Djava.rmi.server.hostname 服務(wù)器端的IP Dcom.sun.management.jmxremote.port=29094 相關(guān) JMX 代理偵聽請求的端口 Dcom.sun.management.jmxremote.ssl=false 指定是否使用 SSL 通訊 Dcom.sun.management.jmxremote.authenticate=false 指定是否需要密碼驗證

Java Management Extensions管理擴展原理解析

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 能在线观看的一区二区三区 | 久久国产成人午夜aⅴ影院 久久国产成人亚洲精品影院老金 | 精品一区二区在线观看 | 成人国产网站v片免费观看 成人国产午夜在线视频 | 日本午夜高清视频 | 人成精品视频三区二区一区 | 国产精品日韩一区二区三区 | 在线观看二区三区午夜 | 亚洲一区二区三区久久精品 | 亚洲精品不卡在线 | jul-179在线中文字幕 | 国产免费自拍视频 | 99热热久久这里只有精品166 | 亚洲精品国产第一区第二区国 | 俺来也俺来也天天夜夜视频 | 国产精品一区高清在线观看 | 国内自拍网站 | 亚洲国产精品a一区二区三区 | 国产一区亚洲二区三区毛片 | 国产精品免费一区二区三区 | 亚洲欧美国产精品久久久 | 在线a人片免费观看国产 | 久草免费在线 | 国产成人3p视频免费观看 | 亚洲国产二区三区久久 | 成人a毛片久久免费播放 | 亚洲欧美第一 | 午夜影院免费体验 | 久色福利 | 黄色三级三级三级免费看 | 中文字幕一区视频一线 | 日韩欧美一区二区三区免费观看 | 欧美国产视频 | 爆操巨乳美女 | 精品在线99| 国产精品二区页在线播放 | 国产精品毛片va一区二区三区 | 男人的天堂久久香蕉国产 | 成人区在线观看免费视频 | 可以免费看黄的网站 | 欧美成人综合在线观看视频 |