Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации
Содержание | Предыдущий | Следующий Расширения управления Java (JMX) Технологическое Учебное руководство

 Глава 2

Основы API JMX

Эта глава представляет фундаментальное понятие Расширений управления Java (JMX) API, а именно, управляемые бобы, или MBeans.

MBean является управляемым объектом Java, подобным JavaBeanTM, который следует за шаблонами разработки, сформулированными в уровне инструментария спецификации JMX. MBean может представить устройство, приложение, или любой ресурс, которым нужно управлять. MBeans представляют интерфейс управления: ряд читаемых и/или перезаписываемых атрибутов и ряда invokable операции, наряду с самоописанием. Интерфейс управления не изменяется в течение жизни экземпляра MBean. MBeans может также испустить уведомления, когда определенные определенные события имеют место.

Спецификация JMX определяет четыре типа MBean: стандартные MBeans, динамический MBeans, открывают MBeans и модель MBeans. Примеры в этой главе демонстрируют самый простой тип MBean, а именно, стандартного MBeans.

Стандартный MBeans

Стандартный MBean определяется при записи вызванного интерфейса Java SomethingMBean и Java class вызывают Something это реализует тот интерфейс. Каждый метод в интерфейсе определяет или атрибут или работу в MBean. По умолчанию каждый метод определяет работу. Атрибуты и операции являются просто методами, которые следуют за определенными шаблонами разработки. Стандартный MBean составляется из интерфейса MBean, который перечисляет методы для всех представленных атрибутов и операций, и class, который реализует этот интерфейс и обеспечивает функциональность инструментованного ресурса.

Следующие разделы анализируют стандарт в качестве примера MBean, и простой агент JMX, который управляет MBean. Примеры кода берутся из каталога work_dir/jmx_examples/Essential/com/example/mbeans.

Интерфейс MBean

Пример очень основного интерфейса MBean, названного HelloMBean, показывается в  ПРИМЕРЕ КОДА 2-1.

 ПРИМЕР КОДА 2-1 Пример Интерфейс MBean, HelloMBean
 
package com.example.mbeans; 
 
public interface HelloMBean { 
 
    public void sayHello(); 
    public int add(int x, int y); 
 
    public String getName(); 
 
    public int getCacheSize(); 
    public void setCacheSize(int size); 
} 
 

Как утверждено ранее, условно интерфейс MBean берет имя Java class, который реализует это с суффиксным добавленным MBean. Так, в этом случае интерфейс вызывают HelloMBean. Hello class, который реализует этот интерфейс, описывается в Разделе "Реализация MBean".

Согласно спецификации JMX, интерфейс MBean состоит из именованных и введенных атрибутов, которые читаемы и возможно перезаписываемые, и названные и введенные операции, которые могут быть вызваны приложениями, которыми управляет MBean. HelloMBean интерфейс, показанный в  ПРИМЕРЕ КОДА 2-1, объявляет две операции: методы Java add() и sayHello().

Из двух атрибутов, которые объявляются HelloMbean, Name строка только для чтения, и CacheSize целое число, которое может быть и считано и записано. Метод get и методы метода set объявляются, чтобы позволить управляемое приложение доступу и возможно изменить значения атрибута. Как определено спецификацией JMX, метод get является любым открытым методом, имя которого начинается, добираются и который не возвращается пусто. Метод get позволяет менеджеру считать значение атрибута, тип которого является типом возвращенного объекта. Метод set является любым открытым методом, имя которого начинается с набора и который берет единственный параметр. Метод set позволяет менеджеру записать новое значение в атрибуте, тип которого является тем же самым как тем из параметра.

Реализацию этих операций и атрибутов показывают в следующем разделе.

Реализация MBean

Hello class, показанный в  ПРИМЕРЕ КОДА 2-1 реализация HelloMBean.

 ПРИМЕР КОДА 2-1 Пример Класс Реализации MBean, Привет
 
package com.example.mbeans; 
 
public class Hello implements HelloMBean { 
    public void sayHello() { 
        System.out.println("hello, world"); 
    } 
 
    public int add(int x, int y) { 
        return x + y; 
    } 
 
    public String getName() { 
        return this.name; 
    } 
 
 
    public int getCacheSize() { 
        return this.cacheSize; 
    } 
 
    public synchronized void setCacheSize(int size) { 
        this.cacheSize = size; 
 
        System.out.println("Cache size now " + this.cacheSize); 
    } 
 
