Я хотел вызвать операции 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 о жизни и ИТ- блоге. |