Я занят внедрением решения для мониторинга с использованием JMX.Мне нужно предоставить определенные атрибуты, которые в основном будут счетчиками для клиента JMX.Я использовал Spring, чтобы подключить все это, и это прекрасно работает.
Ниже мой класс MBean:
@Component
@ManagedResource(objectName="org.samples:type=Monitoring,name=Sample")
public class JmxMonitorServiceImpl implements JmxMonitorService {
private AtomicInteger counter = new AtomicInteger(0);
@Override
public int incrementCounter() {
return counter.incrementAndGet();
}
@ManagedAttribute(description="Current Counter value")
public int getCounter() {
return counter.intValue();
}
@Override
@ManagedOperation(description="Reset the Counter to Zero")
public void resetCounter() {
counter.set(0);
}
}
Атрибуты MBean отображаются должным образом, поэтому у меня нет проблем.Моя проблема возникает в тот момент, когда я хочу увеличить счетчик.
Из приведенного выше фрагмента вы увидите, что у метода incrementCounter нет примечания @ManagedOperation
.Причина этого заключается в том, что я не хочу показывать это клиенту JMX, а хочу использовать его только в своих компонентах.
Единственный способ заставить его работать с MBean из нескольких компонентов - это создатьобъект прокси.Здесь я также использую Spring, извлеките из контекста ниже:
<bean id="jmxMonitorServiceProxy" class="org.springframework.jmx.access.MBeanProxyFactoryBean">
<property name="objectName" value="org.samples:type=Monitoring,name=Sample" />
<property name="proxyInterface" value="org.samples.monitoring.JmxMonitorService" />
</bean>
С этим прокси я теперь могу взаимодействовать с моим MBean, но для увеличения счетчика мне нужно добавить в метод аннотацию @ManagedOperation
в противном случае я получаю исключение, что
Операция incrementCounter отсутствует в ModelMBeanInfo
Если этот MBean используется только внутри 1 компонента, я мог бы преодолеть эту проблему, поскольку Spring предоставляет действительный классэкземпляр для меня также, но как только вы используете один и тот же MBean в нескольких компонентах, он создает свой собственный экземпляр.
Так что после длинного объяснения :), мой вопрос заключается в том, если разоблачение этих чувствительных методов через проксиединственный способ использовать MBean в компонентах или есть кто-то, кто может указать мне правильное направление?
С нетерпением ждем ответов:)