    private final String name = "Reginald"; 
    private int cacheSize = DEFAULT_CACHE_SIZE; 
    private static final int DEFAULT_CACHE_SIZE = 200; 
} 
 

Прямой Java class Hello обеспечивает определения операций и приписывает объявленный HelloMBean. Поскольку можно видеть, sayHello() и add() операции чрезвычайно просты, но реальные операции могут быть столь же простыми или столь же сложными, как Вам нравится.

Методы, чтобы добраться Name атрибут и добраться и установить cacheSize атрибут также определяется. В этом примере, Name значение атрибута никогда не изменяется, но в реальном сценарии оно могло бы измениться, поскольку управляемый ресурс работает. Например, атрибут мог бы представить статистику, такую как использование памяти или время работы. Здесь, это - просто имя "Реджиналд".

Вызов setCacheSize метод позволяет Вам изменяться cacheSize атрибут от его объявленного значения по умолчанию 200. В действительности, изменение cacheSize атрибут мог потребовать, чтобы другие операции были выполнены, такие как отбрасывание записей или выделение новых. Этот пример просто печатает сообщение, чтобы подтвердить, что размер кэша изменился, но более сложные операции могли быть определены вместо простого звонка println().

С простым Hello MBean и его интерфейс, таким образом определенный, они могут теперь использоваться, чтобы управлять ресурсом, который они представляют, как показано в следующем разделе.

Управление Ресурсом

Как представлено в Расширениях управления Java (JMX) Технологический Краткий обзор, когда-то ресурс был инструментован MBeans, управлением тем ресурсом, выполняется агентом JMX.

Базовый компонент агента JMX является сервером MBean, сервером управляемого объекта, в котором регистрируются MBeans (см. документацию API для MBeanServer интерфейс для деталей реализации сервера MBean). Агент JMX также включает ряд служб, чтобы управлять MBeans.

 ПРИМЕР КОДА 2-1 подарок основной агент JMX, названный Main.

 ПРИМЕР КОДА 2-1 Создание Агента JMX
 
package com.example.mbeans; 
 
import java.lang.management.*; 
import javax.management.*; 
 
public class Main { 
 
   public static void main(String[] args) throws Exception { 
 
      MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
 
      ObjectName name = new ObjectName("com.example.mbeans:type=Hello"); 
 
      Hello mbean = new Hello(); 
 
      mbs.registerMBean(mbean, name); 
 
      System.out.println("Waiting forever..."); 
      Thread.sleep(Long.MAX_VALUE); 
   } 
} 
 

Агент JMX Main начинается, получая любой сервер MBean, который работает на платформе, вызывая getPlatformMBeanServer() метод java.lang.management.ManagementFactory class. Если нет никакого сервера MBean, уже работающего на платформе, то getPlatformMBeanServer() создает тот автоматически, вызывая метод JMX MBeanServerFactory.createMBeanServer(). MBeanServer экземпляр, полученный Main называется mbs.

Затем, Main определяет имя объекта для экземпляра MBean, который оно создаст. У каждого JMX MBean должно быть имя объекта. Имя объекта является экземпляром class JMX ObjectName, и должен соответствовать синтаксису, определенному спецификацией JMX, а именно, это должно включить домен, и список ключевых свойств (см. документацию API для ObjectName class для деталей этого синтаксиса). В имени объекта, определенном Main, name, домен com.example.mbeans (пакет, в котором пример содержатся MBeans) и ключевое свойство объявляет, что этот объект имеет тип Hello.

Экземпляр a Hello объект создается, называется mbean. Это Hello объект является самостоятельно экземпляром MBean Hello это было определено в Разделе "Реализация MBean".

Hello объект называют mbean тогда регистрируется как MBean в сервере MBean mbs с именем объекта name, передавая объект и имя объекта в звонок в метод JMX MBeanServer.registerMBean().

С Hello MBean, зарегистрированный в сервере MBean, Main будет просто ожидать операций управления, которые будут выполняться на Hello. В пределах этого примера эти операции управления вызывают sayHello(), и add(), и добираясь и устанавливая значения атрибута.

Выполнение Стандартного Примера MBean

Исследовав классы в качестве примера, можно теперь выполнить пример. Платформа Java, Standard Edition идет с управлением и контролирующей консолью, названной JConsole, который используется, чтобы взаимодействовать с MBean в этом примере. JConsole располагается в JavaSE_HOME/bin/jconsole, в котором JavaSE_HOME является каталогом установки Платформы Java, Standard Edition (Java платформа SE).

Чтобы выполнить пример, следуйте за шагами ниже, или см. README файл:

  1. Если Вы так уже не сделали, откройте work_dir/jmx_examples/Essential.

    $ cd work_dir/jmx_examples/Essential

  2. Скомпилируйте классы Java в качестве примера.

    $ javac com/example/mbeans/*.java

  3. Запустите Main приложение.

    $ java com.example.mbeans. Основной

    Вы будете видеть подтверждение это Main ожидает чего-то, чтобы произойти.

  4. Запустите JConsole в различном окне терминала на той же самой машине.

    $ jconsole

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

  5. Выбрать com.example.mbeans.Main от списка в “Новом Соединении” окно, и щелкают, "Соединяются".

    Вы будете видеть сводку текущего действия своей платформы.

  6. Щелкните по вкладке “MBeans”.

    Это телевикторины Вы весь MBeans в настоящий момент зарегистрировалось в сервере MBean.

  7. В левом фрейме расширьтесь com.example.mbeans узел в дереве MBean.

    Вы будете видеть пример MBean Hello, это создавалось и регистрировалось Main. Если Вы щелкаете Hello, Вы будете видеть его связанные Атрибуты и узлы Операций в дереве MBean.

  8. Щелкните Hello Узел MBean в дереве MBean.

    Hello Метаданные MBEAN и его связанный Дескриптор будут выведены на экран.

  9. Щелкните Attributes узел Hello MBean в дереве MBean.

    Это выводит на экран атрибуты MBean, которые были определены Hello class.

  10. Измените значение CacheSize припишите 150

    В окне терминала, в котором Вы запустили Main, Вы будете видеть подтверждение этого изменения атрибута.

  11. Щелкните Operations узел Привет MBean в дереве MBean.

    Здесь Вы будете видеть эти две операции, объявленные Hello MBean, sayHello() и add().

  12. Вызовите sayHello() работа, щелкая sayHello кнопка.

    Диалоговое окно JConsole сообщит Вам, что метод был вызван успешно, и Вы будете видеть сообщение “привет, мир” в окне терминала в который Main работает.

  13. Обеспечьте два целых числа для add() работа, чтобы сложить, и щелкнуть add кнопка.

    Вам сообщат об ответе в диалоговом окне JConsole.

  14. Щелкните "по Соединению" и затем "Выходу", чтобы выйти из JConsole.

Отправка Уведомлений

MBeans может генерировать уведомления, например чтобы сигнализировать изменение состояния, обнаруженное событие, или проблему.

Для MBean, чтобы генерировать уведомления, это должно реализовать интерфейс NotificationBroadcaster, или его подынтерфейс NotificationEmitter. Все, что Вы должны сделать, чтобы отправить уведомление, должно создать экземпляр class javax.management.Notification или подкласс (такой как AttributeChangedNotification), и передача это к NotificationBroadcasterSupport.sendNotification.

У каждого уведомления есть источник. Источник является именем объекта MBean, который испускал уведомление.

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

Есть пример стандартного MBean, который испускает уведомления в каталоге work_dir/jmx_examples/Notification/com/example/mbeans. Этим примером является по существу то же самое как пример, замеченный в Разделе "Стандартный MBeans", за исключением того, что Hello MBean реализует NotificationBroadcaster интерфейс.

Интерфейс NotificationBroadcaster

Как указано выше единственной разницей между этим примером и тем, представленным в Разделе "Стандартный MBeans", является факт, что реализация MBean учитывает отправку уведомлений.

Уведомления активируются, реализовывая NotificationBroadcaster интерфейс, как показано в  ПРИМЕРЕ КОДА 2-1.

 ПРИМЕР КОДА 2-1 Реализация Уведомления MBean
 
package com.example.mbeans; 
 
import javax.management.*; 
 
public class Hello 
        extends NotificationBroadcasterSupport implements HelloMBean { 
 
    public void sayHello() { 
        System.out.println("hello, world"); 
    } 
 
    public int add(int x, int y) { 
        return x + y; 
    } 
 
    public String getName() { 
        return this.name; 
    } 
 
    public int getCacheSize() { 
        return this.cacheSize; 
    } 
 
    public synchronized void setCacheSize(int size) { 
        int oldSize = this.cacheSize; 
        this.cacheSize = size; 
 
        System.out.println("Cache size now " + this.cacheSize); 
 
        Notification n = 
            new AttributeChangeNotification(this, 
                                            sequenceNumber++, 
                                            System.currentTimeMillis(), 
                                            "CacheSize changed", 
                                            "CacheSize", 
                                            "int", 
                                            oldSize, 
                                            this.cacheSize); 
 
        sendNotification(n); 
    } 
 
    @Override 
    public MBeanNotificationInfo[] getNotificationInfo() { 
        String[] types = new String[] { 
            AttributeChangeNotification.ATTRIBUTE_CHANGE 
        }; 
        String name = AttributeChangeNotification.class.getName(); 
        String description = "An attribute of this MBean has changed"; 
        MBeanNotificationInfo info = 
            new MBeanNotificationInfo(types, name, description); 
        return new MBeanNotificationInfo[] {info}; 
    } 
 
    private final String name = "Reginald"; 
    private int cacheSize = DEFAULT_CACHE_SIZE; 
    private static final int DEFAULT_CACHE_SIZE = 200; 
 
    private long sequenceNumber = 1; 
} 
 

Поскольку можно видеть в  ПРИМЕРЕ КОДА 2-1, этом Hello Реализация MBean расширяется NotificationBroadcasterSupport class, который непосредственно реализует NotificationEmitter интерфейс.

Операции и атрибуты устанавливаются таким же образом как прежде с единственным исключением что cacheSize метод метода set атрибута теперь определяет новое значение oldSize, который записывает cacheSize значение атрибута до операции присвоения.

Уведомление создается из экземпляра, n, из class JMX AttributeChangeNotification, который расширяется javax.management.Notification. Уведомление создается в пределах определения setCacheSize() метод, от следующей информации, к которой передают AttributeChangeNotification как параметры:

Уведомление n тогда передают к NotificationBroadcasterSupport.sendNotification() метод.

Наконец, MBeanNotification определяется, чтобы описать характеристики различных экземпляров уведомления, испускаемых MBean для данного Java class уведомления, которое в этом случае является AttributeChangeNotification уведомления.

Интерфейс MBean, HelloMBean, и агент JMX Main идентичны используемым в предыдущем примере.

Выполнение Примера Уведомления MBean

Исследовав классы в качестве примера, можно теперь выполнить пример. Этот пример снова использует JConsole, чтобы взаимодействовать Hello MBean. Чтобы выполнить пример, следуйте за шагами ниже, или см. README файл:

  1. Если Вы так уже не сделали, откройте work_dir/jmx_examples/Notification.

    $ cd work_dir/jmx_examples/Notification

  2. Скомпилируйте классы Java в качестве примера.

    $ javac com/example/mbeans/*.java

  3. Запустите Main приложение.

    $ java com.example.mbeans. Основной

    Вы будете видеть подтверждение это Main ожидает чего-то, чтобы произойти.

  4. Запустите JConsole в различном окне терминала на той же самой машине.

    $ jconsole

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

  5. Выбрать com.example.mbeans.Main от списка в “Новом Соединении” окно, и щелкают, "Соединяются".

    Вы будете видеть сводку текущего действия своей платформы.

  6. Щелкните по вкладке “MBeans”.

    Это телевикторины Вы весь MBeans в настоящий момент зарегистрировалось в сервере MBean.

  7. В левом фрейме расширьтесь com.example.mbeans узел в дереве MBean.

    Вы будете видеть пример MBean Hello, это создавалось и регистрировалось Main. Если Вы щелкаете Hello, Вы будете видеть его связанное Attributes, Operations и Notifications узлы в дереве MBean.

  8. Щелкните Hello Узел MBean в дереве MBean.

    Это выводит на экран метаданные MBEAN и его связанный Дескриптор.

  9. Щелкните Notifications узел Привет MBean в дереве MBean.

    Вы будете видеть, что панель является пробелом.

  10. Щелкните по кнопке “Subscribe”.

    Текущее число уведомлений, полученных (0), будет выведено на экран в метке узла Уведомлений.

  11. Щелкните Attributes узел Hello MBean в дереве MBean, и изменение значение CacheSize припишите 150

    В окне терминала, в котором Вы запустили Main, Вы будете видеть подтверждение этого изменения атрибута. Вы будете также видеть, что число уведомлений, полученных выведенный на экран в узле Уведомлений, изменилось на 1.

  12. Щелкните Notifications узел Hello MBean в дереве MBean снова.

    Вы будете видеть детали уведомления, которое было отправлено.

  13. Щелкните "по Соединению" и затем "Выходу", чтобы выйти из JConsole.

Представление MXBeans

MXBean является новым типом MBean, который обеспечивает простой способ кодировать MBean, который только ссылается на предопределенный набор типов. Таким образом можно убедиться, что Ваш MBean будет применим любым клиентом, включая удаленные клиенты, без любого требования, чтобы у клиента был доступ к специфичным для модели классам, представляющим типы Вашего MBeans. MXBeans обеспечивают удобный способ связать связанные значения вместе, не требуя, чтобы клиенты были особенно сконфигурированы, чтобы обработать пакеты.

Таким же образом что касается стандартного MBeans, MXBean определяется при записи интерфейса Java под названием Что-тоMXBean и Java class, который реализует тот интерфейс. Однако, в отличие от стандартного MBeans, MXBeans не требуют, чтобы Java class был вызван Something. Каждый метод в интерфейсе определяет или атрибут или работу в MXBean. Аннотация @MXBean может также использоваться, чтобы аннотировать интерфейс Java вместо того, чтобы требовать, чтобы имя интерфейса сопровождалось суффиксом MXBean.

MXBeans обеспечивают удобный способ связать связанные значения вместе в MBean, не требуя, чтобы клиенты были особенно сконфигурированы, чтобы обработать пакеты, взаимодействуя с этим MBean. MXBeans уже существовал в Java 2 Платформы, Standard Edition (J2SE) 5.0, в пакете java.lang.management. С Java SE 6 платформ пользователи могут теперь определить свой собственный MXBeans, в дополнение к стандартному набору, определенному в java.lang.management.

Ключевая идея позади MXBeans состоит в том что типы такой как java.lang.management.MemoryUsage на это ссылаются в интерфейсе MXBean, java.lang.management.MemoryMXBean в этом случае, отображаются в стандартный набор типов, так называемые Открытые Типы, которые определяются в пакете javax.management.openmbean. Точные правила отображения появляются в спецификации MXBean, но упрощать мы могли сказать что простые типы как int или String неизменны, в то время как составные типы как MemoryUsage будьте отображены на стандартный тип CompositeDataSupport.

Работа MXBeans демонстрируется на примере программы, которые Вы найдете в каталоге work_dir/jmx_examples/MXBean/com/example/mxbeans после того, как Вы загрузили и разархивировали jmx_examples.zip файл. Пример MXBean содержит следующие файлы:

Пример MXBean выполняет следующие действия.

  • Время снимок было потрачено.
  • Размер очереди.
  • Глава очереди в то данное время.

Интерфейс QueueSamplerMXBean

 ПРИМЕР КОДА 2-1 шоу код выборки QueueSamplerMXBean интерфейс.

 ПРИМЕР КОДА 2-1 интерфейс QueueSamplerMXBean
 
package com.example.mxbeans; 
 
public interface QueueSamplerMXBean { 
    public QueueSample getQueueSample(); 
    public void clearQueue(); 
} 
 

Как можно видеть, Вы объявляете интерфейс MXBean точно таким же образом, как Вы объявляете стандартный MBean. QueueSamplerMXBean интерфейс объявляет две операции, getQueueSample и clearQueue.

Класс QueueSampler

QueueSampler class реализует QueueSamplerMXBean интерфейс, как показано в  ПРИМЕРЕ КОДА 2-1.

 ПРИМЕР КОДА 2-1 Класс QueueSampler
package com.example.mxbeans; 
 
import java.util.Date; 
import java.util.Queue; 
 
public class QueueSampler implements QueueSamplerMXBean { 
     
    private Queue<String> queue; 
     
    public QueueSampler(Queue<String> queue) { 
       this.queue = queue; 
    } 
     
    public QueueSample getQueueSample() { 
        synchronized (queue) { 
            return new QueueSample(new Date(), queue.size(), queue.peek()); 
        } 
    } 
     
    public void clearQueue() { 
        synchronized (queue) { 
            queue.clear(); 
        } 
    } 
} 
 

Операции MXBean getQueueSample () и clearQueue () объявленный интерфейсом MXBean определяются в QueueSampler. getQueueSample () работа просто возвращает экземпляр QueueSample Тип Java, создаваемый со значениями, возвращенными java.util.Queue методы peek() и size() и экземпляр java.util. Дата.

Класс QueueSample

QueueSample экземпляр, возвращенный QueueSampler определяется в QueueSample class, показанный в  ПРИМЕРЕ КОДА 2-1.

 ПРИМЕР КОДА 2-1 Класс QueueSample
package com.example.mxbeans; 
 
import java.beans.ConstructorProperties; 
import java.util.Date; 
 
public class QueueSample { 
     
    private final Date date; 
    private final int size; 
    private final String head; 
     
    @ConstructorProperties({"date", "size", "head"}) 
    public QueueSample(Date date, int size, String head) { 
        this.date = date; 
        this.size = size; 
        this.head = head; 
    } 
     
    public Date getDate() { 
        return date; 
    } 
     
    public int getSize() { 
        return size; 
    } 
     
    public String getHead() { 
        return head; 
    } 
} 
 

В QueueSample class, платформа MXBean призывает всех методов get QueueSample преобразовать приведенный пример в a CompositeData и использование @ConstructorProperties аннотация, чтобы восстановить a QueueSample экземпляр от a CompositeData.

Создание и Регистрация MXBean в Сервере MBean

Определив MXBean взаимодействует через интерфейс и class, который реализует его, так же как тип Java, который возвращается, MXBean должен теперь быть создан и зарегистрирован в сервере MBean. Эти действия выполняются примером class Main.

 ПРИМЕР КОДА 2-1 пример MXBean Основной class
package com.example.mxbeans; 
 
import java.lang.management.ManagementFactory; 
import java.util.Queue; 
import java.util.concurrent.ArrayBlockingQueue; 
import javax.management.MBeanServer; 
import javax.management.ObjectName; 
 
public class Main { 
 
    public static void main(String[] args) throws Exception { 
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
         
        ObjectName name = 
                new ObjectName("com.example.mxbeans:type=QueueSampler"); 
         
        Queue<String> queue = new ArrayBlockingQueue<String>(10); 
        queue.add("Request-1"); 
        queue.add("Request-2"); 
        queue.add("Request-3"); 
        QueueSampler mxbean = new QueueSampler(queue); 
         
        mbs.registerMBean(mxbean, name); 
         
        System.out.println("Waiting..."); 
        Thread.sleep(Long.MAX_VALUE); 
    } 
} 
 

Main class получает платформу сервер MBean, создает имя объекта для MXBean QueueSampler, создает a Queue экземпляр для QueueSampler MXBean, чтобы обработать, и каналы этот экземпляр Очереди к недавно создаваемому QueueSampler MXBean. MXBean тогда регистрируется в сервере MBean точно таким же образом как стандартный MBean.

Выполнение Примера MXBean

Чтобы выполнить пример, следуйте за шагами ниже, или см. README файл:

  1. Если Вы так уже не сделали, откройте work_dir/jmx_examples/MXBean.

    $ cd work_dir/jmx_examples/MXBean

  2. Скомпилируйте классы Java в качестве примера.

    $ javac com/example/mxbeans/*.java

  3. Запустите Main приложение.

    $ java com.example.mxbeans. Основной

    Вы будете видеть подтверждение это Main ожидает чего-то, чтобы произойти.

  4. Запустите JConsole в различном окне терминала на той же самой машине.

    $ jconsole

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

  5. Выбрать com.example.mxbeans.Main от списка в “Новом Соединении” окно, и щелкают, "Соединяются".

    Вы будете видеть сводку текущего действия своей платформы.

  6. Щелкните по вкладке “MBeans”.

    Это телевикторины Вы весь MBeans в настоящий момент зарегистрировалось в сервере MBean.

  7. В левом фрейме расширьтесь com.example.mxbeans узел в дереве MBean.

    Вы будете видеть пример MBean QueueSampler, это создавалось и регистрировалось Основным. Если Вы щелкаете QueueSampler, Вы будете видеть его связанные Атрибуты и узлы Операций в дереве MBean.

  8. Выберите Attributes узел.

    Вы будете видеть QueueSample атрибут появляется в правой области с ее значением javax.management.openmbean.CompositeDataSupport.

  9. Двойной щелчок по CompositeDataSupport значение.

    Можно видеть QueueSample значения date, head и size потому что платформа MXBean преобразовала QueueSample экземпляр в CompositeData. Если Вы определили QueueSampler как Стандартный MBean, а не как MXBean, JConsole не нашел бы QueueSample class, потому что это не было бы в его пути class. Если QueueSampler был стандартный MBean, Вы получите a ClassNotFoundException получая QueueSample значение атрибута. Это демонстрирует полноценность использования MXBeans, соединяясь с агентами JMX через универсальные клиенты JMX, как JConsole.

  10. Выберите Operations узел.

    Вы будете видеть кнопку, чтобы вызвать clearQueue работа.

  11. Щелкните clearQueue кнопка.

    Вам сообщат, что метод был вызван успешно.

  12. Выберите Attributes узел снова и двойной щелчок по CompositeDataSupport значение.

    Очередь была сброшена теперь.

  13. Щелкните "по Соединению" и затем "Выходу", чтобы выйти из JConsole.

В этом примере JConsole использовался в качестве клиента JMX, но если Вы должны были получить доступ к своему MXBean программно в клиенте JMX, Вы пишете себя, тогда Вы могли сделать так одним из двух способов:

 ПРИМЕР КОДА 2-1 Доступ к MXBean непосредственно
 
MBeanServer mbs = ...whatever...; 
ObjectName name = new ObjectName("com.example.mxbeans:type=QueueSampler"); 
CompositeData queueSample = (CompositeData) mbs.getAttribute(name,  
                             "QueueSample"); 
int size = (Integer) queueSample.get("size"); 
 ПРИМЕР КОДА 2-2 Доступа к MXBean через прокси
 
MBeanServer mbs = ...whatever...; 
ObjectName name = new ObjectName("com.example.mxbeans:type=QueueSampler"); 
QueueSamplerMXBean proxy = JMX.newMXBeanProxy(mbs, name,  
                                              QueueSamplerMXBean.class); 
QueueSample queueSample = proxy.getQueueSample(); 
int size = queueSample.getSize(); 

 ПРИМЕР КОДА 2-2 использования newMXBeanProxy метод, чтобы создать прокси MXBean. Эквивалентный метод, newMBeanProxy, существует, чтобы создать прокси для других типов MBeans. newMBeanProxy и newMXBeanProxy методы используются точно таким же образом.

Дескрипторы MBean

Дескрипторы позволяют Вам давать дополнительную информацию о MBeans клиентам управления. Например, Дескриптор на атрибуте MBean мог бы сказать, какие модули он измеряется в, или каковы его минимальные и максимальные возможные значения. С Java SE 6, Дескрипторы являются интегрированной частью API JMX и доступны во всех типах MBeans.

Дескрипторы дают Вам удобный способ присоединить произвольные дополнительные метаданные к Вашему MBeans. Дескрипторы всегда существовали в API JMX, но до Java SE 6, они были только доступны в соединении с Моделью MBeans.

Для большинства конструкторов в классах MBean*Info (MBeanInfo, MBeanAttributeInfo, и так далее), параллельный конструктор существует с теми же самыми параметрами плюс дополнительное javax.management.Descriptor параметр. То же самое является истиной для OpenMBean*InfoSupport. MBean*Info и OpenMBean*InfoSupport классы содержат a getDescriptor() метод.

Откройте информацию о возврате MBeans о значении по умолчанию и юридических значениях от getDefaultValue(), getLegalValues(), getMaxValue(), getMinValue() методы OpenMBeanParameterInfo и OpenMBeanAttributeInfo. Эта информация теперь также присутствует в соответствующих Дескрипторах, и другие типы MBean могут также возвратить информацию в своих Дескрипторах.

Дескрипторы MBean демонстрируются в классах в качестве примера, которые Вы найдете в каталоге work_dir/jmx_examples/Descriptors/com/example/mxbeans после того, как Вы загрузили и разархивировали jmx_examples.zip файл. Пример Дескриптора MBean содержит следующие файлы.

QueueSampler MXBean в этом примере в основном выполняет те же самые действия как пример MXBean, представленный в  Главе 2, "Представляя MXBeans", кроме с добавлением Дескрипторов MBean. Этот пример показывает как DescriptorKey метааннотация может использоваться, чтобы добавить новые элементы дескриптора к Дескрипторам для стандартного MBean (или MXBean) через аннотации в стандартном MBean (или MXBean) интерфейс.

Аннотации DescriptorKey

Новая аннотация DescriptorKey может использоваться, чтобы добавить информацию к Дескрипторам для стандартного MBean (или MXBean) через аннотации в Стандартном MBean (или MXBean) интерфейс. Это позволяет инструменту, который генерирует стандартный MBeans от существующей модели управления, чтобы включать информацию от модели в сгенерированных интерфейсах MBean, а не в отдельных файлах.

 ПРИМЕР КОДА 2-1 шоу определение аннотации Author.

 ПРИМЕР КОДА 2-1 Аннотация Автора
 
package com.example.mxbeans; 
 
import java.lang.annotation.Documented; 
import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 
import javax.management.DescriptorKey; 
 
@Documented 
@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Author { 
    @DescriptorKey("author") 
    String value(); 
} 

Эта аннотация предоставляет имя создателя интерфейса MBean. Новое поле author будет добавлен к MBeanInfo Дескриптор со значением, определенным @Author аннотация. Файлы Version и DisplayName определите аннотации тех имен точно таким же образом что касается Author выше. В каждом из Version и DisplayName, @DescriptorKey значение “version” и “displayname” соответственно.

В случае Версии, нового поля version будет добавлен к MBeanInfo Дескриптор со значением, определенным @Version аннотация.

Для DisplayName, новое поле displayName будет добавлен к MBeanAttributeInfo Дескриптор или MBeanOperationInfo Дескриптор со значением, определенным @DisplayName аннотация в зависимости от того, является ли аннотируемый метод методом get/методом set или работой, соответственно.

Используя Дескрипторы MBean

QueueSamplerMXBean интерфейс, используемый в этом примере, немного отличается от того, используемого в примере MXBeans, в том, столько, сколько это реализует Дескрипторы MBean, чтобы опубликовать часть его информации.

 ПРИМЕР КОДА 2-1 QueueSamplerMXBean с Дескрипторами.
 
package com.example.mxbeans; 
 
@Author("Mr Bean") 
@Version("1.0") 
public interface QueueSamplerMXBean { 
    @DisplayName("GETTER: QueueSample") 
    public QueueSample getQueueSample(); 
    @DisplayName("OPERATION: clearQueue") 
    public void clearQueue(); 
} 
 

Здесь, Вы видите что @Author аннотация устанавливается в Mr. Bean, @Version аннотация устанавливается в 1.0, и @DisplayName устанавливается в имена любой из атрибута QueueSample или работа clearQueue.

Выполнение Примера Дескрипторов MBean

Чтобы выполнить пример, следуйте за шагами ниже, или см. README файл:

  1. Если Вы так уже не сделали, откройте work_dir/jmx_examples/Descriptors.

    $ cd work_dir/jmx_examples/Descriptors

  2. Скомпилируйте классы Java в качестве примера.

    $ javac com/example/mxbeans/*.java

  3. Запустите Main приложение.

    $ java com.example.mxbeans. Основной

    Вы будете видеть подтверждение это Main ожидает чего-то, чтобы произойти.

  4. Запустите JConsole в различном окне терминала на той же самой машине.

    $ jconsole

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

  5. Выбрать com.example.mxbeans.Main от списка в “Новом Соединении” окно, и щелкают, "Соединяются".

    Вы будете видеть сводку текущего действия своей платформы.

  6. Щелкните по вкладке “MBeans”.

    Это телевикторины Вы весь MBeans в настоящий момент зарегистрировалось в сервере MBean.

  7. В левом фрейме расширьтесь com.example.mxbeans узел в дереве MBean.

    Вы будете видеть пример MBean QueueSampler, это создавалось и регистрировалось Основным. Если Вы щелкаете QueueSampler, Вы будете видеть его связанные Атрибуты и узлы Операций в дереве MBean. Вы будете также видеть поля author и version в MBeanInfo Таблица дескрипторов.

  8. Расширьтесь Attributes и Operations узлы под QueueSampler Узел MBean.

    Вы будете видеть отдельные Атрибуты и Операции.

  9. Выберите QueueSample узел.

    Вы будете видеть поле displayName в MBeanAttributeInfo Таблица дескрипторов.

  10. Выберите clearQueue узел.

    Вы будете видеть поле displayName в MBeanOperationInfo Таблица дескрипторов.

  11. Щелкните "по Соединению" и затем "Выходу", чтобы выйти из JConsole.


Содержание | Предыдущий | Следующий


Oracle и/или его филиалы Авторское право © 1993, 2012, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами