Основное введение в JMX
1. Вступление
Java Management Extensions (JMX) framework был введен в Java 1.5 и с момента своего появления получил широкое признание в сообществе разработчиков Java.
Он предоставляет легко настраиваемую, масштабируемую, надежную и более или менее дружественную инфраструктуру для управления приложениями Java как локально, так и удаленно. Фреймворк представляет концепцию MBeans для управления приложениями в реальном времени.
Эта статья представляет собой пошаговое руководство для начинающих по созданию и настройке базового MBean-компонента и управлению им через JConsole.
2. Архитектура JMX
Архитектура JMX использует трехуровневый подход:
-
Instrumentation layer: MBean-компоненты, зарегистрированные с помощью JMX-агента, через которые осуществляется управление ресурсами
-
JMX agent layer: основной компонент (MbeanServer), который поддерживает реестр управляемых компонентов MBean и предоставляет интерфейс для доступа к ним.
-
Remote management layer: обычно клиентский инструмент, такой как JConsole
3. Создание класса MBean
При создании MBeans существует определенный шаблон проектирования, которому мы должны соответствовать. Класс модели MBean ДОЛЖЕН реализовывать интерфейс со следующим именем:*“model class name” plus MBean*.
Итак, давайте определим наш интерфейс MBean и класс, реализующий его:
public interface GameMBean {
public void playFootball(String clubName);
public String getPlayerName();
public void setPlayerName(String playerName);
}
public class Game implements GameMBean {
private String playerName;
@Override
public void playFootball(String clubName) {
System.out.println(
this.playerName + " playing football for " + clubName);
}
@Override
public String getPlayerName() {
System.out.println("Return playerName " + this.playerName);
return playerName;
}
@Override
public void setPlayerName(String playerName) {
System.out.println("Set playerName to value " + playerName);
this.playerName = playerName;
}
}
КлассGame переопределяет методplayFootball() родительского интерфейса. Помимо этого, у класса есть переменная-членplayerName и средство получения / установки для нее.
Обратите внимание, что getter / setter также объявляются в родительском интерфейсе.
4. Инструменты с помощью JMX Agent
Агенты JMX - это объекты, работающие локально или удаленно, которые обеспечивают доступ к управлению для зарегистрированных MBean-компонентов.
Давайте воспользуемсяPlatformMbeanServer - основным компонентом агента JMX и зарегистрируем в нем MBeanGame.
Мы будем использовать другую сущность -ObjectName - для регистрации экземпляра классаGame сPlatformMbeanServer; это строка, состоящая из двух частей:
-
domain: может быть произвольной строкой, но, согласно соглашениям об именах MBean, она должна иметь имя пакета Java (избегает конфликтов имен)
-
key: список пар «key=value», разделенных запятой
В этом примере вот нашObjectName:“com.baledung.tutorial:type=basic,name=game”. __
Мы получимMBeanServer из фабричного классаjava.lang.management.ManagementFactory:
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
И мы зарегистрируем модельный класс MBean, используя его собственныйObjectName:
ObjectName objectName = null;
try {
objectName = new ObjectName("com.example.tutorial:type=basic,name=game");
} catch (MalformedObjectNameException e) {
e.printStackTrace();
}
Наконец, чтобы проверить это - мы добавим циклwhile, чтобы предотвратить завершение работы приложения до того, как мы сможем получить доступ к MBean через JConsole:
while (true) {
}
5. Доступ к MBean
5.1. Подключение со стороны клиента
-
Запустите приложение в Eclipse
-
Запустите Jconsole (находится в папке bin установочного каталога JDK вашего компьютера)
-
Соединение → новое соединение → выберите локальный процесс Java в этом руководстве → Подключиться → Предупреждение о небезопасном соединении SSl → Продолжить с небезопасным соединением
-
После того, как соединение установлено, нажмите на верхнюю правую вкладку MBeans панели просмотра
-
Список зарегистрированных MBeans появится в левой колонке
-
Щелкните com.example.tutorial → basic → game.
-
Под игрой будет две строки, по одной для атрибутов и операций.
Вот краткий обзор части процесса JConsole:
5.2. Управление MBean
Основы управления MBean просты:
-
Атрибуты могут читать или писать
-
Методы могут быть вызваны и аргументы могут быть предоставлены им или значения, возвращаемые из них
Давайте посмотрим, что это означает для MBeanGame на практике:
-
attribute: введите новое значение для атрибутаplayerName - например, «Messi» и щелкнитеRefresh button
В консоли Eclipse появится следующий журнал:
Установите playerName на значение Месси
-
operations: введите значение для строкового аргумента методаplayFootBall() - например, «Барселона» и нажмите кнопку метода. Появитсяwindow alert for successful invocation
В консоли eclipse появится следующий журнал:
Месси играет в футбол за Барселону
6. Заключение
В этом руководстве рассматриваются основы настройки приложения с поддержкой JMX с использованием MBeans. Также обсуждалось использование типичного клиентского инструмента, такого как JConsole, для управления инструментированным MBean.
Область технологии JMX очень широка по объему и охвату. Это руководство можно считать шагом к этому новичку.
Исходный код этого руководства можно найтиover on Github.