How do we configure such that we obtain Hibernate statistics through JMX in Spring MVC based web applications. Is there any better way of tracking Hibernate performance.
Thanks Bozho for your inputs. I made two changes as specified below.
<bean id="jmxExporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
<property name="server" ref="mbeanServer" />
<property name="beans">
<map>
<entry key="Qvantel:name=hibernateStatistics"
value-ref="hibernateStatisticsMBean" />
</map>
</property>
<property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING" />
</bean>
Set hibernate.generate_statistics
to true
(either in persistence.xml
or in hibernate.cfg.xml
or in your session factory bean configuration). Then register this bean:
<bean id="hibernateStatisticsMBean" class="org.hibernate.jmx.StatisticsService">
<property name="statisticsEnabled" value="true" />
<property name="sessionFactory" value="#{entityManagerFactory.sessionFactory}" />
</bean>
(If you are not using JPA, just specify your sessionFactory
bean instead of getting it through the EMF)
And finally you need an mbean server and exporter:
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
<property name="locateExistingServerIfPossible" value="true" />
</bean>
<bean id="jmxExporter" class="org.springframework.jmx.export.MBeanExporter"
lazy-init="false">
<property name="server" ref="mbeanServer" />
<property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/>
<property name="beans">
<map>
<entry key="yourkey:name=hibernateStatistics" value-ref="hibernateStatisticsMBean" />
</map>
</property>
</bean>