Инфраструктура экспорта JMX, похожая на экспортер Spring JMX
Есть ли что-то похожее на экспортер Spring JMX БЕЗ использования Spring Framework?
SimpleJMX кажется разумным, но, похоже, очень молодой фреймворк, продвигаемый только одним человеком.
Мне нужно представить целый ряд атрибутов, методов и классов как JMX, но я не хочу возиться с JMX API и писать тонны JMX-интерфейсов.
И нет никакого способа ввести Spring в проект (на всякий случай, если вы спросите). Любые советы или идеи очень ценятся:-)
2 ответа
Хорошо, я быстро оценил SimpleJMX и JMXUtils. Оба работают, как и ожидалось, и очень похожи на экспортер Spring JMX. Тем не менее, я считаю, что JMXUtils более удобен в моем случае.
С JMXUtils очень легко зарегистрировать / отменить регистрацию MBean-компонентов на уже запущенной платформе mbean server. В моем случае я использовал GlassFish V3 в качестве сервера приложений, и я не хотел запускать другой MBean-сервер только для своих собственных mbeans-компонентов.
Насколько я вижу, API SimpleJMX не позволяет этого, и вы либо вынуждены запустить другой MBean Server с помощью API SimpleJMX и зарегистрировать созданные mbeans (очень легко с API), либо вы начинаете возиться с попыткой зарегистрировать mbeans в сервер платформы Mbean. Последнее немного сложнее, и поэтому я решил использовать JMXUtils.
Недостатком JMXUtils является манипулирование именем компонента. SimpleJMX использует атрибуты в аннотациях (domainName, beanName), что очень полезно, но с JMXUtils вы должны знать синтаксис именования mbeans при использовании доменов mbean. В общем, ничего страшного, но на мой вкус у SimpleJMX есть лучшее решение для этого.
Суть в том, что обе библиотеки великолепны и выполняют свою работу. Я решил использовать JMXUtils.
Я пересекаю org.weakref.jmxutils
библиотека в общем-dbcp-jmx. Проверять, выписываться ManagedBasicDataSource.java
для примера:
@Managed(description = "The current number of active connections that have been allocated from this data source.")
public synchronized int getNumActive() {
return super.getNumActive();
}
Я никогда не использовал эту библиотеку сам, но, похоже, работает.