Spec-Zone.ru › OpenJDK 21

Пакет javax.management

package javax.management

Предоставляет основные классы для Java Management Extensions.

API Java Management Extensions (JMX) — это стандартный API для управления и мониторинга. Типичные варианты использования включают:

  • консультации и изменение конфигурации приложения
  • сбор статистики о поведении приложения и предоставление ее в доступном виде
  • уведомление о изменениях состояния и ошибочных ситуациях.

API JMX также может использоваться в качестве части решения для управления системами, сетями и т. д.

API включает удаленный доступ, поэтому удаленная программа управления может взаимодействовать с запущенным приложением для этих целей.

MBeans

Фундаментальным понятием API JMX является MBean. MBean — это именованный управляемый объект, представляющий ресурс. Он имеет интерфейс управления, который должен быть общедоступным и состоять из:

  • именованных и типизированных атрибутов, которые могут читаться и/или записываться
  • именованных и типизированных операций, которые могут вызываться
  • типизированных уведомлений, которые могут испускаться MBean.

Например, MBean, представляющий конфигурацию приложения, может иметь атрибуты, представляющие различные элементы конфигурации. Чтение атрибута CacheSize возвратит текущее значение этого элемента. Запись в него обновит элемент, потенциально изменив поведение работающего приложения. Такая операция, как save, может сохранить текущую конфигурацию постоянно. Такое уведомление, как ConfigurationChangedNotification, может отправляться каждый раз, когда конфигурация изменяется.

В стандартном использовании API JMX MBeans реализуются как объекты Java. Однако, как объясняется ниже, эти объекты обычно не ссылаются напрямую.

Стандартные MBeans

Чтобы упростить реализацию MBean, API JMX включает понятие Стандартных MBeans. Стандартный MBean — это такой, чьи атрибуты и операции вычисляются из Java-интерфейса с использованием определенных схем именования, аналогичных тем, что используются JavaBeans. Например, рассмотрите такой интерфейс:

    public interface ConfigurationMBean {
         public int getCacheSize();
         public void setCacheSize(int size);
         public long getLastChangedTime();
         public void save();
    }
        

Методы getCacheSize и setCacheSize определяют атрибут чтения/записи типа int с именем CacheSize (с заглавной буквы, в отличие от соглашения JavaBeans).

Метод getLastChangedTime определяет атрибут типа long с именем LastChangedTime. Это атрибут только для чтения, так как нет метода setLastChangedTime.

Метод save определяет операцию с именем save. Это не атрибут, так как его имя не начинается с get, set, или is.

Точные схемы именования для Стандартных MBeans подробно описаны в Спецификации JMX.

Существует два способа создания объекта Java, который является MBean с этим интерфейсом управления. Один — чтобы объект был экземпляром класса, который имеет точно такое же имя, как Java-интерфейс, но без суффикса MBean. Таким образом, в примере объект будет класса Configuration, в том же пакете Java, что и ConfigurationMBean. Второй способ — использовать класс StandardMBean.

MXBeans

MXBean — это разновидность Стандартного MBean, в которой сложные типы отображаются на стандартный набор типов, определенных в пакете javax.management.openmbean. MXBeans подходят, если в противном случае вам потребовалось бы ссылаться на классы, специфичные для приложения, в вашем интерфейсе MBean. Они подробно описаны в спецификации для MXBean.

Динамические MBeans

Динамический MBean — это MBean, который определяет свой интерфейс управления во время выполнения. Например, MBean конфигурации может определять имена и типы атрибутов, которые он предоставляет, анализируя XML-файл.

Любой объект Java класса, реализующего интерфейс DynamicMBean, является Динамическим MBean.

Открытые MBeans

Открытый MBean — это разновидность Динамического MBean, где типы атрибутов и параметров и значений возврата операций строятся с использованием небольшого набора предопределенных Java-классов. Открытые MBeans облегчают работу с удаленными программами управления, которые, возможно, не имеют доступа к типам, специфичным для приложения, включая не-Java программы. Открытые MBeans определяются пакетом javax.management.openmbean.

Модельные MBeans

Модельный MBean — это разновидность Динамического MBean, которая служит мостом между интерфейсом управления и основным управляемым ресурсом. И интерфейс управления, и управляемый ресурс задаются как объекты Java. Одна и та же реализация Модельного MBean может многократно использоваться с разными интерфейсами управления и управляемыми ресурсами, и она может предоставлять общие функции, такие как сохранение и кеширование. Модельные MBeans определяются пакетом javax.management.modelmbean.

Сервер MBean

