`
阿尔萨斯
  • 浏览: 4175217 次
社区版块
存档分类
最新评论

EasyJWeb+JPA(Hibernate3.2)+Spring2构架缓存技术

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

总体思路:使用Hibernate3.2的二级缓存,解决使用频率最多的find(Class clz,Object id)方法的缓存。

一、使用Hibernate3.2的二级缓存功能,只开取针对id查找实体的缓存,不开启基于list查询的缓存。
技术调整如下:
1、升级Spring2的版本号,升级为2.06,更新spring.jar、spring-aspects.jar、spring-mock.jar,为了使用spring modules中提供的cache功能,增加了spring-modules-cache.jar。以上包已经添加到svn中。

2、修改jpa-base.xml中的entityManagerFactory Bean的配置信息,把对loadTimeWeaver属性的注入注释掉。

BEANclass=org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBeanname="entityManagerFactory">BEAN>
propertyname="persistenceXmlLocation"value="classpath:persistence.xml">property>
propertyname="dataSource"ref="dataSource">property>
propertyname="jpaVendorAdapter">
BEANclass=org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter>
<property><span style="COLOR: #0000ff">="database"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="MYSQL"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="showSql"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="generateDdl"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"></span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #008000"><!--</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><propertyname="loadTimeWeaver"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><bean<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver"/><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></property></span><span style="COLOR: #008000">--></span><span style="COLOR: #000000"></span></span></span></property>


在persistence.xml文件中,添加如下的配置信息,开启Hibernate的二级缓存:

propertyname="hibernate.cache.provider_class"value="org.hibernate.cache.EhCacheProvider">property>
propertyname="hibernate.cache.use_query_cache"value="false">property><!--</span><span style="COLOR: #008000">暂时不开querycache</span><span style="COLOR: #008000">-->

3、在src目录下增加ehcache.xml,设置cache的配置信息,默认情况下可以考虑给一些常用的Entity类设置一个单独的cache区域,如下所示:

CACHEname="com.easyjf.security.Resource"maxelementsinmemory="1000"eternal="false"overflowtodisk="false"memorystoreevictionpolicy="LFU">CACHE>
<!--</span><span style="COLOR: #008000">配置信息的说明如下:<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />缺省缓存配置。CacheManager会把这些配置应用到程序中。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />下列属性是defaultCache必须的:<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />maxInMemory-设定内存中创建对象的最大值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />eternal-设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />时限制且元素永不消亡。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />timeToIdleSeconds-设置某个元素消亡前的停顿时间。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />设置该属性也无用)。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />如果该值是0就意味着元素可以停顿无穷长的时间。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />timeToLiveSeconds-为元素设置消亡前的生存时间。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />也就是一个元素从构建到消亡的最大时间间隔值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />这只能在元素不是永久驻留时有效。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />overflowToDisk-设置当内存中缓存达到maxInMemory限制时元素是否可写到磁盘<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />上。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">-->


4、然后修改Domain对象,对于要使用缓存的的Entity,在类声明前加上如下的标签:BR>@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE),此处usage的值还需要根据应用情况进行必要的调整。BR>P>P>5、暂时使用ehcache作为Springmodules的cache。在ehcache.xml文件中继续配置用于为spring提供方法调用结果的缓存。大致如下:

<!--</span><span style="COLOR: #008000">以下是为Spring提供的方法调用结果缓存</span><span style="COLOR: #008000">-->

CACHEname="CMSCache"maxelementsinmemory="5000"eternal="false"overflowtodisk="true"memorystoreevictionpolicy="LFU">CACHE>
CACHEname="ECCache"maxelementsinmemory="5000"eternal="false"overflowtodisk="true"memorystoreevictionpolicy="LFU">CACHE>


6、然后在具体的Service类中配置缓存。使用了AOP,需要修改spring的配置文件,比如cms-core.xml中为了给ICmsManageService的get*方法添加结果缓存,调整如下:

EHCACHE:PROXYid=cmsManageService>
<bean><span style="COLOR: #0000ff">=com.easyjf.cms.service.impl.CmsManageServiceImpl&gt;</span></bean>
<property><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="reviewDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsRivewDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">EHCACHE:CACHING</span><span style="COLOR: #ff0000">cachename</span><span style="COLOR: #0000ff">="CMSCache"</span><span style="COLOR: #ff0000">methodname</span><span style="COLOR: #0000ff">="get*"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">EHCACHE:CACHING</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">EHCACHE:FLUSHING</span><span style="COLOR: #ff0000">methodname</span><span style="COLOR: #0000ff">="update*"</span><span style="COLOR: #ff0000">cachenames</span><span style="COLOR: #0000ff">="CMSCache"</span><span style="COLOR: #ff0000">when</span><span style="COLOR: #0000ff">="before"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">EHCACHE:FLUSHING</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"></span><span style="COLOR: #800000">EHCACHE:PROXY</span><span style="COLOR: #0000ff">&gt;</span></span></span></span></span></span></span></property>


调整前对照:

BEANclass=com.easyjf.cms.service.impl.CmsManageServiceImplid=cmsManageService>
<property><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="reviewDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsRivewDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"></span></span></span></span></span></property>


为了让Spring配置文件能识别并处理EHCACHE:XXX>这个标签,需要在beans中进行schem声明,如下所示:BR>另外在spring配置文件中再增加EHCACHE:CONFIGconfiglocation="classpath:ehcache.xml">EHCACHE:CONFIG>,以便Spring能找到Cache配置文件。EHCACHE:XXX>

BEANSxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:ehcache="http://www.springmodules.org/schema/ehcache"xsi:schemalocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springmodules.org/schema/ehcachehttp://www.springmodules.org/schema/cache/springmodules-ehcache.xsd">BEANS>


7、以上只是基本的配置,cache运行的具体性能,还需要根据实际的数据量及并发量等进行更加细致的调整。

8、另外EasyJWeb还将会提供一个页面结果缓存,直接缓存Action的执行结果,这样就可以解决访问得最多,属于严重性能瓶颈的问题。比如ec-brand.ejf、index.ejf等。这一功能将在9月15号前推出。

9、一些必要的页面,需要增加静态文件生成功能。(逐渐调整)

注释:

  由于发现Spring2.06版本与当前我们使用的版本存在一些冲突。而且跟EasyJWeb中的maven混合编译的时候存在一些问题,因此暂时取消使用Spring的方法Cache,而只使用Hibernate的Cache及EasyJWeb的缓存配合。EasyJWeb的缓存简单机制已经实现,直接在基于AbstractCmdAction的Action中,在要缓存的Command中使用缓存标签@WebCache即可。




总体思路:使用Hibernate3.2的二级缓存,解决使用频率最多的find(Class clz,Object id)方法的缓存。

一、使用Hibernate3.2的二级缓存功能,只开取针对id查找实体的缓存,不开启基于list查询的缓存。
技术调整如下:
1、升级Spring2的版本号,升级为2.06,更新spring.jar、spring-aspects.jar、spring-mock.jar,为了使用spring modules中提供的cache功能,增加了spring-modules-cache.jar。以上包已经添加到svn中。

2、修改jpa-base.xml中的entityManagerFactory Bean的配置信息,把对loadTimeWeaver属性的注入注释掉。

BEANclass=org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBeanname="entityManagerFactory">BEAN>
propertyname="persistenceXmlLocation"value="classpath:persistence.xml">property>
propertyname="dataSource"ref="dataSource">property>
propertyname="jpaVendorAdapter">
BEANclass=org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter>
<property><span style="COLOR: #0000ff">="database"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="MYSQL"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="showSql"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="generateDdl"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"></span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #008000"><!--</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><propertyname="loadTimeWeaver"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><bean<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver"/><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></property></span><span style="COLOR: #008000">--></span><span style="COLOR: #000000"></span></span></span></property>


在persistence.xml文件中,添加如下的配置信息,开启Hibernate的二级缓存:

propertyname="hibernate.cache.provider_class"value="org.hibernate.cache.EhCacheProvider">property>
propertyname="hibernate.cache.use_query_cache"value="false">property><!--</span><span style="COLOR: #008000">暂时不开querycache</span><span style="COLOR: #008000">-->

3、在src目录下增加ehcache.xml,设置cache的配置信息,默认情况下可以考虑给一些常用的Entity类设置一个单独的cache区域,如下所示:

CACHEname="com.easyjf.security.Resource"maxelementsinmemory="1000"eternal="false"overflowtodisk="false"memorystoreevictionpolicy="LFU">CACHE>
<!--</span><span style="COLOR: #008000">配置信息的说明如下:<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />缺省缓存配置。CacheManager会把这些配置应用到程序中。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />下列属性是defaultCache必须的:<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />maxInMemory-设定内存中创建对象的最大值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />eternal-设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />时限制且元素永不消亡。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />timeToIdleSeconds-设置某个元素消亡前的停顿时间。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />设置该属性也无用)。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />如果该值是0就意味着元素可以停顿无穷长的时间。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />timeToLiveSeconds-为元素设置消亡前的生存时间。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />也就是一个元素从构建到消亡的最大时间间隔值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />这只能在元素不是永久驻留时有效。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />overflowToDisk-设置当内存中缓存达到maxInMemory限制时元素是否可写到磁盘<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />上。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">-->


4、然后修改Domain对象,对于要使用缓存的的Entity,在类声明前加上如下的标签:BR>@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE),此处usage的值还需要根据应用情况进行必要的调整。BR>P>P>5、暂时使用ehcache作为Springmodules的cache。在ehcache.xml文件中继续配置用于为spring提供方法调用结果的缓存。大致如下:

<!--</span><span style="COLOR: #008000">以下是为Spring提供的方法调用结果缓存</span><span style="COLOR: #008000">-->

CACHEname="CMSCache"maxelementsinmemory="5000"eternal="false"overflowtodisk="true"memorystoreevictionpolicy="LFU">CACHE>
CACHEname="ECCache"maxelementsinmemory="5000"eternal="false"overflowtodisk="true"memorystoreevictionpolicy="LFU">CACHE>


6、然后在具体的Service类中配置缓存。使用了AOP,需要修改spring的配置文件,比如cms-core.xml中为了给ICmsManageService的get*方法添加结果缓存,调整如下:

EHCACHE:PROXYid=cmsManageService>
<bean><span style="COLOR: #0000ff">=com.easyjf.cms.service.impl.CmsManageServiceImpl&gt;</span></bean>
<property><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="reviewDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsRivewDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">EHCACHE:CACHING</span><span style="COLOR: #ff0000">cachename</span><span style="COLOR: #0000ff">="CMSCache"</span><span style="COLOR: #ff0000">methodname</span><span style="COLOR: #0000ff">="get*"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">EHCACHE:CACHING</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">EHCACHE:FLUSHING</span><span style="COLOR: #ff0000">methodname</span><span style="COLOR: #0000ff">="update*"</span><span style="COLOR: #ff0000">cachenames</span><span style="COLOR: #0000ff">="CMSCache"</span><span style="COLOR: #ff0000">when</span><span style="COLOR: #0000ff">="before"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">EHCACHE:FLUSHING</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"></span><span style="COLOR: #800000">EHCACHE:PROXY</span><span style="COLOR: #0000ff">&gt;</span></span></span></span></span></span></span></property>


调整前对照:

BEANclass=com.easyjf.cms.service.impl.CmsManageServiceImplid=cmsManageService>
<property><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="reviewDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsRivewDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"></span></span></span></span></span></property>


为了让Spring配置文件能识别并处理EHCACHE:XXX>这个标签,需要在beans中进行schem声明,如下所示:BR>另外在spring配置文件中再增加EHCACHE:CONFIGconfiglocation="classpath:ehcache.xml">EHCACHE:CONFIG>,以便Spring能找到Cache配置文件。EHCACHE:XXX>

BEANSxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:ehcache="http://www.springmodules.org/schema/ehcache"xsi:schemalocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springmodules.org/schema/ehcachehttp://www.springmodules.org/schema/cache/springmodules-ehcache.xsd">BEANS>


7、以上只是基本的配置,cache运行的具体性能,还需要根据实际的数据量及并发量等进行更加细致的调整。

8、另外EasyJWeb还将会提供一个页面结果缓存,直接缓存Action的执行结果,这样就可以解决访问得最多,属于严重性能瓶颈的问题。比如ec-brand.ejf、index.ejf等。这一功能将在9月15号前推出。

9、一些必要的页面,需要增加静态文件生成功能。(逐渐调整)

注释:

  由于发现Spring2.06版本与当前我们使用的版本存在一些冲突。而且跟EasyJWeb中的maven混合编译的时候存在一些问题,因此暂时取消使用Spring的方法Cache,而只使用Hibernate的Cache及EasyJWeb的缓存配合。EasyJWeb的缓存简单机制已经实现,直接在基于AbstractCmdAction的Action中,在要缓存的Command中使用缓存标签@WebCache即可。




总体思路:使用Hibernate3.2的二级缓存,解决使用频率最多的find(Class clz,Object id)方法的缓存。

一、使用Hibernate3.2的二级缓存功能,只开取针对id查找实体的缓存,不开启基于list查询的缓存。
技术调整如下:
1、升级Spring2的版本号,升级为2.06,更新spring.jar、spring-aspects.jar、spring-mock.jar,为了使用spring modules中提供的cache功能,增加了spring-modules-cache.jar。以上包已经添加到svn中。

2、修改jpa-base.xml中的entityManagerFactory Bean的配置信息,把对loadTimeWeaver属性的注入注释掉。

BEANclass=org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBeanname="entityManagerFactory">BEAN>
propertyname="persistenceXmlLocation"value="classpath:persistence.xml">property>
propertyname="dataSource"ref="dataSource">property>
propertyname="jpaVendorAdapter">
BEANclass=org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter>
<property><span style="COLOR: #0000ff">="database"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="MYSQL"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="showSql"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="generateDdl"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"></span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #008000"><!--</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><propertyname="loadTimeWeaver"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><bean<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver"/><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></property></span><span style="COLOR: #008000">--></span><span style="COLOR: #000000"></span></span></span></property>


在persistence.xml文件中,添加如下的配置信息,开启Hibernate的二级缓存:

propertyname="hibernate.cache.provider_class"value="org.hibernate.cache.EhCacheProvider">property>
propertyname="hibernate.cache.use_query_cache"value="false">property><!--</span><span style="COLOR: #008000">暂时不开querycache</span><span style="COLOR: #008000">-->

3、在src目录下增加ehcache.xml,设置cache的配置信息,默认情况下可以考虑给一些常用的Entity类设置一个单独的cache区域,如下所示:

CACHEname="com.easyjf.security.Resource"maxelementsinmemory="1000"eternal="false"overflowtodisk="false"memorystoreevictionpolicy="LFU">CACHE>
<!--</span><span style="COLOR: #008000">配置信息的说明如下:<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />缺省缓存配置。CacheManager会把这些配置应用到程序中。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />下列属性是defaultCache必须的:<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />maxInMemory-设定内存中创建对象的最大值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />eternal-设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />时限制且元素永不消亡。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />timeToIdleSeconds-设置某个元素消亡前的停顿时间。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />设置该属性也无用)。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />如果该值是0就意味着元素可以停顿无穷长的时间。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />timeToLiveSeconds-为元素设置消亡前的生存时间。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />也就是一个元素从构建到消亡的最大时间间隔值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />这只能在元素不是永久驻留时有效。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />overflowToDisk-设置当内存中缓存达到maxInMemory限制时元素是否可写到磁盘<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />上。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">-->


4、然后修改Domain对象,对于要使用缓存的的Entity,在类声明前加上如下的标签:BR>@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE),此处usage的值还需要根据应用情况进行必要的调整。BR>P>P>5、暂时使用ehcache作为Springmodules的cache。在ehcache.xml文件中继续配置用于为spring提供方法调用结果的缓存。大致如下:

<!--</span><span style="COLOR: #008000">以下是为Spring提供的方法调用结果缓存</span><span style="COLOR: #008000">-->

CACHEname="CMSCache"maxelementsinmemory="5000"eternal="false"overflowtodisk="true"memorystoreevictionpolicy="LFU">CACHE>
CACHEname="ECCache"maxelementsinmemory="5000"eternal="false"overflowtodisk="true"memorystoreevictionpolicy="LFU">CACHE>


6、然后在具体的Service类中配置缓存。使用了AOP,需要修改spring的配置文件,比如cms-core.xml中为了给ICmsManageService的get*方法添加结果缓存,调整如下:

EHCACHE:PROXYid=cmsManageService>
<bean><span style="COLOR: #0000ff">=com.easyjf.cms.service.impl.CmsManageServiceImpl&gt;</span></bean>
<property><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="reviewDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsRivewDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">EHCACHE:CACHING</span><span style="COLOR: #ff0000">cachename</span><span style="COLOR: #0000ff">="CMSCache"</span><span style="COLOR: #ff0000">methodname</span><span style="COLOR: #0000ff">="get*"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">EHCACHE:CACHING</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">EHCACHE:FLUSHING</span><span style="COLOR: #ff0000">methodname</span><span style="COLOR: #0000ff">="update*"</span><span style="COLOR: #ff0000">cachenames</span><span style="COLOR: #0000ff">="CMSCache"</span><span style="COLOR: #ff0000">when</span><span style="COLOR: #0000ff">="before"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">EHCACHE:FLUSHING</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"></span><span style="COLOR: #800000">EHCACHE:PROXY</span><span style="COLOR: #0000ff">&gt;</span></span></span></span></span></span></span></property>


调整前对照:

BEANclass=com.easyjf.cms.service.impl.CmsManageServiceImplid=cmsManageService>
<property><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="reviewDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsRivewDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"></span></span></span></span></span></property>


为了让Spring配置文件能识别并处理EHCACHE:XXX>这个标签,需要在beans中进行schem声明,如下所示:BR>另外在spring配置文件中再增加EHCACHE:CONFIGconfiglocation="classpath:ehcache.xml">EHCACHE:CONFIG>,以便Spring能找到Cache配置文件。EHCACHE:XXX>

BEANSxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:ehcache="http://www.springmodules.org/schema/ehcache"xsi:schemalocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springmodules.org/schema/ehcachehttp://www.springmodules.org/schema/cache/springmodules-ehcache.xsd">BEANS>


7、以上只是基本的配置,cache运行的具体性能,还需要根据实际的数据量及并发量等进行更加细致的调整。

8、另外EasyJWeb还将会提供一个页面结果缓存,直接缓存Action的执行结果,这样就可以解决访问得最多,属于严重性能瓶颈的问题。比如ec-brand.ejf、index.ejf等。这一功能将在9月15号前推出。

9、一些必要的页面,需要增加静态文件生成功能。(逐渐调整)

注释:

  由于发现Spring2.06版本与当前我们使用的版本存在一些冲突。而且跟EasyJWeb中的maven混合编译的时候存在一些问题,因此暂时取消使用Spring的方法Cache,而只使用Hibernate的Cache及EasyJWeb的缓存配合。EasyJWeb的缓存简单机制已经实现,直接在基于AbstractCmdAction的Action中,在要缓存的Command中使用缓存标签@WebCache即可。




分享到:
评论

相关推荐

    easyjweb+jpa+spring+extjs续

    easyjweb+jpa+spring+extjs续:实现了综合配货系统后台管理,由于时间关系,有些细节没有考虑到,但是框架打气来,没有什么大问题,由于时间关系现在就更新到这,需要的请下载,认真学完现在更新的和以后更新的,项目...

    easyjweb+jpa+spring+extjs

    这是在做一个物流平台,一批项目:门户网站,配货系统,个人网站,二批,三排请关注我的更新,JAR包可以找我要(qq:438312413),目前只完成登录,权限出步验证(filter,后面会采用spring aop来实现细力度控制,可以...

    JPA+Spring2.0+EasyJWeb技术构架在企业级系统中的应用.ppt

    目录 企业级应用的特点 JPA及JPA使用技巧 使用泛型DAO来简化DAO层的开发 IOC容器、AOP及Spring2 EasyJWeb如何实现快速开发 小结

    Spring+EasyJWeb+iBatis版j2ee在线购物jpetstore系统源码

    Spring+EasyJWeb+iBatis版j2ee在线购物jpetstore系统,业务层及持久层使用springframework上的jpetsotre源码,表示层使用EasyJWeb,该系统是一个简单的J2EE网上商店系统,包括商品列表、购物车、用户管理、在线订单...

    easyjweb+extjs 进销存系统

    本项目是采用easyjweb+extjs来实现,里面包括下拉数,本地下拉框,远程下拉框,treepanle and gridpanel组合开发,页面布局,如果能吃透这个项目,项目项目经验可以提高一年

    operamasks extjs jsf hibernate jpa spring 组合开发的一个crud

    和我之前上传的easyjweb两个框架有相同的地方,我希望我们共同努力把这两个框架结合起来,一起做开发。里面只是一个crud,项目是可以自动生成多表结合的,需要的可以把这个CRUD的例子下下来看一下,之后我会上传多表的,...

    EasyJWeb实用开发指南——开始EasyJWeb

    EasyJWeb实用开发指南——开始EasyJWeb

    wincvs、ajaxanywhere+struts示例+easyjweb指南

    超级超值的东东哦,不下后悔哟

    easyjweb1.2

    EasyJWeb是基于java技术,用于企业级Java Web应用程序快速开发的MVC框架。框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架,如Rails、Struts、JSF、Tapestry等,吸取其优点及...

    easyjweb-2.0快速开发

    easyjweb-2.0 java 快速开发 easyjweb-2.0 java 快速开发 easyjweb-2.0 java 快速开发

    EasyJF开源网上会议系统iula-0.1.0发布

    EasyJF开源网上会议系统iula是一个使用AJAX+EasyJWeb+EasyDBO及多线程技术技术开发的网上信息交流及互动系统,主要供EasyJF开源团队的成员网上会议使用,会议系统模拟传统的会议形式,可以同时开设多个不同主题的...

    EasyJWEB2.0

    EasyJWeb是基于java技术,用于实现企业级Java Web应用程序快速开发框架。框架由来自国内的EasyJF开源团队维护,是一个完全由来自的中国开源爱好者开发,文档及注释全部为中文的开源框架。

    EasyJWeb快速入门指南

    EasyJWeb快速入门指南,EasyJWeb 是一个让你开发 Java Web 应用程序变得容易及高效的框架,他是一个基于请求转发模型的 MVC 框架。本章将主要介绍如何使用 EasyJWeb 写一个简单的应用程序。

    EasyJWeb开发指南

    EasyJWeb是基于java技术,用于企业级Java Web应用程序快速开发的MVC框架。框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架,如Rails、Struts、JSF、Tapestry等,吸取其优点及...

    EasyJWeb框架0.7.0

    EasyJWeb框架0.7.0

    EasyJWeb源码构建指南

    目前EasyJWeb已经采用国际水准的项目管理工具——Maven。Maven是一个功能强大的项目管理工具,在此处不做过多介绍,有兴趣的可以阅读Maven官方文档。 首先要确保你的计算机上已经安装了Maven2.0.5以上版本,如果还...

    配置easyjweb项目

    配置easyjweb项目 ,要用到的细节,免于发生不必要的错误

    EasyJWeb入门手册

    EasyJWeb是基于java技术,能实现企业级Java Web应用程序快速开发的MVC框架。框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架(Rails、Struts、JSF、Tapestry),吸取其优点及...

    easyjweb说明文档

    easyjweb说明文档

Global site tag (gtag.js) - Google Analytics