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