вторник, 7 октября 2008 г.

JMX+Spring+Hibernate

Хибернейт поддерживает сбор самой разнообразной информации и метрик, которые могут быть весьма полезны при отладке и разработке. При использовании широко распространенной связки Spring+Hibernate можно очень легко получить доступ к этим данным следующим образом:

1) в конфигурации SessionFactory указываем: 
<property name="hibernate.generate_statistics">true</property>
это включает собственно сбор статистики.

2) регистрируем следующие бины в Spring:
<bean id="jmxExporter" class="org.springframework.jmx.export.MBeanExporter">
        <property name="autodetect" value="false" />
        <property name="assembler">
            <bean id="jmxAssembler"                class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
                <property name="attributeSource">
                    <bean               class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
                </property>
            </bean>
        </property>
        <property name="beans">
            <map>
                <entry key="org.hibernate:name=statistics">
                    <bean class="org.hibernate.jmx.StatisticsService">
                        <property name="statisticsEnabled" value="true" />
                        <property name="sessionFactory">
                            <ref bean="sessionFactory"/>
                        </property>
                    </bean>
                </entry>
            </map>
        </property>
    </bean>
Этот бин предоставляется нам Spring'ом и делает всю работу по экспорту статистики посредством JMX и сам выполняет все необходимые действия, нам нужно только передать ему нашу SessionFactory(выделено жирным).

3) В Томкате добавляем следующие параметры JVM:
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
Здесь важен порт - туда мы будем коннектиться JConsole'ю, которая и отобразит всю статистику.

4) Запустив Томкат и убедившись, что ошибок и эксепшенов нет, идем в JAVA_HOME/bin и запускаем отттуда jconsole.exe. Когда поднимется форма, идем на вкладку Remote (удаленные соединения с JMX-сервером) и указываем host(Томката) и port(8004 в нашем случае). После успешного соединения можно смотреть самую разнообразную статистику по JVM вообще и Hibernate в частности.

Комментариев нет: