Я хотел вызвать операции 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
реж.
использование
У меня не было возможности (или мотивации?) Проверить все доступные задачи, полный список доступных задач можно увидеть в zip-файле:, org/apache/catalina/ant/jmx/antlib.xml
для меня присутствовали следующие:
<typedefname="open"classname="org.apache.catalina.ant.jmx.JMXAccessorTask"/><typedefname="set"classname="org.apache.catalina.ant.jmx.JMXAccessorSetTask"/><typedefname="get"classname="org.apache.catalina.ant.jmx.JMXAccessorGetTask"/><typedefname="invoke"classname="org.apache.catalina.ant.jmx.JMXAccessorInvokeTask"/><typedefname="query"classname="org.apache.catalina.ant.jmx.JMXAccessorQueryTask"/><typedefname="create"classname="org.apache.catalina.ant.jmx.JMXAccessorCreateTask"/><typedefname="unregister"classname="org.apache.catalina.ant.jmx.JMXAccessorUnregisterTask"/><typedefname="equals"classname="org.apache.catalina.ant.jmx.JMXAccessorEqualsCondition"/><typedefname="condition"classname="org.apache.catalina.ant.jmx.JMXAccessorCondition"/>
из них я дал следующую попытку:
org.apache.catalina.ant.jmx.JMXAccessorTask org.apache.catalina.ant.jmx.JMXAccessorInvokeTask org.apache.catalina.ant.jmx.JMXAccessorQueryTask
Для демонстрации я использую Glassfish 4.0.
Пример: перечисление JMX MBeans
Давайте предположим, что мы хотим получить MBean по имени (а именно:) java.lang:type=Memory
. Обратите внимание, что имя пользователя и пароль не были необходимы для доступа (в противном случае они должны быть указаны через соответствующие свойства).
Заслуживает внимания тот resultproperty
, который может содержать массив, из которого мы можем получить имя. Итак, имея в сборке муравей сценарий:
<typedefname="jmxQuery"classname="org.apache.catalina.ant.jmx.JMXAccessorQueryTask"/><jmxQueryhost="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>
результаты для меня в следующем выводе:
[jmxQuery] memory.Length=1[jmxQuery] memory.0.Name=java.lang:type=Memory[echo]RetrievedMBeans count:1[echo]The1.st one has name: java.lang:type=Memory
Пример: вызов операции через JMX
Вот двухэтапный подход:
- подключиться к удаленному серверу через JMX и впоследствии
- вызвать операцию на конкретном MBean.
Для демонстрационных целей, давайте предположим , что мы хотим вызвать сборку мусора (через ссылающиеся операции: gc()
на MBean по имени: java.lang:type=Memory
)
Примерный файл Ant build build выполняет свою работу (обратите внимание, ref
значение свойства, которое должно быть одинаковым для этих двух задач):
<typedefname="jmxOpen"classname="org.apache.catalina.ant.jmx.JMXAccessorTask"/><typedefname="jmxInvoke"classname="org.apache.catalina.ant.jmx.JMXAccessorInvokeTask"/><jmxOpenhost="localhost"port="8686"ref="glassfish"failOnError="true"/><jmxInvokename="java.lang:type=Memory"operation="gc"echo="true"delimiter=" "failOnError="true"ref="glassfish"/>
Дальнейшая информация
Для более подробной информации, я рекомендую прочитать официальную документацию Tomcat, а также Javadocs .