Перейти к основному содержимому

Базовое введение в JMX

· 4 мин. чтения

1. Введение

Платформа Java Management Extensions (JMX) была представлена в Java 1.5 и с момента своего появления получила широкое признание в сообществе разработчиков Java.

Он предоставляет легко настраиваемую, масштабируемую, надежную и более или менее удобную инфраструктуру для локального или удаленного управления Java-приложением. Фреймворк представляет концепцию MBeans для управления приложениями в реальном времени.

Эта статья представляет собой пошаговое руководство для начинающих по созданию и настройке базового MBean и управлению им через JConsole.

2. Архитектура JMX

Архитектура JMX следует трехуровневому подходу:

  1. Инструментальный уровень: MBeans, зарегистрированные с помощью JMX-агента, через который осуществляется управление ресурсами .
  2. Уровень агента JMX: основной компонент (MbeanServer), который поддерживает реестр управляемых компонентов MBean и предоставляет интерфейс для доступа к ним.
  3. Уровень удаленного управления: обычно инструмент на стороне клиента, такой как 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. Подключение со стороны клиента

  1. Запустите приложение в Eclipse
  2. Запустите Jconsole (находится в папке bin каталога установки JDK на вашем компьютере)
  3. Соединение -> новое соединение -> выберите локальный процесс Java из этого руководства -> Соединение -> Предупреждение о небезопасном соединении SSL -> Продолжить с небезопасным соединением
  4. После установления соединения щелкните вкладку MBeans в правом верхнем углу панели просмотра.
  5. Список зарегистрированных MBean появится в левой колонке.
  6. Нажмите com.foreach.tutorial -> основной -> игра
  7. В игре будет две строки, по одной для атрибутов и операций.

Вот краткий обзор части процесса JConsole:

./565d597b3f9a1aab26efbd26a2229876.gif

5.2. Управление MBean

Основы управления MBean просты:

  • Атрибуты могут быть прочитаны или записаны
  • Можно вызывать методы и передавать им аргументы или возвращать из них значения.

Давайте посмотрим, что это означает для Game MBean на практике:

  • attribute : введите новое значение для атрибута playerName — например, «Месси» и нажмите ** кнопку «Обновить ».

    **

В консоли Eclipse появится следующий журнал:

Установите для playerName значение Месси

  • операции : введите значение аргумента String метода playFootBall() — например, «Барселона» и нажмите кнопку метода. Появится окно предупреждения об успешном вызове

В консоли eclipse появится следующий журнал:

Месси играет в футбол за Барселону

6. Заключение

В этом руководстве были затронуты основы настройки приложения с поддержкой JMX с использованием MBean. Кроме того, обсуждалось использование типичного клиентского инструмента, такого как JConsole, для управления инструментальным компонентом MBean.

Сфера применения технологии JMX очень широка. Этот урок можно считать шагом новичка к этому.

Исходный код этого руководства можно найти на Github .