在基于 Spring 的设置中收集 Hibernate/Ehcache 统计信息并通过 JMX 公开它们似乎很容易。互联网上有很多资源可以帮助,例如http://snippets.dzone.com/posts/show/11159
但是,所有这些文章都假设一个人正在使用某种 Hibernate session 工厂。我不是 - 我的实体是 JPA 注释的,我使用 javax.persistence.EntityManager
。 如果我正在部署到 Java EE 容器,我可能已经能够通过 JNDI 获取 Hibernate session 工厂,如此处所述 http://internna.blogspot.com/2007/08/hibernate-statistics-in-enterprise-5.html但我在 Tomcat 上...
如何解决这个问题?我还没有想出解决方案。
如果我有对 Ehcache CacheManager
的引用,我可以尝试类似的方法:
<context:mbean-server />
<bean class="net.sf.ehcache.management.ManagementService" init-method="init">
<constructor-arg ref="..myCacheManager.."/>
<constructor-arg ref="mbeanServer"/>
<constructor-arg value="true"/>
<constructor-arg value="true"/>
<constructor-arg value="true"/>
<constructor-arg value="true"/>
</bean>
因为缓存管理器是由 Hibernate 创建的(即它不是 Spring bean),所以它不会工作。我尝试用
替换那个 ref<constructor-arg><bean id="cacheManager" class="net.sf.ehcache.CacheManager" factory-method="getInstance"/></constructor-arg>
希望我能以某种方式捕获正确的实例。也不会起作用,因为这实际上会创建一个新的缓存管理器实例。
请您参考如下方法:
我最近构建了一个基于 Spring 的示例 Web 应用程序,它非常干净地为最新版本的 Spring、Hibernate 和 Ehcache 启用了 JMX。
它有基于 EntityManager 的访问和 DAO 访问(包括事务!)的示例。它还展示了如何进行基于注释的注入(inject),以避免必须为 bean 使用 Spring 的 xml 配置。甚至还有一个使用注释的基于 SpringMVC 的示例 servlet。基本上,这是在任何 servlet 引擎之上运行的相当强大的应用服务器的基于 Spring 的版本。
它还没有记录在案,但我很快就会讲到。看看配置文件和源代码,应该很清楚了。
这背后的动机是,我厌倦了所有疯狂的博客文章以及 50 种不同的设置方式,并最终制作了一个简单的来源供人们使用。它在 github 上,所以请随意 fork 该项目并用它做任何你想做的事情。