Обновление атрибутов JMX MBean без предоставления методов клиенту - PullRequest
4 голосов
/ 21 марта 2011

Я занят внедрением решения для мониторинга с использованием 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 в компонентах или есть кто-то, кто может указать мне правильное направление?

С нетерпением ждем ответов:)

1 Ответ

2 голосов
/ 21 марта 2011

Переместите счетчик на другой компонент и введите его во всех экземплярах MBean.

...