Для полезности MBean должен быть зарегистрирован в Сервере MBean. Сервер MBean — это хранилище MBeans. Обычно единственный доступ к MBeans осуществляется через Сервер MBean. Другими словами, код больше не обращается к объекту Java, реализующему MBean напрямую, а вместо этого обращается к MBean по имени через Сервер MBean. Каждый MBean имеет уникальное имя в Сервере MBean, определенное классом ObjectName.

Сервер MBean — это объект, реализующий интерфейс MBeanServer. Наиболее удобный для использования Сервер MBean — это Платформенный Сервер MBean. Это единственный Сервер MBean, который может быть общим для различных управляемых компонентов, работающих в одной и той же виртуальной машине Java. Доступ к Платформенному Серверу MBean осуществляется с помощью метода ManagementFactory.getPlatformMBeanServer().

Код приложения также может создать новый Сервер MBean или получить доступ к уже созданным Серверам MBean, используя класс MBeanServerFactory.

Создание MBeans в Сервере MBean

Существует два способа создания MBean. Один — создать объект Java, который будет MBean, а затем использовать метод registerMBean для его регистрации в Сервере MBean. Другой — создать и зарегистрировать MBean в одной операции, используя один из методов createMBean.

Метод registerMBean проще для локального использования, но не может использоваться удаленно. Метод createMBean может использоваться удаленно, но иногда требует внимания к вопросам загрузки классов.

MBean может выполнять действия при регистрации или аннулировании регистрации в Сервере MBean, если он реализует интерфейс MBeanRegistration.

Доступ к MBeans в Сервере MBean

Учитывая ObjectName name и MBeanServer mbs, вы можете получить доступ к атрибутам и операциям, как в этом примере:

    int cacheSize = mbs.getAttribute(name, "CacheSize");
    Attribute newCacheSize =
         new Attribute("CacheSize", new Integer(2000));
    mbs.setAttribute(name, newCacheSize);
    mbs.invoke(name, "save", new Object[0], new Class[0]);
        

В качестве альтернативы, если у вас есть Java-интерфейс, соответствующий интерфейсу управления для MBean, вы можете использовать прокси MBean следующим образом:

    ConfigurationMBean conf =
        JMX.newMBeanProxy(mbs, name, ConfigurationMBean.class);
    int cacheSize = conf.getCacheSize();
    conf.setCacheSize(2000);
    conf.save();
        

Использование прокси MBean — это просто удобство. Второй пример в конечном итоге вызывает те же MBeanServer операции, что и первый.

Сервер MBean может быть запрошен на MBeans, имена которых соответствуют определенным шаблонам и/или атрибуты которых соответствуют определенным ограничениям. Шаблоны имен создаются с использованием класса ObjectName, а ограничения — с использованием класса Query. Методы queryNames и queryMBeans затем выполняют запрос.

Жизненный цикл MBean

MBean может реализовать интерфейс MBeanRegistration, чтобы получать уведомления о регистрации и аннулировании регистрации в Сервере MBean. Кроме того, метод preRegister позволяет MBean получить ссылку на объект MBeanServer и получить его ObjectName в Сервере MBean.

Уведомления

Уведомление — это экземпляр класса Notification или подкласса. Помимо своего Java-класса, оно имеет строку типа, которая может отличать его от других уведомлений того же класса.

MBean, который будет генерировать уведомления, должен реализовывать интерфейс NotificationBroadcaster или NotificationEmitter. Обычно это делается путем наследования от NotificationBroadcasterSupport или делегирования экземпляру этого класса. Вот пример:

    public class Configuration extends NotificationBroadcasterSupport
            implements ConfigurationMBean {
        ...
        private void updated() {
            Notification n = new Notification(...);
            sendNotification(n);
        }
    }
        

Уведомления могут приниматься слушателем, который является объектом, реализующим интерфейс NotificationListener. Вы можете добавить слушателя к MBean с помощью метода MBeanServer.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object). Вы можете необязательно предоставить фильтр для этого метода, чтобы выбрать только уведомления, представляющие интерес. Фильтр — это объект, реализующий интерфейс NotificationFilter.

MBean может быть слушателем уведомлений, испускаемых другими MBeans в том же Сервере MBean. В этом случае он реализует NotificationListener, и используется метод MBeanServer.addNotificationListener(ObjectName, ObjectName, NotificationFilter, Object) для прослушивания.

Удаленный доступ к MBeans

Сервер MBean может быть доступен удаленно через коннектор. Коннектор позволяет удаленному Java-приложению получить доступ к серверу MBean так же, как и к локальному. Пакет javax.management.remote определяет коннекторы.

Спецификация JMX также определяет понятие адаптера. Адаптер выполняет перевод между запросами в протоколе, таком как SNMP или HTML, и доступом к серверу MBean. Например, операция SNMP GET может привести к getAttribute на сервере MBean.

Взаимодействие между версиями спецификации JMX

