Я пытался заставить образец JMX MXBean работать в сконфигурированном Spring веб-приложении, но любые базовые атрибуты в MXBean появляются как UNDEFINED, когда я подключаюсь к 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-компонента с именем «mgmt». У меня есть регистрация в общедоступном конструкторе без аргументов, который указывает, что он создается.
правильно автоматически обнаруживает и регистрирует интерфейс MgmtMXBean с моим контейнером Tomcat 6.0. Я могу подключиться к MBeanServer в Tomcat с помощью jconsole и перейти к Mgmt MXBean.
При проверке MXBean «Атрибут» всегда отображается как НЕОПРЕДЕЛЕННЫЙ, но jconsole может указать правильный тип атрибута. Кроме того, нажатие «Обновить» в jconsole фактически не вызывает метод получения «Атрибута» - у меня есть регистрация в методе получения, чтобы указать, вызывается ли он (аналогично регистрации конструктора, который работает), и я ничего не вижу в журналах .
На данный момент я не уверен, что я делаю неправильно. Я пробовал несколько вещей, включая создание явного экземпляра Spring MBeanExporter и регистрацию MXBean вручную, но это либо приводит к тому, что MBean/MXBean не регистрируется на сервере MBean Tomcat, либо значение атрибута UNDEFINED.
По разным причинам я бы предпочел не использовать аннотации Spring @ManagedResource/@ManagedAttribute.
Есть ли что-то, чего мне не хватает в документах Spring или спецификациях MBean/MXBean?