Можно ли с помощью JMX регистрировать или показывать MBeans из разных виртуальных машин на одном центральном сервере MBean? - PullRequest
4 голосов
/ 15 марта 2012

Я ищу решение для регистрации MBean-серверов или целых MBean-серверов с разных виртуальных машин Java на центральном MBean-сервере, который также должен работать на отдельной виртуальной машине. Цель состоит в том, чтобы иметь только один центральный сервер MBean, который содержит все MBean всей системы. Еще одно дополнительное требование заключается в том, что «клиентские» MBean-серверы должны подключаться / регистрироваться к центральному MBean-серверу, а не наоборот. Центральный MBean-сервер не нуждается в каких-либо знаниях «клиентских» MBean-серверов для регистрации.

Я нашел только примеры JMX, в которых «главный» MBean-сервер подключается к «клиентским» MBean-серверам и получает их зарегистрированные MBean-компоненты, но не другим способом. К сожалению, метод registerMBean (), который используется для регистрации ваших собственных MBean-компонентов, существует только для локальных MBean-серверов, но не для удаленных MBean-серверов в MBeanServerConnection. Там можно использовать только метод createMbean (), проблема здесь в том, что он работал для регистрации MBean на удаленном сервере MBean, но затем вам нужно использовать разные объекты, один локальный и другой на удаленном сервере MBean. Поэтому проблема в том, что когда что-то меняется на локальном объекте, изменения происходят только там, зарегистрированный MBean на удаленном сервере MBean не получает эти изменения (новые значения переменных ...). Единственное решение, которое у меня есть, - создать цикл для отмены регистрации MBean-компонентов на удаленном Сервере и создания их новыми, чтобы получить действительные значения объекта. Это очень уродливо, а также не очень хорошо для производительности.

Я надеюсь, что кто-то может дать мне подсказку, как я могу сделать это лучше.

1 Ответ

4 голосов
/ 16 марта 2012

OpenDMK предоставляет полный способ сделать это, используя Каскадная служба . Из документации:

Каскадная служба позволяет получить доступ к MBeans субагента непосредственно через MBean-сервер главного агента. Каскадный сервис полностью переработан в Java Dynamic Management Kit (Java DMK) 5.1, чтобы позволить ему работать через протоколы соединителя определяется удаленным API Java Management Extensions (JMX). Наследие каскадная служба теперь устарела. Примеры наследия каскадная служба была сохранена в главе 25 по причинам обратная совместимость. Однако при использовании устаревшей Java DMK разъемы, вы должны использовать новый CasdingServiceMBean с обернутым устаревшие соединители, а не полагаться на устаревшее наследие API каскадного агента.

В этой библиотеке есть несколько интересных фрагментов, которые должны были быть включены в стандарт Java SE в JMX 2.0. Каскадная служба, я думаю, была одной из них. Как только вы поймете, как это работает, вы можете заключить, что это то, что вы можете реализовать самостоятельно, хотя есть несколько сложных моментов, которые OpenDMK учитывает. Я не уверен, насколько активен проект, но программное обеспечение кажется стабильным.

Вы можете найти комплект документации здесь . Кроме того, я создал mavenized проект сборки пакетов здесь .

// Николай

...