Рубрики
Без рубрики

Что такое JMX? 10 минут Быстрого запуска учебника по JMX (MBean, JConsole)

Учебник по JMX, Что такое JMX, MBean, Пример Java JMX, Консоль JMX, JConsole, 10-минутный краткий учебник по API JMX для начинающих. JMX Mbeans и консоль JMX

Автор оригинала: Pankaj Kumar.

Расширения управления Java ( JMX ) были представлены в выпуске J2SE 5.0. Он обеспечивает архитектуру для динамического управления ресурсами во время выполнения. JMX используется в основном в корпоративных приложениях для настройки системы или для получения состояния приложения в любой момент времени.

Чтобы управлять любым ресурсом через JMX, нам нужно создать Управляемые компоненты (MBeans), а затем зарегистрировать его на MBeanServer . Сервер MBean работает в качестве агента управления для всех зарегистрированных пользователей MBean.

Мы используем Разъемы JMX для подключения к серверу MBean и управления зарегистрированными ресурсами. Например, JDK поставляется с JConsole , через который вы можете подключиться к любому локальному или удаленному серверу MBeanServer. Если вы работали на сервере JBoss или любых корпоративных серверах, все они поставляются с консолью JMX для мониторинга и управления MBeans.

Здесь мы изучим основы JMX и то, как использовать JConsole для подключения и управления MBeans. Давайте начнем прямо сейчас…

Прежде всего, нам нужно создать MBean, и для этого нам нужно сначала создать интерфейс, который определяет атрибуты и операции, которые мы хотим предоставить. Имя интерфейса должно заканчиваться на MBean . Если вы просто хотите разрешить только чтение, вы можете оставить методы настройки.

Прежде всего, нам нужно создать MBean, и для этого нам нужно сначала создать интерфейс, который определяет атрибуты и операции, которые мы хотим предоставить. || Имя интерфейса должно заканчиваться на MBean || . Если вы просто хотите разрешить только чтение, вы можете оставить методы настройки.

package com.journaldev.jmx;

public interface SystemConfigMBean {

    public void setThreadCount(int noOfThreads);
    public int getThreadCount();
    
    public void setSchemaName(String schemaName);
    public String getSchemaName();
    
    // any method starting with get and set are considered
    // as attributes getter and setter methods, so I am 
    // using do* for operation.
    public String doConfig();
}

Следующий шаг-обеспечить фактическую реализацию интерфейса MBean. Соглашение об именовании JMX заключается в том, чтобы сохранить имя класса реализации в качестве имени интерфейса – MBean. Таким образом, мой класс реализации будет System Config .

Следующий шаг-обеспечить фактическую реализацию интерфейса MBean. Соглашение об именовании JMX заключается в том, чтобы сохранить имя класса реализации в качестве имени интерфейса – MBean. Таким образом, мой класс реализации будет || System Config || .

package com.journaldev.jmx;

public class SystemConfig implements SystemConfigMBean {

    private int threadCount;
    private String schemaName;
    
    public SystemConfig(int numThreads, String schema){
        this.threadCount=numThreads;
        this.schemaName=schema;
    }
    
    @Override
    public void setThreadCount(int noOfThreads) {
        this.threadCount=noOfThreads;
    }


    @Override
    public int getThreadCount() {
        return this.threadCount;
    }


    @Override
    public void setSchemaName(String schemaName) {
        this.schemaName=schemaName;
    }


    @Override
    public String getSchemaName() {
        return this.schemaName;
    }
    
    @Override
    public String doConfig(){
        return "No of Threads="+this.threadCount+" and DB Schema Name="+this.schemaName;
    }

}

Теперь нам нужно зарегистрировать вашу реализацию MBean на сервере MBean. Мы можем сохранить любое название нашего класса. После регистрации MBean я буду поддерживать поток до тех пор, пока мы не изменим количество потоков на 0 через jconsole, это будет логикой завершения нашего приложения.

Теперь нам нужно зарегистрировать вашу реализацию MBean на сервере MBean. Мы можем сохранить любое название нашего класса. После регистрации MBean я буду поддерживать поток до тех пор, пока мы не изменим количество потоков на 0 через jconsole, это будет логикой завершения нашего приложения.

package com.journaldev.jmx;

import java.lang.management.ManagementFactory;

import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;

public class SystemConfigManagement {
    private static final int DEFAULT_NO_THREADS=10;
    private static final String DEFAULT_SCHEMA="default";

    public static void main(String[] args) throws MalformedObjectNameException, InterruptedException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {
        //Get the MBean server
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
        //register the MBean
        SystemConfig mBean = new SystemConfig(DEFAULT_NO_THREADS, DEFAULT_SCHEMA);
        ObjectName name = new ObjectName("com.journaldev.jmx:type=SystemConfig");
        mbs.registerMBean(mBean, name);
        do{
            Thread.sleep(3000);
            System.out.println("Thread Count="+mBean.getThreadCount()+":::Schema Name="+mBean.getSchemaName());
        }while(mBean.getThreadCount() !=0);
        
    }

}

Когда я запускаю вышеуказанную программу, она регистрирует вашу реализацию MBean на сервере платформы MBean и продолжает печатать следующие строки на консоли.

Thread Count=10:::Schema Name=default
Thread Count=10:::Schema Name=default
Thread Count=10:::Schema Name=default

Давайте запустим JConsole прямо сейчас и проверим все опции, которые предоставляет наш MBean. Чтобы запустить консоль, все, что вам нужно сделать, это открыть окно терминала и запустить команду jconsole .

JConsole позволяет создавать локальное соединение, а также подключение к удаленным процессам, вы сможете увидеть название нашей программы в списке локальных процессов. Просто выберите приложение и нажмите кнопку Подключиться, после подключения перейдите на вкладку MBean, и вы увидите, что мы можем динамически изменять значение threadCount и Имя схемы , и любое измененное значение будет отражено в консоли, где запущено наше приложение. Нам также представлены методы, которые мы можем использовать.

Как только вы измените количество потоков на 0, приложение выйдет из цикла выполнения и завершит работу.

Некоторые из преимуществ использования JMX заключаются в следующем:

  • JMX позволяет нам управлять нашим приложением во время выполнения без каких-либо значительных инвестиций и предоставляет готовое решение.
  • Использование JMX легко и сокращает усилия и инвестиции для создания любого инструмента управления для наших приложений.