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

Основное введение в JMX

1. Вступление

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

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

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

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

Архитектура JMX использует трехуровневый подход:

  1. Instrumentation layer: MBean-компоненты, зарегистрированные с помощью JMX-агента, через которые осуществляется управление ресурсами

  2. JMX agent layer: основной компонент (MbeanServer), который поддерживает реестр управляемых компонентов MBean и предоставляет интерфейс для доступа к ним.

  3. 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. Подключение со стороны клиента

  1. Запустите приложение в Eclipse

  2. Запустите Jconsole (находится в папке bin установочного каталога JDK вашего компьютера)

  3. Соединение → новое соединение → выберите локальный процесс Java в этом руководстве → Подключиться → Предупреждение о небезопасном соединении SSl → Продолжить с небезопасным соединением

  4. После того, как соединение установлено, нажмите на верхнюю правую вкладку MBeans панели просмотра

  5. Список зарегистрированных MBeans появится в левой колонке

  6. Щелкните com.example.tutorial → basic → game.

  7. Под игрой будет две строки, по одной для атрибутов и операций.

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

image

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.