|
Spec-Zone .ru
спецификации, руководства, описания, API
|
API JMX определяет механизм, чтобы позволить MBeans генерировать уведомления, например, сигнализировать изменение состояния, обнаруженное событие, или проблему.
Чтобы генерировать уведомления, MBean должен реализовать интерфейс NotificationEmitter или расширитесь . Чтобы отправить уведомление, Вы должны создать экземпляр class или подкласс (такой как ), и передача экземпляр к .
У каждого уведомления есть источник. Источник является именем объекта MBean, который генерировал уведомление.
У каждого уведомления есть порядковый номер. Это число может использоваться, чтобы упорядочить уведомления, прибывающие из того же самого источника, когда порядок имеет значение и есть риск уведомлений, обрабатываемых в неправильном порядке. Порядковый номер может быть нулем, но предпочтительно инкрементами числа для каждого уведомления от данного MBean.
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, представленный thissequenceNumber, это устанавливается в 1, и это увеличивается с приращениемCacheSizeoldSizethis.cacheSizeУведомление n тогда передается к NotificationBroadcasterSupport.sendNotification() метод.
Наконец, MBeanNotificationInfo экземпляр определяется, чтобы описать характеристики различных экземпляров уведомления, сгенерированных MBean для данного типа уведомления. В этом случае тип отправленных уведомлений AttributeChangeNotification уведомления.
Еще раз Вы будете использовать JConsole, чтобы взаимодействовать Hello MBean, на сей раз чтобы передаться и получить уведомления. Этот пример требует версии 6 Java платформа SE.
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. Детали уведомления выводятся на экран.