|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел объясняет специальный тип MBean, названного MXBeans.
MXBean является типом MBean что ссылки только предопределенный набор типов данных. Таким образом можно убедиться, что Ваш MBean будет применим любым клиентом, включая удаленные клиенты, без любого требования, чтобы у клиента был доступ к специфичным для модели классам, представляющим типы Вашего MBeans. MXBeans обеспечивают удобный способ связать связанные значения вместе, не требуя, чтобы клиенты были особенно сконфигурированы, чтобы обработать пакеты.
Таким же образом что касается стандартного MBeans, MXBean определяется при записи вызванного интерфейса Java SomethingMXBean и Java class, который реализует тот интерфейс. Однако, в отличие от стандартного MBeans, MXBeans не требуют, чтобы Java class был вызван Something. Каждый метод в интерфейсе определяет или атрибут или работу в MXBean. Аннотация @MXBean может также использоваться, чтобы аннотировать интерфейс Java, вместо того, чтобы требовать, чтобы имя интерфейса сопровождалось суффиксом MXBean.
MXBeans существовал в Java 2 Платформы, Standard Edition (J2SE) 5.0 программных обеспечений, в пакете java.lang.management. Однако, пользователи могут теперь определить свой собственный MXBeans, в дополнение к стандартному набору, который определяется в java.lang.management.
Основная идея позади MXBeans состоит в том что типы такой как на это ссылаются в интерфейсе MXBean, в этом случае, отображаются в стандартный набор типов, так называемые Открытые Типы, которые определяются в пакете . Точные правила отображения появляются в спецификации MXBean. Однако, общий принцип для простых типов, таких как интервал или Строка, чтобы остаться неизменным, в то время как составные типы такой как MemoryUsage будьте отображены на стандартный тип .
Пример MXBean состоит из следующих файлов, которые находятся в
QueueSamplerMXBean интерфейсQueueSampler class, который реализует интерфейс MXBeanQueueSample Тип Java, возвращенный getQueueSample() метод в интерфейсе MXBeanMain, программа, которая устанавливает и выполняет примерПример MXBean использует эти классы, чтобы выполнить следующие действия:
Queue<String>getQueueSample, в MXBean, который берет снимок очереди когда вызвано и возвращает Java class QueueSample это связывает следующие значения вместе: Следующий код показывает пример QueueSamplerMXBean Интерфейс MXBean:
package com.example;
public interface QueueSamplerMXBean {
public QueueSample getQueueSample();
public void clearQueue();
}
Отметьте, что Вы объявляете интерфейс MXBean точно таким же образом, как Вы объявляете стандартный интерфейс MBean. QueueSamplerMXBean интерфейс объявляет метода get, getQueueSample и работа, clearQueue.
Операции MXBean объявляются в QueueSampler пример class, следующим образом:
package com.example;
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();
}
}
}
QueueSampler определяет getQueueSample() метод get и clearQueue() работа, которые были объявлены интерфейсом MXBean. getQueueSample() работа возвращает экземпляр QueueSample Тип Java, который создавался со значениями, возвращенными java.util.Queue методы peek() и size(), и экземпляр .
QueueSample экземпляр, возвращенный QueueSampler определяется в
package com.example;
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 взаимодействует через интерфейс и class, который реализует его, так же как тип Java, который возвращается. Затем, MXBean должен быть создан и зарегистрирован в сервере MBean. Эти действия выполняются тем же самым
package com.example;
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 mxbeanName = new ObjectName("com.example: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, mxbeanName);
System.out.println("Waiting...");
Thread.sleep(Long.MAX_VALUE);
}
}
Main class выполняет следующие действия:
QueueSampler.Queue экземпляр для QueueSampler MXBean, чтобы обработать.Queue экземпляр к недавно создаваемому QueueSampler MXBean.Пример MXBean использует классы от jmx_examples.zip пакет, который Вы использовали в Стандартном разделе MBeans. Этот пример требует версии 6 Java платформа SE. Чтобы выполнить пример MXBeans следуют за этими шагами:
jmx_examples.zip в Ваш work_dir каталог.unzip jmx_examples.zip
work_dir каталог. javac com/example/*.java
Main приложение. Подтверждение это Main ожидает чего-то, чтобы произойти, сгенерирован. java com.example.Main
jconsole
com.example.Main от списка и щелкают по Connect. Сводка текущего действия Вашей платформы выводится на экран.
Это телевикторины все MBeans, которые в настоящий момент регистрируются в сервере MBean.
com.example узел в дереве MBean. Вы видите пример MBean QueueSampler это создавалось и регистрировалось Main. Если Вы щелкаете QueueSampler, Вы видите его связанные Атрибуты и узлы Операций в дереве MBean.
Вы видите QueueSample атрибут появляется в правильной области с ее значением javax.management.openmbean.CompositeDataSupport.
CompositeDataSupport значение. Вы видите QueueSample значения date, head, и size потому что платформа MXBean преобразовала QueueSample экземпляр в CompositeData. Если Вы определили QueueSampler как стандартный MBean, а не как MXBean, JConsole не нашел бы QueueSample class, потому что это не было бы в его пути class. Если QueueSampler был стандартный MBean, Вы получите a ClassNotFoundException обменивайтесь сообщениями, получая QueueSample значение атрибута. Факт, что JConsole находит QueueSampler демонстрирует полноценность использования MXBeans, соединяясь с агентами JMX через универсальные клиенты JMX, такие как JConsole.
Кнопка, чтобы вызвать clearQueue работа выводится на экран.
clearQueue кнопка. Подтверждение, что метод был вызван успешно, выводится на экран.
CompositeDataSupport значение. head и size значения были сброшены.