问题1:在jdon上逛了很久,看到很多关于缓存的帖子,一般是把对象和对象id保存到缓存类(Cache)的HashMap里;
但是我有个问题一直想不通,要让bs系统下的所有类都获取同一个Cache类(不能在每个Servlet里都Cache cache=new Cache()吧,那就没意义了)要如何实现,我看了Jive的源代码
在global.jsp里
<jsp:useBean id="myEnv" scope="application" class="com.jdon.web.UserEnvFront"/>
在UserEnvFront类里
public class UserEnvFront
{
private ForumFactory forumFactory;
private User pageUser;
。。。。。。。。。
}
ForumFactory好像就是板块页面的缓存类
同时在其他jsp页面里使用
<%@ include file="global.jsp" %>
这样就能使用唯一的myEnv实例,同时使用唯一的缓存类ForumFactory.
是不是所有设计到全局性的变量或引用都要放到类似UserEnvFount的类里
然后被jsp实例化在被其他jsp或servlet使用,这样好像是将myEnv放在了用户的Session里,当myEnv里的东西太多(例如缓存了很多页面)的时候会不会影响系统性能?
请问我的理解对吗?
有没有其他方案呢?(使用类的静态变量和静态方法可以吗,这样我们引用的时候就可以这样 Cache.getObject(),?)
问题2:
bang说过"无状态Session bean可以来充当缓存的作用"
这个我就不理解了,无状态Session bean的实例都是相同的,如果我们把需要缓存的东西放到一个Session bean里,那么我们获取的时候,系统会从缓冲池随机获取一个返回给用户,如果返回的不是我们刚才设置的Session bean呢,而且Session bean是容器管理的,如果我们长时间不用,我们的用来缓存Session bean会不会容器销毁呢?
从性能来说,我们每次使用缓存的时候都使用lookup查找,这样是不是没效率,背离了缓存的初衷呢(当然我们也可以把bean的home保存起来,但是这样好像又使用了第一种缓存机制)?
麻烦bang等大虾指点一下,谢谢了!