当前位置: 首页 > 面试题库 >

如何从实体管理器访问Hibernate统计信息?

郭阳泽
2023-03-14
问题内容

我正在使用Spring 3.1.1.RELEASE,JUnit 4.8.1和Hibernate
4.1.5.Final。我正在尝试测试二级缓存是否配置正确,但是不确定如何做。我正在使用像这样在Spring中配置的JPA实体管理器…

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaDialect">
        <bean class="org.collegeboard.springboard.core.jpa.HibernateJpaDialect">
            <property name="flushMode" value="COMMIT"/>
        </bean>
    </property>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="persistenceXmlLocation" value="classpath:META-INF/test-persistence.xml"/>
    <property name="persistenceUnitName" value="orgTestingDatabase"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="sharedEntityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
   <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

我已经像这样配置了二级缓存…

    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 
    <!--  Collect stats, this is for testing if the cache is working -->
    <property name="hibernate.generate_statistics">true</property>

给定javax.persistence.EntityManager,如何访问org.hibernate.stat.Statistics对象?显然,我需要以某种方式访问​​SessionFactory,但是我无法弄清楚适当的一系列转换。

谢谢-戴夫


问题答案:

过去我一直在努力:通过Tomcat中的Spring与JMX公开Hibernate(缓存)统计信息

如果您只是想知道“它是否在工作”,则可以为org.hibernate.stat.Statistics或启用Hibernate调试日志记录org.hibernate.stat.*。但是,如果您(像我一样)想要获得缓存统计信息报告,则可以执行以下操作。这将显示具有所有统计信息的JMX
bean:

/**
 * 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);
  }
}

应用上下文:

<!-- 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" />


 类似资料:
  • 否则,我将需要把我的大查询放在一个注释中。我更希望有更清楚的东西,而不是一个长的文本。

  • 我知道JMS没有统计规范,所以没有标准的方式来读取诸如“处理的消息数”、“队列中的平均时间”等内容。 我在考虑两种方法: 直接访问ActiveMQ统计信息 维护JMS消息使用者中的统计信息 对于(1),我没有找到如何使用Spring Boot获取thos统计数据的示例。对于(2),我想知道消费者本身是否需要维护统计数据,或者是否有更好的方法。 有没有人有任何有效的例子?

  • 本文向大家介绍java学生信息管理系统设计与实现,包括了java学生信息管理系统设计与实现的使用技巧和注意事项,需要的朋友参考一下 闲暇之余用JAVA写了个学生信息的管理系统,由于博主还是萌新,代码难免有冗余和错误的地方,如果您发现有什么不足之处或者错误,请留言。博主会尽量回复。 需求分析 一个学生信息管理系统应该包含这些内容: 教师页面 在教师页面应该包含: 学生页面 在教学生页面应该包含: 包

  • 我正在尝试将当前使用Ehcache 2的Spring Boot项目迁移到最新的Ehcache 3.7。 除了缺少Spring Boot管理缓存统计数据外,一切似乎都很好。 以下是以前的Ehcache 2配置: 以及新的Ehcache 3配置: POM依赖项(仅与缓存管理相关): Spring配置: 我曾经使用Ehcache 2获取这种统计信息: 但使用Ehcache 3,SBA Insights/

  • 本文向大家介绍java学生信息管理系统设计,包括了java学生信息管理系统设计的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java学生信息管理系统的具体代码,供大家参考,具体内容如下 本例的学生信息添加进入数据库的事务(可以提交事务,事务回滚,用本地线程完善) 主页面index.jsp 获取数据库连接的工具ConnUtils5.java 资源文件jdbc.properties 值

  • 我一直在获取服务器无法为提供程序。到目前为止,它在TomcatMySQL下运行良好。我的坚持。xml的配置 谷歌搜索之后,有几种解决方案。但即使试了大约两天,也没有运气。要解决此问题,我们是否需要在WebSphere中安装任何修复包?请在下面的链接中找到堆栈跟踪文件。 https://www.ibm.com/developerworks/community/forums/html/topic?id