Статьи

Задачи Apache Ant для доступа JMX

Я хотел вызвать операции JMX из задач Ant. Однако найти пригодную для использования библиотеку задач муравья и ее использование было довольно сложно. Итак, позвольте мне поделиться своим опытом, чтобы облегчить жизнь другим.

Задачи Ant для операций JMX

Я решил следовать  документации Tomcat  и использовал задачи Ant, распространяемые вместе с tomcat.

Просто для записи,  использование не ограничено Tomcat развернутым mMeans JMX . Для меня это работает для процесса Java, доступного через JConsole через удаленное соединение.

Извлечение библиотеки

  1. Поскольку я хотел получить последнюю версию, я использовал центральный репозиторий maven «поиск по имени класса» и искал: org.apache.catalina.ant.jmx.JMXAccessorTask (см.  Запрос )
  2. после этого я пошел за  файл jar tomcat 8  (называется  tomcat-catalina-ant-8.0.8.jar)
  3. и просто скопировал последние доступные для моего  $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

Вот двухэтапный подход:

  1. подключиться к удаленному серверу через JMX и впоследствии
  2. вызвать операцию на конкретном 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 .