Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел представляет пример прямого, стандартного MBean.
Стандартный MBean определяется при записи вызванного интерфейса Java SomethingMBean
и Java class вызывают Something
это реализует тот интерфейс. Каждый метод в интерфейсе определяет или атрибут или работу в MBean. По умолчанию каждый метод определяет работу. Атрибуты и операции являются методами, которые следуют за определенными шаблонами разработки. Стандартный MBean составляется из интерфейса MBean и class. Интерфейс MBean перечисляет методы для всех представленных атрибутов и операций. class реализует этот интерфейс и обеспечивает функциональность инструментованного ресурса.
Следующие разделы исследуют пример стандартного MBean и простого поддерживающего технологию агента JMX (агент JMX), который управляет MBean.
Пример основного интерфейса MBean, HelloMBean
, следует:
package com.example; 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, который реализует этот интерфейс, описывается в следующем разделе.
Согласно спецификации JMX, интерфейс MBean состоит из именованных и введенных атрибутов, которые читаемы и возможно перезаписываемы, в дополнение к именованным и введенным операциям, которые могут быть вызваны приложениями, которыми управляет MBean. HelloMBean
интерфейс объявляет две операции: методы Java add()
и sayHello()
.
HelloMBean
объявляет два атрибута: Name
строка только для чтения, и CacheSize
целое число, которое может быть и считано и записано. Метод get и методы метода set, как объявляют, позволяют управляемое приложение доступу и возможно изменяют значения атрибута. Как определено спецификацией JMX, метод get является любым открытым методом, который не возвращается пусто и чье имя начинается get
. Метод get позволяет менеджеру считать значение атрибута, тип которого является типом возвращенного объекта. Метод set является любым открытым методом, который берет единственный параметр и чье имя начинается set
. Метод set позволяет менеджеру записать новое значение в атрибуте, тип которого является тем же самым как тем из параметра.
Реализацию этих операций и атрибутов показывают в следующем разделе.
Hello
class Java, который следует за реализациями HelloMBean
Интерфейс MBean:
package com.example; 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; }
Прямое Hello
class обеспечивает определения операций и атрибутов, которые объявляются HelloMBean
. sayHello()
и add()
операции чрезвычайно просты, но реальные операции могут быть столь же простыми или столь же сложными как необходимый.
Методы, чтобы добраться Name
атрибут и добраться и установить CacheSize
атрибут также определяется. В этом примере, Name
значение атрибута никогда не изменяется. Однако, в реальном сценарии этот атрибут мог бы измениться, поскольку управляемый ресурс работает. Например, атрибут мог бы представить статистику, такую как использование памяти или время работы. Здесь, атрибут является просто именем Reginald
.
Вызов setCacheSize
метод позволяет Вам измениться CacheSize
атрибут от его объявленного значения по умолчанию 200. В реальном сценарии, изменяясь CacheSize
атрибут мог потребовать, чтобы другие операции были выполнены, такие как отбрасывание записей или выделение новых записей. Этот пример просто печатает сообщение, чтобы подтвердить, что размер кэша изменился. Однако, более сложные операции могли быть определены вместо простого звонка println()
.
С Hello
MBean и его интерфейс, таким образом определенный, они могут теперь использоваться, чтобы управлять ресурсом, который они представляют, как показано в следующем разделе.
Как только ресурс был инструментован MBeans, управление тем ресурсом выполняется агентом JMX.
Базовый компонент агента JMX является сервером MBean. Сервер MBean является сервером управляемого объекта, в котором регистрируются MBeans. Агент JMX также включает ряд служб, чтобы управлять MBeans. См. документацию API для MBeanServer
интерфейс для деталей реализации сервера MBean.
Main
class, который следует, представляет основной агент JMX:
package com.example; 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: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()
создает сервер MBean автоматически, вызывая метод JMX MBeanServerFactory.createMBeanServer()
MBeanServer
экземпляр, полученный Main
называется mbs
.
Затем, Main
определяет имя объекта для экземпляра MBean, который оно создаст. У каждого JMX MBean должно быть имя объекта. Имя объекта является экземпляром class JMX ObjectName
Main
, домен com.example
(пакет, в котором пример MBean содержится). Кроме того, ключевое свойство объявляет, что этот объект имеет тип Hello
.
Экземпляр a Hello
объект, названный mbean
, создается. Hello
объект называют mbean
тогда регистрируется как MBean в сервере MBean mbs
с именем объекта name
, передавая объект и имя объекта в звонок в метод JMX MBeanServer.registerMBean()
С Hello
MBean, зарегистрированный в сервере MBean, Main
просто ожидает операций управления, которые будут выполняться на Hello
. В этом примере эти операции управления вызывают sayHello()
и add()
, и добираясь и устанавливая значения атрибута.
Исследовав классы в качестве примера, можно теперь выполнить пример. В этом примере JConsole используется, чтобы взаимодействовать с MBean.
Чтобы выполнить пример, следуйте за этими шагами:
jmx_examples.zip
, к Вашему рабочему каталогу, work_dir
.unzip jmx_examples.zip
work_dir
каталог. javac com/example/*.java
Main
приложение со следующей командой. java com.example.Main
Если Вы выполните версию JDK, которая является более старой чем версия 6, то Вы должны будете запустить Main
приложение со следующей определенной опцией, чтобы представить приложение для контроля и управления.
java -Dcom.sun.management.jmxremote example.Main
Подтверждение это Main
ожидает чего-то, чтобы произойти, выводится на экран.
jconsole
Новое диалоговое окно Соединения выводится на экран, представляя список выполнения агентов JMX, с которыми можно соединиться.
com.example.Main
от списка и щелкают по Connect. Сводка текущего действия Вашей платформы выводится на экран.
Это телевикторины все MBeans, которые в настоящий момент регистрируются в сервере MBean.
com.example
узел в дереве MBean. Вы видите пример MBean Hello
это создавалось и регистрировалось Main
. Если Вы щелкаете Hello
, Вы видите его связанные Атрибуты и узлы Операций в дереве MBean.
Hello
MBean в дереве MBean. Атрибуты MBean, которые были определены Hello
class выводится на экран.
CacheSize
припишите 150. В окне терминала, в котором Вы запустили Main
, подтверждение этого изменения атрибута сгенерировано.
Hello
MBean в дереве MBean. Эти две операции, объявленные Hello
MBean, sayHello()
и add()
, видимы.
sayHello()
работа, щелкая sayHello
кнопка. Диалоговое окно JConsole сообщает Вам, что метод был вызван успешно. Сообщение "привет, мир" сгенерирован в окне терминала в который Main
работает.
add()
работа, чтобы добавить и щелкнуть add
кнопка. Ответ выводится на экран в диалоговом окне JConsole.