Главная » Spring » Объявление управляемых компонентов с помощью аннотаций Spring

0

Помимо сборщиков информации, с которыми мы познакомились выше, в Spring имеется еще один сборщик, известный как Metadata- MBeanInfoAssembler, который можно настроить для использования ан- нотаций, отмечающих методы компонентов как операции и атрибу- ты управляемых компонентов. Я мог бы показать, как пользоваться этим сборщиком, но не буду, так как связывание его вручную – весь- ма утомительное занятие, не стоящее того, чтобы пользоваться этим способом включения поддержки аннотаций.

Вместо этого я познакомлю вас с элементом <context:mbean-export> из конфигурационного пространства имен context в Spring. Этот эле- мент автоматически выполняет связывание экспортера управляемых компонентов MBean со всеми сборщиками информации, включая поддержку аннотаций Spring. Все, что необходимо сделать, – исполь- зовать этот элемент вместо объявления компонента MBeanExporter:

<context:mbean-export  server="mbeanServer"  />

Теперь, чтобы превратить любой компонент Spring в управляе- мый компонент MBean, достаточно лишь снабдить его аннотаци- ей @ManagedResource и отметить экспортируемые методы аннотацией

@ManagedOperation или @ManagedAttribute. Например, в листинге 14.1 показано, как с помощью представленных аннотаций превратить HomeController в управляемый компонент MBean.

Листинг 14.1. Преобразование HomeController в управляемый компонент с помощью аннотаций

package  com.habuma.spitter.mvc; import     java.util.Map;

import  org.springframework.beans.factory.annotation.Autowired; import org.springframework.jmx.export.annotation.ManagedAttribute; import    org.springframework.jmx.export.annotation.ManagedResource; import    org.springframework.stereotype.Controller;

import    org.springframework.web.bind.annotation.RequestMapping; import     com.habuma.spitter.service.SpitterService;

@Controller

@ManagedResource(objectName="spitter:name=HomeController")    //  Экспортирует

// HomeController

// как  MBean

public class HomeController {

@ManagedAttribute // Экспортирует spittlesPerPage

// как управляемый атрибут

public  void  setSpittlesPerPage(int  spittlesPerPage)  { this.spittlesPerPage  =  spittlesPerPage;

}

@ManagedAttribute // Экспортирует spittlesPerPage

// как управляемый атрибут public   int   getSpittlesPerPage()   {

return spittlesPerPage;

}

}

Аннотация @ManagedResource применяется на уровне класса и ука- зывает, что этот компонент должен экспортироваться как MBean. Атрибут objectName определяет домен (spitter) и имя (HomeController) управляемого компонента MBean.

Оба метода доступа к свойству spittlesPerPage отмечены аннотаци- ей @ManagedAttribute, указывающей, что это свойство должно экспор- тироваться как атрибут управляемого компонента. Обратите вни- мание, что необязательно аннотировать оба метода доступа. Если отметить аннотацией только метод setSpittlesPerPage(), вы сможете изменять значение свойства посредством механизма JMX, но не сможете просматривать его. Аналогично, если отметить аннотацией только метод getSpittlesPerPage(), вы сможете лишь просматривать значение свойства.

Отметьте также, что к методам доступа вместо аннотации @Managed- Attribute можно применять аннотацию @ManagedOperation. Например:

@ManagedOperation

public  void  setSpittlesPerPage(int  spittlesPerPage)  { this.spittlesPerPage  =  spittlesPerPage;

}

@ManagedOperation

public  int  getSpittlesPerPage()  { return   spittlesPerPage;

}

В результате эти методы будут экспортироваться как операции управляемого компонента, но при этом свойство spittlesPerPage не станет атрибутом управляемого компонента. Это обусловлено тем, что методы, отмеченные аннотацией @ManagedOperation, интерпретиру- ются исключительно как обычные методы, а не как методы доступа к свойству. То есть аннотация @ManagedOperation должна использовать- ся только для экспортирования операций управляемого компонента MBean, а аннотация @ManagedAttribute – атрибутов.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии