1. Введение
Платформа Java Management Extensions (JMX) была представлена в Java 1.5 и с момента своего появления получила широкое признание в сообществе разработчиков Java.
Он предоставляет легко настраиваемую, масштабируемую, надежную и более или менее удобную инфраструктуру для локального или удаленного управления Java-приложением. Фреймворк представляет концепцию MBeans для управления приложениями в реальном времени.
Эта статья представляет собой пошаговое руководство для начинающих по созданию и настройке базового MBean и управлению им через JConsole.
2. Архитектура JMX
Архитектура JMX следует трехуровневому подходу:
- Инструментальный уровень: MBeans, зарегистрированные с помощью JMX-агента, через который осуществляется управление ресурсами .
- Уровень агента JMX: основной компонент (MbeanServer), который поддерживает реестр управляемых компонентов MBean и предоставляет интерфейс для доступа к ним.
- Уровень удаленного управления: обычно инструмент на стороне клиента, такой как JConsole .
3. Создание класса MBean
При создании MBean существует определенный шаблон проектирования, которому мы должны соответствовать. Класс модели MBean ДОЛЖЕН реализовать интерфейс со следующим именем: «имя класса модели» плюс 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
и геттер/сеттер для него.
Обратите внимание, что геттер/сеттер также объявлен в родительском интерфейсе.
4. Инструментирование с помощью агента JMX
Агенты JMX — это объекты, работающие локально или удаленно, которые предоставляют доступ к управлению зарегистрированными в них компонентами MBean.
Давайте воспользуемся PlatformMbeanServer
— основным компонентом JMX-агента и зарегистрируем в нем Game
MBean.
Мы будем использовать другую сущность — ObjectName
— для регистрации экземпляра класса Game с помощью
PlatformMbeanServer
; это строка, состоящая из двух частей:
- domain : может быть произвольной строкой, но согласно соглашениям об именах MBean, он должен иметь имя пакета Java (избегает конфликтов имен)
- ключ: список пар «
ключ=значение
», разделенных запятой
В этом примере мы будем использовать: «com.baledung.tutorial:type=basic,name=game».
``
Мы получим MBeanServer
из фабричного класса java.lang.management.ManagementFactory.
Затем мы зарегистрируем MBean модели, используя созданное ObjectName:
try {
ObjectName objectName = new ObjectName("com.foreach.tutorial:type=basic,name=game");
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
server.registerMBean(new Game(), objectName);
} catch (MalformedObjectNameException | InstanceAlreadyExistsException |
MBeanRegistrationException | NotCompliantMBeanException e) {
// handle exceptions
}
Наконец, просто чтобы проверить это, мы добавим цикл while
, чтобы предотвратить завершение приложения до того, как мы сможем получить доступ к MBean через JConsole:
while (true) {
}
5. Доступ к MBean
5.1. Подключение со стороны клиента
- Запустите приложение в Eclipse
- Запустите Jconsole (находится в папке bin каталога установки JDK на вашем компьютере)
- Соединение -> новое соединение -> выберите локальный процесс Java из этого руководства -> Соединение -> Предупреждение о небезопасном соединении SSL -> Продолжить с небезопасным соединением
- После установления соединения щелкните вкладку MBeans в правом верхнем углу панели просмотра.
- Список зарегистрированных MBean появится в левой колонке.
- Нажмите com.foreach.tutorial -> основной -> игра
- В игре будет две строки, по одной для атрибутов и операций.
Вот краткий обзор части процесса JConsole:
5.2. Управление MBean
Основы управления MBean просты:
- Атрибуты могут быть прочитаны или записаны
- Можно вызывать методы и передавать им аргументы или возвращать из них значения.
Давайте посмотрим, что это означает для Game
MBean на практике:
attribute
: введите новое значение для атрибутаplayerName
— например, «Месси» и нажмите ** кнопку «Обновить ».**
В консоли Eclipse появится следующий журнал:
Установите для playerName значение Месси
операции
: введите значение аргумента String методаplayFootBall()
— например, «Барселона» и нажмите кнопку метода. Появится окно предупреждения об успешном вызове
В консоли eclipse появится следующий журнал:
Месси играет в футбол за Барселону
6. Заключение
В этом руководстве были затронуты основы настройки приложения с поддержкой JMX с использованием MBean. Кроме того, обсуждалось использование типичного клиентского инструмента, такого как JConsole, для управления инструментальным компонентом MBean.
Сфера применения технологии JMX очень широка. Этот урок можно считать шагом новичка к этому.
Исходный код этого руководства можно найти на Github .