В прошлой статье я рассказывал про MBeans, в этой речь пойдёт о MXBeans.
MXBean — это специальный тип MBean, который использует только предопределённое множество типов данных. Это нужно для того, чтобы наш MBean мог использовать любой клиент, даже тот, у которого нет доступа к классам модели нашего MBean-а.
MXBean-ы объявляются аналогично MBean-ам с помощью интерфейса MyNameMXBean и класса Java, реализующего этот интерфейс. Однако класс вовсе не обязательно называть MyName. Каждый метод в интерфейсе определяет атрибут или операцию для MXBean-а. Вместо следования правила именования интерфейса MyNameMXBean можно просто аннотировать интерфейс с помощью @MXBean.
Основная идея в MXBean-ах в том, что для стандартных типов используются сами стандартные типы, а все другие типы автоматически оборачиваются в CompositeDataSupport или TabularDataSupport.
В качестве примера можете рассмотреть небольшую программу с MXBean-ами.
Файл «Monster.java»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package ru.urvanov.javaexamples.mxbeans; import java.beans.ConstructorProperties; public class Monster { private String name; private int level; @ConstructorProperties({"name", "level"}) public Monster(String name, int level) { this.name = name; this.level = level; } public String getName() { return name; } public int getLevel() { return level; } } |
Файл «LairMXBean.java»:
1 2 3 4 5 6 |
package ru.urvanov.javaexamples.mxbeans; public interface LairMXBean { public Monster getMonster(); public void killMonster(); } |
Файл «Lair.java»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package ru.urvanov.javaexamples.mxbeans; public class Lair implements LairMXBean { private Monster monster; public Lair (Monster monster) { this.monster = monster; } public Monster getMonster() { return monster; } public void killMonster() { this.monster = null; } } |
Файл «App.java»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package ru.urvanov.javaexamples.mxbeans; import java.lang.management.ManagementFactory; import javax.management.MBeanServer; import javax.management.ObjectName; /** * <a href="https://urvanov.ru">https://urvanov.ru</a> * */ public class App { public static void main( String[] args ) throws Exception { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName mxbeanName = new ObjectName("ru.urvanov.javaexamples.mxbeans:type=Lair"); Lair mxbean = new Lair(new Monster("Goblin", 13)); mbs.registerMBean(mxbean, mxbeanName); System.out.println("Waiting..."); Thread.sleep(Long.MAX_VALUE); } } |
Запустите «App.java» на выполнение и подключитесь JConsole-ю точно так же, как это делали для MBean-ов.
Откройте вкладку с MBean-ами и посмотрите содержимое поля monster. Вы увидите, что там содержится CompositeDataSupport. Откройте его двойным кликом и увидите содержимое полей name и level.
Скачать ZIP-архив с исходниками примера MXBean.