Когда клиент подключается к серверу с помощью JMX Remote API, возможно, что у них нет одинаковой версии спецификации JMX. Здесь описана версия спецификации JMX 1.4. Предыдущие версии были 1.0, 1.1 и 1.2. (Версии 1.3 не было.) Стандартный JMX Remote API работает с версией 1.2 и выше, поэтому в развертывании, основанном на стандартах, вопросы межсетевого взаимодействия возникают только с версией 1.2 и выше.

Каждая версия спецификации JMX продолжает реализовывать функции предыдущих версий. Таким образом, когда клиент работает в более ранней версии, чем сервер, не должно быть никаких проблем с межсетевым взаимодействием.

Когда клиент работает в более поздней версии, чем сервер, некоторые новые функции могут быть недоступны, как подробно описано в следующих разделах. Клиент может определить версию сервера, просмотрев атрибут SpecificationVersion сервера MBeanServerDelegate.

Если удаленный сервер MBean имеет версию 1.2

  • Вы не можете использовать подстановочные знаки в ключевом свойстве ObjectName, например, domain:type=Foo,name=*. Подстановочные знаки, соответствующие всему свойству, все еще разрешены, например, *:* или *:type=Foo,*.

  • Вы не можете использовать Query.isInstanceOf в запросе.

  • Вы не можете использовать синтаксис с точкой, такой как HeapMemoryUsage.used в атрибуте наблюдаемого объекта монитора, как описано в документации для пакета javax.management.monitor.

Since:
1.5
См. также:
  • Спецификация JMX, версия 1.4
