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 состоит в том что типы такой как java.lang.management.MemoryUsage
java.lang.management.MemoryMXBean
javax.management.openmbean
MemoryUsage
будьте отображены на стандартный тип CompositeDataSupport
Пример MXBean состоит из следующих файлов, которые находятся в jmx_examples.zip
:
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()
, и экземпляр java.util.Date
QueueSample
экземпляр, возвращенный QueueSampler
определяется в QueueSample
class, следующим образом:
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. Эти действия выполняются тем же самым Main
пример агент JMX, который использовался в стандартном примере MBean, но соответствующем коде, не показали в Стандартном уроке 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
значения были сброшены.