Автор оригинала: 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 легко и сокращает усилия и инвестиции для создания любого инструмента управления для наших приложений.