有没有使用spring来弄ehcache的呀?

项目花园范德彪 2007-02-26 03:57:15
我把hibernate 用spring来集成,最近看了网上一篇文章。
利用spring来缓存某类的某些方法。
原URL如下。
http://blog.csdn.net/rosen/archive/2005/01/26/269612.aspx

我的spring版本为1.2.8 hibernate 3 EHCAHE用的是hibernate自带的。
我写了这个类。
然后,配置文件如下。
<ehcache>
<diskStore path = "java.io.tmpdir"/>

<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" />
<cache name ="com.base.methodCache" maxElementsInMemory="3000"
eternal="false" timeToIdleSeconds="5000" timeToLiveSeconds="5000"
overflowToDisk="true" />
</ehcache>
这个文件我放在了class的目录下面的。

<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation">
<value>/WEB-INF/classes/ehcache.xml</value>
</property>
</bean>

<bean id="methodCache"
class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager">
<ref local="cacheManager" />
</property>
<property name="cacheName">
<value>com.base.methodCache</value>
</property>
</bean>

<bean id="methodCacheInterceptor"
class="com.aol.MethodCacheInterceptor">
<property name="methodCache">
<ref local="methodCache" />
</property>
</bean>

<bean id="methodCachePointCut"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local="methodCacheInterceptor" />
</property>
<property name="patterns">
<list>
<value>.*get.*</value>

</list>
</property>
</bean>

<bean id="myBean"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<bean class="com.base.service.Impl.TdCityManagerImpl"/>
</property>
<property name="interceptorNames">
<list>
<value>methodCachePointCut</value>
</list>
</property>
</bean>
上面是spring里的配置。

程序运行正常,
但是TdCityManagerImpl这个类下面的所有的方法再执行的时候,
跟本就没有缓存。
HIBERNATE还在工作。
有懂的同志帮看看。

就是缓存不上,为什么呀?
...全文
603 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
没音了?
  • 打赏
  • 举报
回复
nearsun(蓝冰)
把APO的那部分配置发上来偶看看嘛,

其实如果是代理的话,
那都是差不多的。

我现在不使用AOP方式,用OSCACHE 的硬放进去,
是没有问题的。

longququ()
这种方法代理的方式如果成功了,
根本就不进hibernate .
原理就是,只要spring一调

<property name="target">
<bean class="com.base.service.Impl.TdCityManagerImpl"/>
</property>

那么spring就把这个类的代理调出来,
因为他的方法被你的CACHE所匹配,所以直接就返回,CACHE里的内容了。
如果写在HBM,那还是hibernate的一级CACHE,
还有load lazy 的麻烦。
不是不更新,就是更新的不是时候,
感觉总是不爽。

代理的方式,和在代码里写上一个头是差不多的。
相当于。在你的方法前面。
加上了,

匹配的代码。如果缓存里存在。
String cacheKey = getCacheKey(targetName, methodName, arguments);
Element element = cache.get(cacheKey);
if (element == null) {
// call target/sub-interceptor
result = invocation.proceed();
直接返回缓冲的结果了。
根本就走不到hibernate 里面的
所以用OSCACHE应该也是一样的。

  • 打赏
  • 举报
回复
因为这个类又被事务管理的时候
我调用的还是事务管理的类。
这里我就晕了。
我想把事务管理里面的类的方法要CACHE了。

我要怎么调用呢??
longququ 2007-02-26
  • 打赏
  • 举报
回复
配置我直接写在spring的xml配置文件里的,是否有作用确实没有测试过呀
惭愧~~~~
是不是表的hbm.xml文件里面写的有问题,要么包的版本?胡乱猜测一下
自然80 2007-02-26
  • 打赏
  • 举报
回复
我结合OSCACHE做了个aop,这样就可以缓存方法的结果了
  • 打赏
  • 举报
回复
你的hibernate用了org.hibernate.cache.EhCacheProvider
是写在XML里面的吧,
我以前也试过一回这样的,
发现hibernate 还在查数据库,
因为打出来的SQL没有减少呀。

  • 打赏
  • 举报
回复
我也要使用其它的CACHE来放一些定制的对象。
感觉OSCACHE也不错。当然JBOSSCACHE可以用来集群的环境。

但是,我现在有一些字典表。这些想省些代码。
直接利用SPRING把这些对象放进去,
应该是一查这些字典spring 就从中间偷偷地换成它的方法。
然后,不再去查hibernate了。

网上写这个文章的没有1000也有800了。

但是我真要弄的时候,就碰上了这么个问题。

我真的好郁闷呀。

我的类和网上写的完全一样,

现在的问题是,其本spring就不能进行截获方法。

和我没写CACHE一样,
longququ 2007-02-26
  • 打赏
  • 举报
回复
哦,路过
帮顶

我做的项目hibernate用了org.hibernate.cache.EhCacheProvider
bean里用了jbossCahce

楼主的没看懂,学习

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