Я пытался получить пример JMX MXBean, работающего в веб-приложении, сконфигурированном Spring, но все основные атрибуты MXBean становятся НЕ УКАЗАНЫ, когда я соединяюсь с jconsole.
Интерфейс / классы Java:
public interface IJmxBean { // marker interface for spring config, see below
}
public interface MgmtMXBean { // lexical convention for MXBeans - mgmt interface
public int getAttribute();
}
public class Mgmt implements IJmxBean, MgmtMXBean { // actual JMX bean
private IServiceBean serviceBean; // service bean injected by Spring
private int attribute = 0;
@Override
public int getAttribute() {
if(serviceBean != null) {
attribute = serviceBean.getRequestedAttribute();
}
return attribute;
}
public void setServiceBean(IServiceBean serviceBean) {
this.serviceBean = serviceBean;
}
}
Конфигурация Spring JMX:
<beans>
<context:component-scan base-package="...">
<context:include-filter type="assignable" expression="...IJmxBean" />
</context:component-scan>
<context:mbean-export />
</beans>
Вот что я знаю до сих пор:
Элемент правильно создает экземпляр компонента с именем bean«Упр».У меня есть вход в открытый конструктор с нулевым аргументом, который указывает, что он создается.
правильно автоматически обнаруживает и регистрирует интерфейс MgmtMXBean с моим контейнером Tomcat 6.0.Я могу подключиться к MBeanServer в Tomcat с помощью jconsole и перейти к MXMean-компоненту Mgmt.
При проверке MXBean «Атрибут» всегда указывается как НЕ УКАЗАННЫЙ, но jconsole может сказать правильныйтип атрибута.Кроме того, нажатие «Обновить» в jconsole на самом деле не вызывает метод получения «Атрибут» - у меня есть вход в метод получения, чтобы указать, вызывается ли он (аналогично ведению журнала конструктора, который работает), и я ничего не вижу в журналах..
На данный момент я не уверен, что я делаю не так.Я пробовал несколько вещей, включая создание явного экземпляра Spring MBeanExporter и регистрацию MXBean вручную, но это либо приводит к тому, что MBean / MXBean не регистрируется на сервере MBean Tomcat, либо к значению атрибута UNDEFINED.
По разным причинам я бы предпочел не использовать аннотации Spring @ ManagedResource / @ ManagedAttribute.
Есть ли что-то, чего мне не хватает в документах Spring или спецификациях MBean / MXBean?