Конфигурация Maven
Это Maven pom.xml для настройки кода для этого примера:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>uk.co.jemos.experiments.jmx</groupId> <artifactId>jemos-jmx-experiments</artifactId> <version>0.0.1-SNAPSHOT</version> <name>jemos-jmx-experiments</name> <description>Jemos JMX Experiments</description> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.0.5.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.0.5.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jmx</artifactId> <version>2.0.8</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.0.5.RELEASE</version> <type>jar</type> <scope>test</scope> </dependency> </dependencies></project> |
Конфигурация пружины
Конфигурация Spring довольно проста:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?xml version="1.0" encoding="UTF-8"?> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> <context:property-placeholder location="classpath:jemos-jmx.properties" /> <bean id="rmiRegistry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"> <property name="port" value="${jemos.jmx.rmi.port}" /> </bean> <bean id="jemosJmxServer" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="rmiRegistry" > <property name="objectName" value="connector:name=rmi" /> <property name="serviceUrl" value="service:jmx:rmi://localhost/jndi/rmi://localhost:${jemos.jmx.rmi.port}/jemosJmxConnector" /> <property name="environment"> <!-- the following is only valid when the sun jmx implementation is used --> <map> <entry key="jmx.remote.x.password.file" value="${user.home}/.secure/jmxremote.password" /> <entry key="jmx.remote.x.access.file" value="${user.home}/.secure/jmxremote.access" /> </map> </property> </bean></beans> |
Эта конфигурация, хотя и простая, охватывает все, что требуется для следующего:
- Запустите сервер JMX из контекста приложения Spring
- Предоставить доступ к серверу JMX через удаленный URL RMI
- Защитите доступ к серверу JMX через аутентификацию и авторизацию
Несколько замечаний по поводу вышеуказанной конфигурации:
- Вы хотите экспортировать некоторую информацию о конфигурации, такую как порт реестра RMI и хост, на котором работает приложение. Хотя я перенес порт реестра RMI в файл свойств в classpath, я оставил «localhost» в качестве имени хоста. В реальной производственной среде, особенно если вы хотите масштабировать приложение по горизонтали, например, развернуть его на разных серверах, серверная часть удаленного URL-адреса также должна быть выведена на внешний сервер.
- Поскольку мы предоставляем удаленный URL-адрес RMI, для того, чтобы предоставить JMX-сервер реестру RMI, нам нужно запустить реестр RMI, если он еще не запущен; это происходит путем объявления RmiRegistryFactoryBean. Порт, на котором запущен реестр, должен совпадать с открытым URL-адресом.
- Приведенная выше конфигурация не включает поддержку MBean на основе аннотаций; такая конфигурация будет предметом моей следующей статьи, в которой я покажу, как кодировать простой MBean для изменения уровня ведения журнала вашего приложения на основе Log4j. Защита доступа к серверу JMX через аутентификацию и авторизацию
В приведенной выше конфигурации вы могли заметить следующую часть:
|
1
2
3
4
5
6
7
|
<property name="environment"> <!-- the following is only valid when the sun jmx implementation is used --> <map> <entry key="jmx.remote.x.password.file" value="${user.home}/.secure/jmxremote.password" /> <entry key="jmx.remote.x.access.file" value="${user.home}/.secure/jmxremote.access" /> </map> </property> |
Вышеуказанный фрагмент кода объявляет расположение двух файлов, один из которых используется для авторизации, другой — для аутентификации. Я решил поместить такие файлы в ~ / .secure, но в конечном итоге это зависит от вас. Содержание таких файлов простое:
Файл доступа JMX
jemosAdmin readwrite
Приведенный выше файл содержит имя пользователя (jemosAdmin) и его роль (readwrite).
Файл паролей JMX
В файле паролей JMX вы объявляете пользователя и его пароль:
jemosAdmin безопасный
Как только эта информация будет готова, вы можете запустить сервер JMX и затем получить к нему доступ через jconsole или jvisualvm (если вы используете JDK6 или более позднюю версию).
После проверки подлинности коннектор RMI становится доступным как компонент, как и все родные MBean-компоненты Oracle.
В моей следующей статье я покажу, как кодировать простую службу Logging MBean, которую можно использовать во время выполнения для изменения уровня ведения журнала пакета (и всех его подпакетов). Эта услуга дает преимущество увеличения времени безотказной работы и помогает устранять неполадки приложений.
Продолжите к части 2 .
Ссылка: JMX и Spring — часть 1 от нашего партнера по JCG

