|
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.
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 . MBeanServer экземпляр, полученный Main называется mbs.
Затем, Main определяет имя объекта для экземпляра MBean, который оно создаст. У каждого JMX MBean должно быть имя объекта. Имя объекта является экземпляром class JMX и должен соответствовать синтаксису, определенному спецификацией JMX. А именно, имя объекта должно содержать домен и список ключевых свойств. В имени объекта, определенном Main, домен com.example (пакет, в котором пример MBean содержится). Кроме того, ключевое свойство объявляет, что этот объект имеет тип Hello.
Экземпляр a Hello объект, названный mbean, создается. Hello объект называют mbean тогда регистрируется как MBean в сервере MBean mbs с именем объекта name, передавая объект и имя объекта в звонок в метод JMX .
С Hello MBean, зарегистрированный в сервере MBean, Main просто ожидает операций управления, которые будут выполняться на Hello. В этом примере эти операции управления вызывают sayHello() и add(), и добираясь и устанавливая значения атрибута.
Исследовав классы в качестве примера, можно теперь выполнить пример. В этом примере JConsole используется, чтобы взаимодействовать с MBean.
Чтобы выполнить пример, следуйте за этими шагами:
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.