#java #jmx
#java #jmx
Вопрос:
Ищу рекомендации при определении MBean, который отправляет уведомления, особенно в отношении типа уведомлений. В JMX Best Practices на сайте Oracle говорится следующее. Но она немного устарела и написана до Java6.
Уведомления должны быть экземплярами javax.management.Уведомление или один из подклассов из пространства имен javax.management. Информация, которая не вписывается ни в один из этих подклассов, должна передаваться путем прикрепления CompositeData к уведомлению с использованием метода setUserData.
Также на сайте Oracle я вижу, что Weblogic определяет некоторые из своих собственных подклассов, например WebLogicLogNotification. Ее лучшие практики гласят:
Все объекты уведомлений JMX расширяют javax.management.Тип объекта уведомления. JMX и WebLogic Server определяют дополнительные типы объектов уведомлений, такие как javax.management.AttributeChangeNotification. Дополнительные типы объектов содержат специализированные наборы информации, которые подходят для различных типов событий.
Наши уведомления не соответствуют ни одному из стандартных подклассов, поэтому, подобно WLS, рассматриваем возможность определения нашего собственного подкласса с пользовательскими средствами получения информации, которую мы хотим передать с уведомлениями. Или было бы лучше придерживаться базового javax.management.Уведомление и просто прикрепить нашу информацию к общему setUserData (объекту)? Если мы сделаем последнее, я полагаю, что объект должен быть типа JMX, такого как CompositeData, что не кажется таким приятным. Размышления о том, что было бы лучше с точки зрения потребителя?
РЕДАКТИРОВАТЬ: С точки зрения потребителей, я полагаю, недостатком пользовательского подкласса является то, что им пришлось бы включать это в свое приложение / classpath .
Ответ №1:
почти всегда использовать пользовательские типы данных в jmx — плохая идея. это очень ограничивает. придерживайтесь открытых типов, и ваши данные могут быть использованы любым клиентом jmx (java или иным).
обратите внимание, вы всегда можете предоставить несколько вспомогательных классов, которые выполняют своего рода преобразование «пользовательского компонента» <-> «открытого типа». классы, которые имеют доступ к вспомогательным классам, могут использовать эти удобные методы (например, ThreadInfo.from()), в то время как внешний код, отличный от Java, все еще способен использовать данные.