Возможно ли с помощью JMX зарегистрировать или показать MBeans из разных виртуальных машин на одном центральном сервере MBean?

Я ищу решение для регистрации 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 ответ

Решение

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

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

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

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

// Николай

Другие вопросы по тегам