Главная » Spring » Экспортирование компонентов Spring как управляемых компонентов

0

Существует несколько способов использования JMX для управ- ления компонентами внутри приложения Spitter. Для простоты начнем с самого скромного изменения – добавим в контроллер HomeController  новое свойство spittlesPerPage:

public static final int DEFAULT_SPITTLES_PER_PAGE = 25; private int spittlesPerPage = DEFAULT_SPITTLES_PER_PAGE; public   void   setSpittlesPerPage(int   spittlesPerPage)   {

this.spittlesPerPage    =    spittlesPerPage;

}

public  int  getSpittlesPerPage()  { return   spittlesPerPage;

}

Прежде, когда HomeController вызывал метод getRecentSpittles() класса SpitterService, он передавал ему константу DEFAULT_SPITTLES_ PER_PAGE, обеспечивая вывод не более 25 сообщений на главной стра- нице. Теперь же решение о количестве сообщений будет принимать- ся не только на этапе сборки приложения, но и может быть изменено во время выполнения, с помощью механизма JMX. Новое свойство spittlesPerPage – это первый шаг к намеченной цели.

Но само по себе свойство spittlesPerPage не поддерживает возмож- ности изменения извне количества сообщений, отображаемых на главной странице. Это всего лишь свойство компонента, подобное любому другому свойству. Поэтому необходимо сделать следующий шаг и экспортировать компонент HomeController как управляемый компонент MBean. В результате этого шага свойство spittlesPerPage будет экспортировано как управляемый атрибут компонента MBean и доступно для изменения.

Ключом к JMX-фикации компонентов в Spring является MBean- Exporter – компонент, экспортирующий один или более компонен- тов Spring как компоненты-модели (Model MBean) в сервер MBean. Сервер MBean (иногда называется агентом MBean) – это контейнер, где располагаются управляемые компоненты MBean и посредством которого осуществляется доступ к этим управляемым компонентам MBean.

Как показано на рис. 14.1, экспортирование компонентов Spring в виде управляемых компонентов MBean позволяет вторгаться в вы- полняющееся приложение, просматривать свойства компонентов и вызывать их методы с помощью инструментов управления на основе JMX, таких как JConsole и VisualVM.

Следующий элемент <bean> объявляет компонент MBeanExporter в Spring, экспортирующий компонент homeController как Model MBean:

<bean  id="mbeanExporter" class="org.springframework.jmx.export.MBeanExporter">

<property  name="beans">

<map>

<entry  key="spitter:name=HomeController" value-ref="homeController"/>

</map>

</property>

</bean>

В этой простейшей форме компонент MBeanExporter  можно на- страивать посредством его свойства beans, внедряя в него отобра-

Рис. 14.1. Компонент Spring MBeanExporter экспортирует свойства и методы других компонентов Spring

как атрибуты и операции JMX-сервера MBean. Благодаря этому появляется возможность заглянуть внутрь выполняющегося приложения с помощью таких JMX-инструментов управления, как JConsole

жение (Map) с описанием одного или более компонентов, которые требуется экспортировать в виде управляемых компонентов-моде- лей MBean. Атрибут key в каждом элементе <entry> определяет имя, которое будет дано экспортируемому компоненту MBean (конструи- руется из имени домена управления и пары ключ/значение – spitter:name=HomeController в случае с управляемым компонентом HomeController). В атрибуте value элемента <entry> указывается ссылка на экспортируемый компонент Spring. Здесь экспортируется компо- нент homeController, что дает возможность управлять его свойствами во время выполнения посредством механизма JMX.

Откуда берется сервер MBean? Согласно настройкам, компонент MBeanExporter предполагает, что он выполняется внутри сервера прило- жений (такого как Tomcat) или в каком-то другом контексте, предоставля- ющем сервер MBean. Но если предполагается, что приложение на основе фреймворка Spring будет выполняться автономно или в контейнере, где отсутствует сервер MBean, необходимо настроить сервер MBean в кон- тексте Spring. Эти настройки можно выполнить с помощью элемента

<context:mbean-server>:

<context:mbean-server />

Элемент <context:mbean-server> создаст компонент, играющий роль сервера MBean в контексте приложения Spring. По умолчанию этот ком-

понент получит идентификатор mbeanServer. Учитывая это, его можно внедрить в свойство server компонента MBeanExporter, чтобы указать, какой сервер MBean должен использоваться для экспортирования управ- ляемых компонентов MBean:

<bean  id="mbeanExporter" class="org.springframework.jmx.export.MBeanExporter">

<property  name="beans">

<map>

<entry  key="spitter:name=HomeController" value-ref="homeController"/>

</map>

</property>

<property  name="server"  ref="mbeanServer"  />

</bean>

После настройки компонента MBeanExporter компонент homeControl- ler будет экспортироваться как Model MBean в сервер MBean и ста- нет доступен для управления под именем HomeController. На рис. 14.2 показано, как выглядит управляемый компонент homeController в ин- струменте JConsole.

Слева на рис. 14.2 можно видеть все общедоступные члены компо- нента homeController, экспортируемые как атрибуты и операции управ- ляемого компонента MBean. Вероятно, это не совсем то, что хотелось бы. В действительности нам хотелось всего лишь иметь возможность изменять свойство spittlesPerPage. Нам не нужна возможность вызова метода showHomePage() или выполнения других операций с компонен- том HomeController. То есть нам нужен способ, который позволит ука- зать, какие атрибуты и операции должны экспортироваться.

Фреймворк Spring предлагает несколько возможностей, позволяю- щих обеспечить более точное управление атрибутами и операциями управляемых компонентов MBean, включая:

# объявление имен экспортируемых/игнорируемых методов;

# определение интерфейса для компонента, содержащего экс- портируемые методы;

# использование аннотаций для обозначения управляемых атри-

бутов и операций.

Попробуем применить каждую из этих возможностей, чтобы по- нять, какая из них лучше подходит для нашего управляемого ком- понента HomeController. Начнем с объявления имен экспортируемых методов.

Рис. 14.2. Вид управляемого компонента HomeController в окне JConsole

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

По теме:

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