Spec-Zone .ru
спецификации, руководства, описания, API
|
API JMX определяет механизм, чтобы позволить MBeans генерировать уведомления, например, сигнализировать изменение состояния, обнаруженное событие, или проблему.
Чтобы генерировать уведомления, MBean должен реализовать интерфейс NotificationEmitter
или расширитесь NotificationBroadcasterSupport
javax.management.Notification
AttributeChangedNotification
NotificationBroadcasterSupport.sendNotification
У каждого уведомления есть источник. Источник является именем объекта MBean, который генерировал уведомление.
У каждого уведомления есть порядковый номер. Это число может использоваться, чтобы упорядочить уведомления, прибывающие из того же самого источника, когда порядок имеет значение и есть риск уведомлений, обрабатываемых в неправильном порядке. Порядковый номер может быть нулем, но предпочтительно инкрементами числа для каждого уведомления от данного MBean.
Hello
Реализация MBean в Стандартном MBeans фактически реализует механизм уведомления. Однако, этот код был опущен в том уроке ради простоты. Полный код для Hello
следует:
package com.example; 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; }
Это Hello
Реализация MBean расширяется NotificationBroadcasterSupport
class. NotificationBroadcasterSupport
реализации NotificationEmitter
интерфейс.
Операции и атрибуты устанавливаются таким же образом как в стандартном примере MBean, за исключением того, что CacheSize
метод метода set атрибута теперь определяет значение oldSize
. Это значение записывает CacheSize
значение атрибута до операции присвоения.
Уведомление создается из экземпляра, n
, из class JMX AttributeChangeNotification
, который расширяется javax.management.Notification
. Уведомление создается в пределах определения setCacheSize()
метод от следующей информации. К этой информации передают AttributeChangeNotification
как параметры.
Hello
MBean, представленный this
sequenceNumber
, это устанавливается в 1, и это увеличивается с приращениемCacheSize
oldSize
this.cacheSize
Уведомление n
тогда передается к NotificationBroadcasterSupport.sendNotification()
метод.
Наконец, MBeanNotificationInfo
экземпляр определяется, чтобы описать характеристики различных экземпляров уведомления, сгенерированных MBean для данного типа уведомления. В этом случае тип отправленных уведомлений AttributeChangeNotification
уведомления.
Еще раз Вы будете использовать JConsole, чтобы взаимодействовать Hello
MBean, на сей раз чтобы передаться и получить уведомления. Этот пример требует версии 6 Java платформа SE.
jmx_examples.zip
в Ваш work_dir
каталог.unzip jmx_examples.zip
work_dir
каталог. javac com/example/*.java
Main
приложение. java com.example.Main
Подтверждение это Main
ожидает чего-то, чтобы произойти, сгенерирован.
jconsole
Новое диалоговое окно Соединения выводится на экран, представляя список выполнения агентов JMX, с которыми можно соединиться.
com.example.Main
от списка и щелкают по Connect. Сводка текущего действия Вашей платформы выводится на экран.
Это телевикторины все MBeans, которые в настоящий момент регистрируются в сервере MBean.
com.example
узел в дереве MBean. Вы видите пример MBean Hello
это создавалось и регистрировалось Hello
. Если Вы щелкаете Hello
, Вы видите его узел Уведомлений в дереве MBean.
Hello
MBean в дереве MBean. Отметьте, что панель является пробелом.
Текущее число уведомлений, полученных (0), выводится на экран в метке узла Уведомлений.
Hello
MBean в дереве MBean, и изменение значение CacheSize
припишите 150. В окне терминала, в котором Вы запустили Main
, подтверждение этого изменения атрибута выводится на экран. Отметьте, что число полученных уведомлений, выведенных на экран в узле Уведомлений, изменилось на 1.
Hello
MBean в дереве MBean. Детали уведомления выводятся на экран.