7

JRE 1.6を使用してTomcat 6にデプロイされたWebアプリケーションでEhCache 1.4.0、Spring 3.0.5を使用しています。次のように、JMX を介して L2 キャッシュ管理を公開しています。

<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
    <property name="locateExistingServerIfPossible" value="true" />
</bean>

<util:property-path id="hibernateCacheProvider" path="sessionFactory.settings.cacheProvider" />

<bean id="hibernateEhCacheManager" class="com.mycompany.spring.beans.factory.config.UnaccessibleFieldRetrievingFactoryBean">
    <property name="targetObject" ref="hibernateCacheProvider" />
    <property name="targetField" value="manager" />
    <property name="makeInstanceFieldVisible" value="true" />
</bean>

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <description>The cacheManager configuration.</description>
    <property name="targetClass" value="net.sf.ehcache.management.ManagementService" />
    <property name="staticMethod" value="net.sf.ehcache.management.ManagementService.registerMBeans" />
    <property name="arguments">
        <list>
            <ref bean="hibernateEhCacheManager" />
            <ref bean="mbeanServer" />
            <value type="boolean">true</value>
            <value type="boolean">true</value>
            <value type="boolean">true</value>
            <value type="boolean">true</value>
        </list>
    </property>
</bean>

<bean class="org.springframework.jmx.export.annotation.AnnotationMBeanExporter">
    <property name="server" ref="mbeanServer" />
    <property name="beans">
        <map>
            <entry key="Hibernate:type=statistics,application=applicationOne">
                <bean class="org.hibernate.jmx.StatisticsService">
                    <property name="statisticsEnabled" value="true" />
                    <property name="sessionFactory" ref="sessionFactory" />
                </bean>
            </entry>
        </map>
    </property>
</bean>

<bean id="hbm.properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="properties">
        <props>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.generate_statistics">false</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
            <prop key="hibernate.cache.use_query_cache">true</prop>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
            <prop key="hibernate.cache.provider_configuration_file_resource_path">applicationOne-web/ehcache.xml</prop>
            <prop key="hibernate.cache.query_cache_factory">org.hibernate.cache.StandardQueryCacheFactory</prop>
        </props>
    </property>
</bean>

次のように、 jmxtermツールを使用して、L2 キャッシュ内のすべてのエントリをクリアできるようにする必要があります。

run --bean net.sf.ehcache:type=CacheManager,name=net.sf.ehcache.CacheManager@605df3c5 clearAll

コンテキストから正確な , を決定するjconsoleを認識しCacheManagerていますが、いくつかの理由でそれを使用しない場合があります。

ここまでは順調ですが、私の JVM (Tomcat サーバー) に 2 つのアプリケーションがデプロイされており、どちらも EhCache の JMX 監視を許可しているとします。これら 2 つの MBean の名前は次のようになります。

net.sf.ehcache:type=CacheManager,name=net.sf.ehcache.CacheManager@605df3c5
net.sf.ehcache:type=CacheManager,name=net.sf.ehcache.CacheManager@49ff3459

ご覧のとおり、どのキャッシュをクリアするかを決定しようとする場合、それらはあまり役に立ちません。

だから私の質問は: L2 キャッシュ内のすべてのエントリをクリアするために使用するものを正確に識別するために、各 CacheManager の名前を設定する可能性はありますか?

ありがとうございました。

4

2 に答える 2

15

これはずっと前に回答されたことは知っていますが、ehcache 構成ファイル (applicationOne-web/ehcache.xml) に設定するだけの方が簡単だと思います。

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false"
    monitoring="autodetect" dynamicConfig="true" name="MY_CACHE_MANAGER_NAME">

...
</ehcache>
于 2013-04-30T19:22:52.607 に答える
2

hibernateEhCacheManagerが使用可能になると、次のBean定義を使用してそのメソッドを呼び出す(インクルードを設定する)ことができます。通常、これでCacheManagerの名前を変更できます。

 <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject">
            <ref local="hibernateEhCacheManager"/>
        </property>
        <property name="targetMethod">
            <value>setName</value>
        </property>
        <property name="arguments" value="<the_desired_name>"/>
</bean>
于 2011-11-22T13:21:35.673 に答える