Java Management Extensions
Java Management Extensions (JMX) — технология Java для управления и мониторинга приложений, системных объектов, устройств, например, принтеров и сервисно-ориентированных сетей. Эти ресурсы представлены объектами, называемыми MBeans. В программном интерфейсе (API) поддерживается динамическая загрузка и создание экземпляров классов.
Описание
Проектирование и разработка средств управления и мониторинга приложений на Java возможны с помощью комплекта средств динамического управления Java (Java Dynamic Management Kit)[1].
JSR 003[2] (Java Community Process) определял спецификации JMX 1.0, 1.1 и 1.2. Разработка JMX 2.0 велась по JSR 255, но данный JSR был впоследствии отозван[3]. JMX Remote API 1.0 для удалённого управления и мониторинга определён JSR 160[4]. Расширение JMX Remote API для веб-сервисов разрабатывалось в рамках JSR 262[5].
Технология раннее была принята сообществом J2EE, а с версии 5.0 входит в состав J2SE. «JMX» является товарным знаком Oracle Corporation.
Архитектура
JMX использует трёхуровневую архитектуру:
- Пробный уровень — также называемый уровень инструментирования; включает пробные компоненты (MBean) для инструментирования ресурсов.
- Агентный уровень или MBeanServer — ядро JMX; служит посредником между MBean и приложениями.
- Уровень удалённого управления позволяет удалённым приложениям обращаться к MBeanServer через соединители и адаптеры. Соединитель обеспечивает полный удалённый доступ к API MBeanServer с использованием различных технологий связи (RMI, IIOP, JMS, WS-* и другие), тогда как адаптер приспосабливает API под другие протоколы или под веб-интерфейсы.
Приложения могут быть универсальными консолями, например, JConsole[6] или MC4J[7], либо специализированными отраслевыми системами мониторинга. Внешние приложения могут взаимодействовать с MBean с помощью соединителей и адаптеров протоколов JMX. Соединители связывают агент с удалённым приложением управления с поддержкой JMX; такая связь требует наличия соединителя на стороне агента JMX и клиентского соединителя в управляющем приложении.
Java SE поставляется с одним стандартным соединителем — RMI-соединителем, использующим протокол Java Remote Method Protocol в рамках API RMI, который широко применяется в управляющих приложениях.
Адаптеры протоколов дают представление о JMX-агенте через определённый протокол. Приложения, подключающиеся к адаптеру, как правило, заточены под этот протокол.
Управляемые компоненты
Управляемый компонент — также называемый MBean — частный случай JavaBean, создаваемый с использованием внедрения зависимостей. Управляемые компоненты широко применяются в технологии Java Management Extensions, однако в Java EE 6 этому понятию придано более широкое и детализированное определение.
MBean представляет ресурс, запускаемый в виртуальной машине Java, будь то приложение или техническая служба Java EE . Они могут использоваться для сбора статистики по производительности, использованию ресурсов или возникновению проблем (pull); для получения и установки настроек приложения; для уведомления о событиях, сбоях или изменениях состояния.
В Java EE 6 управляемым компонентом считается bean, реализованный на основе класса Java. Класс верхнего уровня рассматривается как управляемый компонент, если он объявлен таковым в других спецификациях технологий Java EE, например, JavaServer Faces, или если он удовлетворяет следующим условиям:
- Это не нестатический внутренний класс.
- Это конкретный класс или класс, аннотированный
@Decorator. - Класс не содержит аннотаций EJB-компонентов, определяющих компоненты, и не объявлен как bean EJB в
ejb-jar.xml.
Для объявления bean как управляемого компонента не требуется специальной аннотации.
MBean может сообщать серверу MBeanServer об изменениях своих атрибутов, реализуя интерфейс javax.management.NotificationEmitter. Приложение, заинтересованное в изменениях, регистрирует слушателя (javax.management.NotificationListener) в MBeanServer. Следует учитывать, что JMX не гарантирует доставку всех уведомлений слушателям[8].
Выделяют два базовых типа MBean:
- Стандартные MBean реализуют бизнес-интерфейс c методами чтения/записи атрибутов и операций (методов).
- Динамические MBean реализуют интерфейс
javax.management.DynamicMBean, позволяя перечислять атрибуты и операции, а также получать и устанавливать значения атрибутов.
Дополнительные типы: Open MBean, Model MBean и Monitor MBean. Open MBean — это динамический компонент, использующий базовые типы данных, является более самостоятельным и удобным для пользователя. Model MBean — динамический компонент, который может конфигурироваться во время выполнения; в спецификации предусмотрена универсальная реализация для динамического управления ресурсами во время работы.
MXBean (Platform MBean) — особый тип MBean, реализующий поддержку подсистем виртуальной машины Java вроде сборщика мусора, JIT-компиляции, пулов памяти, многопоточности и др.
MLet (management applet) — служебный компонент для загрузки, создания экземпляров и регистрации MBean в MBeanServer на основе XML-описания. Формат XML-дескриптора:[9]
<MLET CODE = ''class'' | OBJECT = ''serfile'' ARCHIVE = ''archiveList'' [CODEBASE = ''codebaseURL''] [NAME = ''objectName''] [VERSION = ''version''] > [arglist] </MLET>
Поддержка
JMX поддерживается на разных уровнях рядом поставщиков и открытых проектов:
- JMX внедрён в серверы Java-приложений, такие как OpenCloud Rhino Application Server, JBoss, JOnAS, WebSphere Application Server, WebLogic, SAP NetWeaver Application Server, Oracle Application Server 10g, Sun Java System Application Server.
- JMX поддерживается серверами UnboundID Directory Server, Directory Proxy Server и Synchronization Server[10].
- Средства управления, поддерживающие данный протокол: Empirix OneSight, GroundWork Monitor, Hyperic, HP OpenView, IBM Director, ITRS Geneos, Nimsoft NMS, OpenNMS[11], Zabbix, Zenoss Core, Zyrion, SolarWinds, Uptime Infrastructure Monitor, LogicMonitor[12].
- JMX поддерживается контейнерами сервлетов, такими как Apache Tomcat[13] и Jetty.
- MX4J — открытая реализация JMX для корпоративных вычислений.
- jManage — свободная JMX-консоль корпоративного уровня с веб- и консольным интерфейсом.
- MC4J — открытая визуальная консоль для подключения к серверам, поддерживающим JMX.
- snmpAdaptor4j — открытый проект для упрощённого доступа к MBean через протокол SNMP.
- jvmtop — лёгкий открытый инструмент мониторинга на JMX через командную строку.
- Prometheus может принимать JMX-данные через JMX Exporter[14], который формирует метрики в формате Prometheus.
- Инфраструктурный агент New Relic собирает данные JMX[15], которые отображаются на различных графиках платформы наблюдаемости[16][17].
- Jolokia — Java-агент, предоставляющий доступ к JMX по HTTP для интеграции с не-Java системами.
Примечания
Литература
- "Enabling Component Architectures with JMX" (Марк Флёри, Юха Линдфорс)
- "Introducing A New Vendor-Neutral J2EE Management API" (Андреас Шэффер)
- "Java в сфере управления" (Макс Гофф, 1999)
- 20 октября
- 20 ноября
- 29 декабря
- JMX/JBoss — микрокернальная архитектура
- "Управление JMX-приложениями с помощью jManage 1.0" (Ракеш Калра, 16 января 2006)
- "Управление J2EE-системами с помощью JMX и JUnit" (Лукас МакГрегор) Архивировано 26 мая 2008 года.
- Sun Java для мониторинга и управления
- The Java EE 6 Tutorial: About managed beans
- Benjamin G. Sullins, Mark B. Whipple: JMX in Action: You will also get your first JMX application up and running, Manning Publications Co. 2002, ISBN 1-930110-56-1
- J. Steven Perry: Java Management Extensions, O'Reilly, ISBN 0-596-00245-9
- Jeff Hanson: Connecting JMX Clients and Servers: Understanding the Java Management Extensions, APress L. P., ISBN 1-59059-101-1
- Marc Fleury, Juha Lindfors: JMX: Managing J2EE with Java Management Extensions, Sams Publishing, ISBN 0-672-32288-9