Пакет Описание
javax.management.loading
Предоставляет классы, реализующие расширенную динамическую загрузку.
javax.management.modelmbean
Предоставляет определение классов ModelMBean.
javax.management.monitor
Предоставляет определение классов мониторов.
javax.management.openmbean
Предоставляет открытые типы данных и классы описателей Open MBean.
javax.management.relation
Предоставляет определение сервиса Relationships.
javax.management.remote
Интерфейсы для удаленного доступа к серверам JMX MBean.
javax.management.timer
Предоставляет определение MBean таймера.
Класс Описание
Attribute
Представляет атрибут MBean, связывая его имя со значением.
AttributeChangeNotification
Предоставляет определения уведомлений об изменении атрибутов, отправляемых MBean.
AttributeChangeNotificationFilter
Этот класс реализует интерфейс NotificationFilter для attribute change notification.
AttributeList
Представляет список значений для атрибутов MBean.
AttributeNotFoundException
Указанный атрибут не существует или не может быть получен.
AttributeValueExp
Представляет атрибуты, используемые в качестве аргументов для реляционных ограничений.
BadAttributeValueExpException
Выбрасывается, когда недопустимый атрибут MBean передается методу построения запроса.
BadBinaryOpValueExpException
Выбрасывается, когда в метод построения запроса передано недопустимое выражение.
BadStringOperationException
Выбрасывается, когда в метод построения запроса передано недопустимое строковое действие.
ConstructorParameters
Аннотация для конструктора, показывающая соответствие параметров конструктора методам-геттерам созданного объекта.
DefaultLoaderRepository Устарело.
Используйте MBeanServer.getClassLoaderRepository() вместо этого.
Descriptor
Дополнительные метаданные для элемента JMX.
DescriptorAccess
Этот интерфейс используется для доступа к дескрипторам класса Descriptor, связанным с компонентом JMX, т.е.
DescriptorKey
Мета-аннотация, описывающая, как элемент аннотации относится к полю в Descriptor.
DescriptorRead
Интерфейс для чтения Descriptor элемента управления интерфейсом, такого как MBeanInfo.
DynamicMBean
Определяет методы, которые должны быть реализованы динамическим MBean (MBean, который предоставляет динамический интерфейс управления).
ImmutableDescriptor
Неизменяемый дескриптор.
InstanceAlreadyExistsException
MBean уже зарегистрирован в репозитории.
InstanceNotFoundException
Указанный MBean не существует в репозитории.
IntrospectionException
Во время интроспекции MBean произошла ошибка.
InvalidApplicationException
Выбрасывается, когда выполняется попытка применить одно из следующих: подзапрос выражение к MBean или квалифицированное выражение атрибута к MBean неверного класса.
InvalidAttributeValueException
Указанное значение не является допустимым для атрибута.
JMException
Исключения, выбрасываемые реализациями JMX.
JMRuntimeException
Исключения времени выполнения, выдаваемые реализациями JMX.
JMX
Статические методы из API JMX.
ListenerNotFoundException
Указанный слушатель MBean не существует в репозитории.
MalformedObjectNameException
Формат строки не соответствует допустимому ObjectName.
MBeanAttributeInfo
Описывает атрибут MBean, доступный для управления.
MBeanConstructorInfo
Описывает конструктор, доступный для MBean.
MBeanException
Представляет исключения, определенные пользователем, выбрасываемые методами MBean в агенте.
MBeanFeatureInfo
Предоставляет общую информацию для объекта дескриптора MBean.
MBeanInfo
Описывает интерфейс управления, предоставляемый MBean; т. е. набор атрибутов и операций, доступных для операций управления.
MBeanNotificationInfo
Класс MBeanNotificationInfo используется для описания характеристик различных экземпляров уведомлений, испускаемых MBean, для данного Java класса уведомления.
MBeanOperationInfo
Описывает операцию управления, доступную для MBean.
MBeanParameterInfo
Описывает аргумент операции, доступной для MBean.
MBeanPermission
Разрешение, контролирующее доступ к операциям MBeanServer.
MBeanRegistration
Может быть реализован MBean для выполнения операций до и после регистрации или отмены регистрации из сервера MBean.
MBeanRegistrationException
Оборачивает исключения, выбрасываемые методами preRegister(), preDeregister() интерфейса MBeanRegistration.
MBeanServer
Это интерфейс для управления MBean на стороне агента.
MBeanServerBuilder
Этот класс представляет собой билдер, создающий реализацию по умолчанию MBeanServer.
MBeanServerConnection
Этот интерфейс представляет способ взаимодействия с сервером MBean, локальным или удаленным.
MBeanServerDelegate
Представляет сервер MBean с точки зрения управления.
MBeanServerDelegateMBean
Определяет интерфейс управления объектом класса MBeanServerDelegate.
MBeanServerFactory
Предоставляет ссылки на серверы MBean.
MBeanServerInvocationHandler
InvocationHandler, который перенаправляет методы интерфейса управления MBean через сервер MBean в MBean.
MBeanServerNotification
Представляет уведомление, испускаемое сервером MBean через MBeanServerDelegate MBean.
MBeanServerPermission
Разрешение для выполнения действий, связанных с MBeanServer.
MBeanTrustPermission
Это разрешение представляет "доверие" к подписывающему лицу или кодовой базе.
MXBean
Аннотация для явного обозначения интерфейса как интерфейса MXBean или как не являющегося интерфейсом MXBean.
END_OF_DOCUMENT_MARKER
NotCompliantMBeanException
Исключение, возникающее при попытке зарегистрировать объект в сервере MBean, который не является совместимым с JMX MBean.
Notification
Класс Notification представляет уведомление, выпущенное MBean.
NotificationBroadcaster
Интерфейс, реализованный MBean, который выпускает уведомления.
NotificationBroadcasterSupport
Предоставляет реализацию интерфейса NotificationEmitter.
NotificationEmitter
Интерфейс, реализованный MBean, который выпускает уведомления.
NotificationFilter
Должен быть реализован любым классом, работающим в качестве фильтра уведомлений.
NotificationFilterSupport
Предоставляет реализацию интерфейса NotificationFilter.
NotificationListener
Должен быть реализован объектом, который хочет получать уведомления.
ObjectInstance
Используется для представления имени объекта MBean и его имени класса.
ObjectName
Представляет имя объекта MBean или шаблон, который может соответствовать именам нескольких MBean.
OperationsException
Представляет исключения, выброшенные в сервере MBean при выполнении операций с MBean.
PersistentMBean
Этот класс является интерфейсом, который должен быть реализован MBean, которые предназначены для сохранения.
Query
Создает объект запроса.
QueryEval
Позволяет выполнить запрос в контексте конкретного сервера MBean.
QueryExp
Представляет реляционные ограничения, аналогичные условиям запроса "где" в базах данных.
ReflectionException
Представляет исключения, выброшенные в сервере MBean при использовании классов java.lang.reflect для вызова методов MBean.
RuntimeErrorException
Когда в агенте возникает java.lang.Error, он должен быть перехвачен и повторно выброшен как RuntimeErrorException.
RuntimeMBeanException
Представляет исключения времени выполнения, выброшенные методами MBean в агенте.
RuntimeOperationsException
Представляет исключения времени выполнения, выброшенные в агенте при выполнении операций с MBean.
ServiceNotFoundException
Представляет исключения, возникающие при отсутствии запрошенной службы.
StandardEmitterMBean
MBean, интерфейс управления которого определяется рефлексией над Java-интерфейсом, и который выпускает уведомления.
StandardMBean
MBean, интерфейс управления которого определяется рефлексией над Java-интерфейсом.
StringValueExp
Представляет строки, которые являются аргументами к реляционным ограничениям.
ValueExp
Представляет значения, которые могут быть переданы в качестве аргументов к реляционным выражениям.

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.management/javax/management/package-summary.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API