3

Spring 3.1.1.RELEASE、JUnit 4.8.1、およびHibernate4.1.5.Finalを使用しています。2番目のレベルのキャッシュが正しく構成されているかどうかをテストしようとしていますが、その方法がわかりません。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>

私は私の第2レベルのキャッシュをそのように構成しました...

    <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にアクセスする必要があるようですが、適切な一連のキャストを理解できません。

ありがとう、-デイブ

4

4 に答える 4

5

私は過去にこれに取り組んでいました: 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" />
于 2013-01-01T13:20:27.430 に答える
2

Entity Manager には getDelegate というメソッドがあります。これを呼び出して型キャストし、セッション オブジェクトを休止状態にします。セッションオブジェクトを休止状態にしたら、セッションファクトリと統計を取得できます。

于 2013-01-01T16:33:03.717 に答える
0

最も簡単な方法は、Beanを定義し、SessionFactoryそれをAutowireすることです。私が知る限り、SessionFactoryからを取得する直接的な方法はありません。EntityManager

于 2012-12-31T23:03:54.933 に答える