最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Management Extensions管理擴(kuò)展原理解析

 更新時(shí)間:2020年04月07日 10:37:13   作者:ZMRWEGo  
這篇文章主要介紹了Java Management Extensions管理擴(kuò)展原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

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

一、JMX架構(gòu)圖

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

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

Mbean分為如下四中

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

2、適配層:MbeanServer,提供對(duì)資源的注冊(cè)和管理

3、接入層: 提供遠(yuǎn)程訪問(wèn)的入口

二、standard MBean演示

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

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、定義一個(gè)實(shí)現(xiàn)類

package jmx;

/*
 * 該類名稱必須與實(shí)現(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、 通過(guò)工廠類獲取Mbean Server,用來(lái)做Mbean的容器

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

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

三、Notification

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

1、Notification這個(gè)相當(dāng)于一個(gè)信息包,封裝了需要傳遞的信息

2、Notification broadcaster這個(gè)相當(dāng)于一個(gè)廣播器,把消息廣播出。

3、Notification listener 這是一個(gè)監(jiān)聽(tīng)器,用于監(jiān)聽(tīng)廣播出來(lái)的通知信息。

4、Notification filiter 這個(gè)一個(gè)過(guò)濾器,過(guò)濾掉不需要的通知。這個(gè)一般很少使用。保留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)建一個(gè)信息包
    Notification notify = 
      //通知名稱;誰(shuí)發(fā)起的通知;序列號(hào);發(fā)起通知時(shí)間;發(fā)送的消息
      new Notification("jack.hi",this,++seq,System.currentTimeMillis(),"jack");
    sendNotification(notify);
  }

}

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

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());
    }
  }
}

對(duì)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方法,這里當(dāng)jack發(fā)出消息后,Notification被廣播至所有的MBean,當(dāng)有MBean屬于Hello類時(shí)則調(diào)用Hello的printHello()方法。

四、JMX的應(yīng)用

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Tomcat內(nèi)存溢出分析及解決方法

    Tomcat內(nèi)存溢出分析及解決方法

    堆是給開(kāi)發(fā)人員用的上面說(shuō)的就是,是在JVM啟動(dòng)時(shí)創(chuàng)建;非堆是留給JVM自己用的,用來(lái)存放類的信息的,本文將詳細(xì)介紹Tomcat內(nèi)存溢出,需要了解更多的朋友可以參考下
    2012-11-11
  • Java與Oracle實(shí)現(xiàn)事務(wù)(JDBC事務(wù))實(shí)例詳解

    Java與Oracle實(shí)現(xiàn)事務(wù)(JDBC事務(wù))實(shí)例詳解

    這篇文章主要介紹了Java與Oracle實(shí)現(xiàn)事務(wù)(JDBC事務(wù))實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 詳解SpringBoot開(kāi)發(fā)使用@ImportResource注解影響攔截器

    詳解SpringBoot開(kāi)發(fā)使用@ImportResource注解影響攔截器

    這篇文章主要介紹了詳解SpringBoot開(kāi)發(fā)使用@ImportResource注解影響攔截器,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Mybatis 緩存原理及失效情況解析

    Mybatis 緩存原理及失效情況解析

    這篇文章主要介紹了Mybatis 緩存原理及失效情況解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的示例詳解

    SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的示例詳解

    雖然Spring官方給我們提供了很多的啟動(dòng)器供我們使用,但有時(shí)候我們也會(huì)遇到某些特殊場(chǎng)景,這些啟動(dòng)器滿足不了。這個(gè)時(shí)候就需要自定義一個(gè)啟動(dòng)器供我們使用,本文為大家介紹了SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的方法,希望對(duì)大家有所幫助
    2023-01-01
  • java使用RSA加密方式實(shí)現(xiàn)數(shù)據(jù)加密解密的代碼

    java使用RSA加密方式實(shí)現(xiàn)數(shù)據(jù)加密解密的代碼

    這篇文章給大家分享java使用RSA加密方式實(shí)現(xiàn)數(shù)據(jù)加密解密,通過(guò)實(shí)例代碼文字相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下
    2019-11-11
  • java httpclient設(shè)置超時(shí)時(shí)間和代理的方法

    java httpclient設(shè)置超時(shí)時(shí)間和代理的方法

    這篇文章主要介紹了java httpclient設(shè)置超時(shí)時(shí)間和代理的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Retrofit+Rxjava實(shí)現(xiàn)文件上傳和下載功能

    Retrofit+Rxjava實(shí)現(xiàn)文件上傳和下載功能

    這篇文章主要介紹了Retrofit+Rxjava實(shí)現(xiàn)文件上傳和下載功能,文中提到了單文件上傳和多文件上傳及相關(guān)參數(shù)的請(qǐng)求,需要的朋友參考下吧
    2017-11-11
  • 基于Feign實(shí)現(xiàn)異步調(diào)用

    基于Feign實(shí)現(xiàn)異步調(diào)用

    近期,需要對(duì)之前的接口進(jìn)行優(yōu)化,縮短接口的響應(yīng)時(shí)間,但是springcloud中的feign是不支持傳遞異步化的回調(diào)結(jié)果的,因此有了以下的解決方案,記錄一下,需要的朋友可以參考下
    2021-05-05
  • Java的DelayQueue延遲隊(duì)列簡(jiǎn)單使用代碼實(shí)例

    Java的DelayQueue延遲隊(duì)列簡(jiǎn)單使用代碼實(shí)例

    這篇文章主要介紹了Java的DelayQueue延遲隊(duì)列簡(jiǎn)單使用代碼實(shí)例,DelayQueue是一個(gè)延遲隊(duì)列,插入隊(duì)列的數(shù)據(jù)只有達(dá)到設(shè)置的延遲時(shí)間時(shí)才能被取出,否則線程會(huì)被阻塞,插入隊(duì)列的對(duì)象必須實(shí)現(xiàn)Delayed接口,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

阿合奇县| 平邑县| 泰宁县| 关岭| 洛浦县| 乌兰浩特市| 宾阳县| 新和县| 浪卡子县| 保亭| 乌拉特后旗| 峨边| 会理县| 恩平市| 建阳市| 杭州市| 湖州市| 乌拉特中旗| 满洲里市| 中超| 珠海市| 白城市| 靖远县| 囊谦县| 水城县| 诏安县| 兴安县| 深水埗区| 牟定县| 年辖:市辖区| 新晃| 钟山县| 四平市| 翁源县| 万源市| 新河县| 枞阳县| 平南县| 嘉荫县| 乐昌市| 独山县|