Необходимо ли отменить регистрацию MBean на платформе MBean Server? - PullRequest
7 голосов
/ 22 декабря 2008

Я начал играть с MBeans за то, что раскрыл некоторую информацию о приложении. В целом вся совокупность HOWTO / Tutorials / Blog posts / Samples онлайн научит вас, как реализовать MBean и зарегистрировать его на MBean-сервере, но никогда не упоминайте (или только курсивно) об отмене регистрации MBean с сервера.

Я обеспокоен тем, что MBean должен иметь ссылку на довольно тяжелый объект для предоставления информации о состоянии этого объекта.

Поддерживает ли Platform MBean Server слабую ссылку на MBean или какой-либо другой подобный прием, чтобы гарантировать, что в конечном итоге он получит GC, если ваше приложение больше не содержит ссылок на него? Является ли вообще необязательной отмена регистрации, что объясняет, почему никто не говорит об этом в руководствах по JMX?

1 Ответ

5 голосов
/ 27 декабря 2008

Вы не можете «слабо» зарегистрировать MBean на сервере (пока), ожидая, что он будет GCed, когда нет других ссылок на него.

Как говорится, вы должны обязательно прочитать несколько сообщений Ионна Макмануса на эту тему.

https://web.archive.org/web/20120207140653/http://weblogs.java.net/blog/emcmanus/archive/2005/07/cleaning_up_an_1.html

Было предложено, чтобы JMX API может иметь некоторую явную поддержку "Слабые MBeans", как это. Я не уверен их достаточно, чтобы оправдать включая их в API, и я также не уверен, что общего назначения API для слабых MBeans будет выглядеть так. Но выше показано, как вы можете создать ваши собственные слабые MBeans при необходимости.

https://web.archive.org/web/20090114131740/http://weblogs.java.net/blog/emcmanus/archive/2005/07/javaone_feedbac.html

«Слабые» MBeans. MBean часто управляет другим объектом Java, который «ресурс» для мониторинга или контролируется. Но что, если только ссылка на этот ресурс из MBean? Можем ли мы как-то организовать MBean исчезнуть, если ресурс больше не упоминается никем еще

Включение и выключение дорогих MBeans. Некоторые MBeans могут экспортировать информацию что постоянно отбирается и что дорого собирать. Ты не обязательно, чтобы эти MBeans были работает все время. Специальные решения легко, например setThreadContentionMonitoringEnabled метод в java.lang.management.ThreadMXBean. Но возможно, может быть более общий конвенция, такая как Метод setDetailLevel (int).

...