I was wrestling with this in the past: Exposing Hibernate (cache) statistics through JMX with Spring in Tomcat
If you simply want to know "if it's working" you could enable Hibernate debug logging for org.hibernate.stat.Statistics
or org.hibernate.stat.*
. However, if you (like I) want to have a cache statistics report you could do something like the following. This exposes a JMX bean with all the stats:
/**
* Provides code to register Hibernate's 2nd level cache statistics bean with a
* JMX MBean server. Assumes that both the MBeanServer and the
* EntityManagerFactory are available as Spring-managed beans. Note that while
* registering this class enables the collection of statistics even if that was
* previously disabled.
*/
public class HibernateCacheStatisticsJmxRegistration {
@Autowired
private EntityManagerFactory entityManagerFactory;
@Autowired
private MBeanServer mbeanServer;
private ObjectName objectName;
/**
* Registers the statistics MBean that wraps a Hibernate session factory.
*
* @throws JMException if anything fails..
* @see HibernateCacheStatisticsJmxRegistration#unregister()
*/
public void register() throws JMException {
final SessionFactory sessionFactory = ((HibernateEntityManagerFactory) entityManagerFactory).getSessionFactory();
objectName = new ObjectName("net.sf.ehcache:type=CacheStatistics,name=Hibernate2ndLevelCache");
final StatisticsService statsMBean = new StatisticsService();
statsMBean.setSessionFactory(sessionFactory);
statsMBean.setStatisticsEnabled(true);
mbeanServer.registerMBean(statsMBean, objectName);
}
/**
* Unregisters the MBean that was registered.
*
* @throws JMException if the de-registration fails
* @see HibernateCacheStatisticsJmxRegistration#register()
*/
public void unregister() throws JMException {
mbeanServer.unregisterMBean(objectName);
}
}
The app context:
<!-- Setting up Ehcache manager for various caches. -->
<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml" />
</bean>
<ehcache:annotation-driven cache-manager="ehCacheManager" />
<!-- Exposing cache statistics through JMX. -->
<context:mbean-server />
<bean class="net.sf.ehcache.management.ManagementService" init-method="init">
<constructor-arg ref="ehCacheManager"/>
<constructor-arg ref="mbeanServer"/>
<constructor-arg value="true"/>
<constructor-arg value="true"/>
<constructor-arg value="true"/>
<constructor-arg value="true"/>
</bean>
<bean class="HibernateCacheStatisticsJmxRegistration" init-method="register" destroy-method="unregister" />