19.6.1. 监测SessionFactory
你可以有两种方式访问SessionFactory
的数据记录,第一种就是自己直接调用 sessionFactory.getStatistics()
方法读取、显示统计
数据。
此外,如果你打开StatisticsService
MBean选项,那么Hibernate则可以使用JMX技术 发布其数据记录。你可以让应用中所有的SessionFactory
同时共享一个MBean,也可以每个 SessionFactory分配一个MBean。下面的代码即是其演示代码:
// MBean service registration for a specific SessionFactory
Hashtable tb = new Hashtable();
tb.put("type", "statistics");
tb.put("sessionFactory", "myFinancialApp");
ObjectName on = new ObjectName("hibernate", tb); // MBean object name
StatisticsService stats = new StatisticsService(); // MBean implementation
stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory
server.registerMBean(stats, on); // Register the Mbean on the server
// MBean service registration for all SessionFactory's
Hashtable tb = new Hashtable();
tb.put("type", "statistics");
tb.put("sessionFactory", "all");
ObjectName on = new ObjectName("hibernate", tb); // MBean object name
StatisticsService stats = new StatisticsService(); // MBean implementation
server.registerMBean(stats, on); // Register the MBean on the server
TODO:仍需要说明的是:在第一个例子中,我们直接得到和使用MBean;而在第二个例子中,在使用MBean之前 我们则需要给出SessionFactory的JNDI名,使用hibernateStatsBean.setSessionFactoryJNDIName("my/JNDI/Name")
得到SessionFactory,然后将MBean保存于其中。
你可以通过以下方法打开或关闭SessionFactory
的监测功能:
在配置期间,将
hibernate.generate_statistics
设置为true
或false
;在运行期间,则可以可以通过
sf.getStatistics().setStatisticsEnabled(true)
或hibernateStatsBean.setStatisticsEnabled(true)
你也可以在程序中调用clear()
方法重置统计数据,调用logSummary()
在日志中记录(info级别)其总结。