Я хотел вызвать операции JMX из задач Ant. Однако найти пригодную для использования библиотеку задач муравья и ее использование было довольно сложно. Поэтому позвольте мне поделиться своим опытом, чтобы облегчить жизнь другим.
Задачи Ant для операций JMX
Я решил следовать документации Tomcat и использовал задачи Ant, распространяемые вместе с tomcat.
Просто для записи, использование не ограничено Tomcat развернутым mMeans JMX . Для меня это работает для процесса Java, доступного через JConsole через удаленное соединение.
Извлечение библиотеки
- Поскольку я хотел получить последнюю версию, я использовал функцию «поиск по имени класса» в центральном репозитории maven и искал:
org.apache.catalina.ant.jmx.JMXAccessorTask(см. Запрос ) - после этого я отправился на файл jar tomcat 8 (называемый
tomcat-catalina-ant-8.0.8.jar) - и просто скопировал последнюю версию, доступную для моего
$ANT_HOME/lib.
использование
У меня не было возможности (или мотивации?) Проверить все доступные задачи, полный список доступных задач можно увидеть в архивном файле: org/apache/catalina/ant/jmx/antlib.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
|
<typedef name="open" classname="org.apache.catalina.ant.jmx.JMXAccessorTask" /><typedef name="set" classname="org.apache.catalina.ant.jmx.JMXAccessorSetTask" /><typedef name="get" classname="org.apache.catalina.ant.jmx.JMXAccessorGetTask" /><typedef name="invoke" classname="org.apache.catalina.ant.jmx.JMXAccessorInvokeTask" /><typedef name="query" classname="org.apache.catalina.ant.jmx.JMXAccessorQueryTask" /><typedef name="create" classname="org.apache.catalina.ant.jmx.JMXAccessorCreateTask" /><typedef name="unregister" classname="org.apache.catalina.ant.jmx.JMXAccessorUnregisterTask" /><typedef name="equals" classname="org.apache.catalina.ant.jmx.JMXAccessorEqualsCondition" /><typedef name="condition" classname="org.apache.catalina.ant.jmx.JMXAccessorCondition" /> |
из них я дал следующую попытку:
|
1
2
3
|
org.apache.catalina.ant.jmx.JMXAccessorTaskorg.apache.catalina.ant.jmx.JMXAccessorInvokeTaskorg.apache.catalina.ant.jmx.JMXAccessorQueryTask |
Для демонстрации я использую Glassfish 4.0.
Пример: перечисление JMX MBeans
Давайте предположим, что мы хотим получить MBean по имени (а именно: java.lang:type=Memory ). Обратите внимание, что имя пользователя и пароль не были необходимы для доступа (в противном случае они должны быть указаны через соответствующие свойства).
Заслуживает внимания resultproperty , которое может содержать массив, из которого мы можем получить имя. Итак, имея в сборке муравей сценарий:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<typedef name="jmxQuery" classname="org.apache.catalina.ant.jmx.JMXAccessorQueryTask" /><jmxQuery host="localhost" port="8686" echo="true" name="java.lang:type=Memory" resultproperty="memory" /><echo>Retrieved MBeans count: ${memory.Length}</echo><echo>The 1.st one has name: ${memory.0.Name}</echo> |
результаты для меня в следующем выводе:
|
1
2
3
4
|
[jmxQuery] memory.Length=1 [jmxQuery] memory.0.Name=java.lang:type=Memory [echo] Retrieved MBeans count: 1 [echo] The 1.st one has name: java.lang:type=Memory |
Пример: вызов операции через JMX
Вот двухэтапный подход:
- подключиться к удаленному серверу через JMX и впоследствии
- вызвать операцию на конкретном MBean.
Для демонстрации, давайте предположим, что мы хотим вызвать сборку мусора (с помощью вызова операции: gc() для MBean с именем: java.lang:type=Memory )
Примерный файл Ant ant build выполняет свою работу (обратите внимание, что значение свойства ref должно быть одинаковым для этих двух задач):
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<typedef name="jmxOpen" classname="org.apache.catalina.ant.jmx.JMXAccessorTask" /><typedef name="jmxInvoke" classname="org.apache.catalina.ant.jmx.JMXAccessorInvokeTask" /><jmxOpen host="localhost" port="8686" ref="glassfish" failOnError="true" /><jmxInvoke name="java.lang:type=Memory" operation="gc" echo="true" delimiter=" " failOnError="true" ref="glassfish" /> |
Дальнейшая информация
Для получения более подробной информации, я рекомендую прочитать официальную документацию Tomcat, а также Javadocs .
| Ссылка: | Задачи Apache Ant для доступа к JMX от нашего партнера JCG Питера Бутковича из блога pb о жизни и ИТ- блоге. |