在基于 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 该项目并用它做任何你想做的事情。

https://github.com/lookfirst/fallback


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!