Как задать имя сети.sf.ehcache.CacheManager для мониторинга JMX?
Я использую EhCache 1.4.0, Spring 3.0.5 в веб-приложении, развернутом на Tomcat 6 с использованием JRE 1.6. Я предоставляю через 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>
Я должен разрешить очистить все записи в кэше L2 с помощью инструмента jmxterm , например:
run --bean net.sf.ehcache:type=CacheManager,name=net.sf.ehcache.CacheManager@605df3c5 clearAll
Я знаю о jconsole, чтобы определить точное CacheManager
, из контекста, но я не могу использовать его по некоторым причинам, в которые я не буду входить.
Пока все хорошо, но предположим, что мой СПМ (Сервер Tomcat) имеет 2 развернутых приложения, оба из которых позволяют осуществлять мониторинг JMX для EhCache. Имена этих двух mbeans будет:
net.sf.ehcache:type=CacheManager,name=net.sf.ehcache.CacheManager@605df3c5
net.sf.ehcache:type=CacheManager,name=net.sf.ehcache.CacheManager@49ff3459
Как вы можете видеть, они не совсем полезны при попытке определить, какой кэш очистить.
Итак, мой вопрос: есть ли возможность задать имя каждого CacheManager, чтобы точно определить, какой из них следует использовать для очистки всех записей в кэше L2 ?
Спасибо.
2 ответа:
Как только hibernateEhCacheManager доступен, можно вызвать его методы (установив including), используя следующее определение 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>
Я знаю, что ответ на этот вопрос был дан давно, но я думаю, что проще просто установить его в файле конфигурации 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>