Коллекция коротких инструкций по включению JMX в нескольких популярных технологиях Java.
Продолжая наше путешествие с JMX (см .: … JMX для людей ), мы узнаем, как включить поддержку JMX (обычно возможности статистики и мониторинга) в некоторых популярных средах. Большую часть этой информации можно найти на домашних страницах проекта, но я решил собрать ее, добавив несколько полезных советов.
Hibernate (с поддержкой Spring)
Предоставить
статистику Hibernate с помощью JMX довольно
просто , однако при использовании JPA API для получения базового SessionFactory требуются некоторые неприятные обходные пути
Обратите внимание, что я создал подкласс встроенного в Springs LocalContainerEntityManagerFactoryBean. Переопределив метод createNativeEntityManagerFactory (), я могу получить доступ к EntityManagerFactory и попытаться уменьшить его до org.hibernate.ejb.EntityManagerFactoryImpl, и мы смогли зарегистрировать Hibernate Mbean.
Еще одна вещь ушла. Очевидно, что мы должны использовать наш собственный подкласс вместо org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean. Кроме того, чтобы собирать фактическую статистику вместо того, чтобы просто видеть нули до конца, мы должны установить флаг hibernate.generate_statistics.
Вот пример того, что мы можем увидеть в JvisualVM (не забудьте установить все плагины!):
Кроме того, мы получаем хорошую запись в Hibernate:
Ehcache
Мониторинг кэшей очень важен, особенно в приложениях, где вы ожидаете, что значения обычно присутствуют там. Я склонен запрашивать базу данных так часто, как это необходимо, чтобы избежать ненужных аргументов метода или локального
кэширования . Все, чтобы сделать код максимально простым. Однако этот подход работает только тогда, когда кэширование на уровне базы данных работает правильно. Как и в Hibernate, включение мониторинга JMX в
EhCache является двухэтапным процессом. Сначала вам нужно выставить предоставленный MBean в MBeanServer:
Обратите внимание, что я явно установил имя CacheManager. Это не обязательно, но это имя используется как часть имени Mbean, а имя по умолчанию содержит значение hashCode, что не очень приятно. Последний штрих — включить статистику на основе кеша:
Теперь мы можем с радостью отслеживать различные характеристики кэширования каждого кэша в отдельности:
как мы видим, увеличивается процент пропусков кэша. Никогда хорошая вещь. Если мы не включаем статистику кэширования, включение JMX все еще является хорошей идеей, поскольку мы бесплатно получаем множество операций управления, включая очистку и очистку кэшей (полезно при отладке и тестировании).
Кварцевый планировщик
По моему скромному мнению,
планировщик Quartz — очень недооцененная библиотека, но я напишу статью об этом самостоятельно. На этот раз мы только научимся контролировать его через JMX. К счастью, это так же просто, как добавить:
В файл quartz.properties. Поддержка JMX в Quartz могла бы быть немного шире, но все же можно запросить, например, какие задания выполняются в данный момент. Кстати, новая основная версия Quartz (2.x) предлагает очень хорошую DSL-подобную поддержку планирования:
Apache Commons DBCP
Apache Commons
DBCP — самая разумная библиотека пула JDBC, с которой я когда-либо сталкивался. Существует также
c3p0 , но, похоже, он уже не активно развивается.
Tomcat JDBC Connection Pool выглядел многообещающе, но, поскольку он входит в состав Tomcat, ваши драйверы JDBC больше не могут быть упакованы в WAR.
Единственная проблема с DBCP заключается в том, что он не поддерживает JMX. На всех (см. Этот
двухлетний выпуск). К счастью, это легко обойти. Кроме того, мы узнаем, как использовать встроенную поддержку Spring JMX.
Выглядит как стандартный
BasicDataSourceимеет все, что нам нужно, все, что нам нужно сделать, это представить существующие метрики через JMX. В Spring это очень просто — просто создайте подкласс BasicDataSource и добавьте аннотацию @ManagedAttribute к нужным атрибутам:
Вот несколько метрик источника данных, сходящих с ума во время нагрузочного тестирования:
поддержка JMX в самой среде Spring довольно проста. Как вы видели выше, предоставление произвольного атрибута или операции — это просто добавление аннотации. Вам нужно только помнить о включении поддержки JMX с использованием XML или Java (также см .:
SPR-8943: аннотация, эквивалентная <context: mbean-export /> с @Configuration ):
или же:
Эта статья не была особенно захватывающей. Однако знание метрик JMX позволит нам в кратчайшие сроки написать простые, но модные информационные панели. Оставайтесь в курсе!
От http://nurkiewicz.blogspot.com/2011/12/enabling-jmx-in-hibernate-ehcache-qurtz.html