- 浏览: 81153 次
- 性别:
- 来自: 重庆
-
最新评论
-
禀圣含华:
怎么弄空格呢?___________然后我固定这些空格,怎么弄 ...
第18章. iText PDF 生成 -
super0555:
managed
第13章 Seam 应用程序框架 -
Javakeith:
代码呢?共享下代码呗!
第18章. iText PDF 生成 -
tonyshen277:
同感啊。还在做Win32下的开发,楼主所说的一个都不能少啊。
转自baidu wqqq 给软件开发初学者 -
kdboy:
的确,把人放在宇宙中去看,从上帝的眼中去看,人的确是非常渺小, ...
人生是什么
第23章. 缓存
在几乎所有的企业应用程序中,数据库是主要的瓶颈,并是在运行环境中伸缩性最差的一层。来自PHP/Ruby 环境的人们试图告诉你所谓的“无共享(shared nothing)”体系结构的伸缩性良好。虽然这表面上是真的,但我知道大部分引人注意的多用户应用程序,并没有在群集的不同结点之间实现资源的无共享。这些愚蠢的人真以为它是一个“除了数据库以外无共享(share nothing except for the database)”的体系结构。当然,共享数据库是伸缩一个多用户应用系统的主要问题——因此而声称这种体系结构是高伸缩性是可笑的,并告诉你有关的很多应用,这些人浪费大量的时间在这上面。
我们能做的减少数据库共享的几乎任何东西都是值得去做的。
这需要缓存。嗯,不只是一个缓存。一个设计良好的Seam应用程序会展示出一个丰富的、多层的缓存策略,影响到应用程序的每一层:
- 数据库,当然,有它自己的缓存。这超级重要,但不能象应用层的缓存一样伸缩。
- 你的ORM解决方案 (Hibernate,或者其它的JPA实现)具有一个来自数据库的数据的二级缓存。这是一种超强的能力,但它常常被滥用。在一个群集环境中,保持缓存中的数据在整个集群上的事务一致性,使用数据库,是相当昂贵的。对多数用户之间共享和很少更新的数据它很有意义。在传统的无状态体系结构中,人们常常试图对会话状态使用二级缓存。在Seam中这始终是糟糕和特别错误的。
- Seam对话(conversation)上下文是一个会话状态的缓存。你装入对话(conversation)上下文的组件可以维持和缓存与当前用户交互的状态。
- 特别是,Seam管理的持久上下文(或继承EJB容器管理的持久化上下文,关联到一个对话作用域(conversation-scoped)有状态会话bean)作为一个已被读入当前对话(conversation)的数据的缓存。这种缓存往往有相当高的命中率!在一个群集环境,Seam优化了Seam管理的持久化上下文的复制,并且对数据库事务一致性没有要求(乐观锁足够了)。因此你不必太担心这种缓存的性能影响,除非你读入了成千上万个对象到一个单独的持久化上下文中。
- 在Seam的应用(application)上下文中,应用程序可以缓存非事务状态。当然,保持在应用上下文中的状态对群集中的其它结点是不可见的。
- 应用程序使用Seam的cacheProvider 组件可以缓存事务状态,其可集成JBossCache、JBoss POJO缓存或EHCache到Seam环境。这种状态对其它节点会是可见的,如果你的缓存支持运行在群集模式。
- 最后, Seam让你的缓存渲染JSF页面的片段。不象 ORM二级缓存,在数据改变时,这种缓存不能自动失效,因此,你需要写应用代码来执行明确失效,或设置适当的到期政策。
关于二级缓存的更多信息,你需要参考你的ORM 解决方案,因为这是极其复杂的话题。在本章我们将直接讨论缓存的使用,通过cacheProvider 组件, 或作为页面片段缓存,通过 <s:cache>控件。
23.1. 在Seam中使用缓存
内建的cacheProvider组件管理了下面的一个实例:
JBoss Cache 1.x (适用于JBoss 4.2.x和其它容器)
org.jboss.cache.TreeCache
JBoss Cache 2.x (适用于JBoss 5.x和其它容器)
org.jboss.cache.Cache
JBoss POJO Cache 1.x (适用于JBoss 4.2.x和其它容器)
org.jboss.cache.aop.PojoCache
EHCache (适用于所有容器)
net.sf.ehcache.CacheManager
你可以在缓存中放心地设置任何不变的Java对象,它会被存储在缓存中并可以在整个群集上复制(假定支持复制并被激活)。如果你想保持可变对象在缓存中,读取下属缓存项目文档的文档,以便发现如何通知缓存其发生了变化。
为使用 cacheProvider, 你需要包括缓存实现的jar包文件在你的项目中:
JBoss Cache 1.x
· jboss-cache.jar - JBoss Cache 1.4.1
· jgroups.jar - JGroups 2.4.1
JBoss Cache 2.x
· jboss-cache.jar - JBoss Cache 2.2.0
· jgroups.jar - JGroups 2.6.2
JBoss POJO Cache 1.x
· jboss-cache.jar - JBoss Cache 1.4.1
· jgroups.jar - JGroups 2.4.1
· jboss-aop.jar - JBoss AOP 1.5.0
EHCache
· ehcache.jar - EHCache 1.2.3
技巧
如果你在JBoss 应用服务器以外的容器中使用JBoss Cache , 为更多相关内容请看JBoss Cache wiki 页面。
对一个Seam的EAR部署, 我们推荐将缓存的jar包和配置文件直接打包在EAR中。
对JBossCache,你也需要提供一个配置文件。放带有适当缓存配置的 treecache.xml文件到类路径(例如ejb jar或WEB-INF/classes)。JBossCache有许多恐怖和混乱的配置设置,所以在这里不讨论它们。为更多信息请参考JBossCache文档在examples/blog/resources/treecache.xml中你可以发现一个treecache.xml的例子。
没有配置文件,EHCache会运行使用它的默认配置。
改变在使用的配置文件,在components.xml配置你的缓存:
<components xmlns="http://jboss.com/products/seam/components"
xmlns:cache="http://jboss.com/products/seam/cache">
<cache:jboss-cache-provider configuration="META-INF/cache/treecache.xml" />
</components>
现在,你可以注入缓存到任何Seam组件:
@Name("chatroomUsers")
@Scope(ScopeType.STATELESS)
public class ChatroomUsers
{
@In CacheProvider cacheProvider;
@Unwrap
public Set<String> getUsers() throws CacheException {
Set<String> userList = (Set<String>) cacheProvider.get("chatroom", "userList");
if (userList==null) {
userList = new HashSet<String>();
cacheProvider.put("chatroom", "userList", userList);
}
return userList;
}
}
如果你想在你的应用程序中使用多个缓存配置,使用 components.xml配置多个缓存提供商:
<components xmlns="http://jboss.com/products/seam/components"
xmlns:cache="http://jboss.com/products/seam/cache">
<cache:jboss-cache-provider name="myCache" configuration="myown/cache.xml"/>
<cache:jboss-cache-provider name="myOtherCache" configuration="myother/cache.xml"/>
</components>
23.2. 页面片段缓存
在Seam 中最有趣的缓存使用是<s:cache>标签, 在JSF 中的页面片段缓存问题的Seam解决方案。<s:cache> 在内部使用了pojoCache,所以在你使用它之前,你需要遵循上面所列的步骤。(设置jar包到EAR内,很吃力地通过 这些恐怖的配置选项,等等)
<s:cache>被用来缓存某些很少变化的渲染内容。 例如,我们博客的显示最新博客条目的欢迎页面:
<s:cache key="recentEntries-#{blog.id}" region="welcomePageFragments">
<h:dataTable value="#{blog.recentEntries}" var="blogEntry">
<h:column>
<h3>#{blogEntry.title}</h3>
<div>
<s:formattedText value="#{blogEntry.body}"/>
</div>
</h:column>
</h:dataTable>
</s:cache>
key让你在每个页面片段有多个缓存的版本。在这个情况下,每一个blog有一个缓存。Region决定了所有版本会被存入的缓存或区域节点 。不同的节点可能有不同的到期策略。(你使用前述恐怖的配置选项设置这些东西)
当然,使用<s:cache>的大问题是什么时候基础数据变化了知道得太迟钝(例如,当博客粘贴一个新的条目时)。因此你需要手工驱逐(evict)缓存片段:
public void post() {
...
entityManager.persist(blogEntry);
cacheProvider.remove("welcomePageFragments", "recentEntries-" + blog.getId() );
}
另外,如果立即显示变化给用户不是重要的,在缓存节点上你可以设置一个很短到期时间。
发表评论
-
第31章. Seam内建组件
2009-05-28 11:51 1492第31章. Seam内建组件 本章描述Seam内建组件 ... -
第30章. Seam注释
2009-05-26 20:21 1628第30章. Seam注释 在你编写一个Seam应用程 ... -
第31章. Seam内建组件
2009-05-26 20:21 1455第31章. Seam内建组件 本章描述Seam内建组件 ... -
第29章. 配置Seam和打包Seam应用程序
2009-05-26 20:19 1571第29章. 配置Seam和打包Seam应用程序 配置 ... -
第28章. Hibernate搜索
2009-05-26 20:17 152928.1. 介绍 如Apache Lucen ... -
第27章. Spring框架集成
2009-05-26 20:16 1429第27章. Spring框架集成 Spring集成 ... -
第26章. Seam和Google网页工具
2009-05-26 20:15 1227第26章. Seam和Google网页工具 ... -
第25章. 远程
2009-05-26 20:15 1317第25章. 远程 Seam 提供了一个从网页远程访 ... -
第24章. Web服务
2009-05-26 20:15 1704第24章. Web服务 Seam 集成了JBossWS, ... -
第22章. 异步和消息
2009-05-26 20:12 2156第22章. 异步和消息 Seam 使异步执行来自网页请 ... -
第21章. Email
2009-05-26 20:11 1357现在Seam包含一个用于模板和发送邮件的可选组件。 Emai ... -
第 20章. RSS支持
2009-05-26 20:10 828第 20章. RSS支持 20.1. 安装 20.2. ... -
第19章. 微软的Excel 电子表格应用程序支持
2009-05-26 20:07 1843第19章. 微软的Excel 电子表格应用程序支持 S ... -
第18章. iText PDF 生成
2009-05-26 20:01 6517第18章. iText PDF 生成 18.1. 使用PDF ... -
第17章. Seam文本
2009-05-26 19:59 1028第17章. Seam文本 面向协作站点需要一种更有友好的 ... -
第16章. 国际化、本地化和主题
2009-05-26 19:57 1430第16章. 国际化、本地化和主题 Seam使构建国际化应用程 ... -
第15章 安全(2)
2009-05-26 19:56 938第15章 安全(2) 15.5. 错误消息 安全 ... -
第15章 安全(1)
2009-05-26 19:53 101315.1. 概述 Seam安全API为你基于Seam的 ... -
第14章 Seam 和 JBoss 规则
2009-05-26 19:50 1451第14章 Seam 和 JBoss 规则 Seam使从 ... -
第13章 Seam 应用程序框架
2009-05-26 19:49 1431第13章 Seam 应用程序框架 Seam真正地使通过 ...
相关推荐
第二十三章. Windows后台服务 23.1.备注 23.2.简介 23.3.Spring.Services.WindowsService.Process.exe应用程序 23.3.1.安装 23.3.2.配置 23.4.将应用程序上下文发布为Windows服务 23.4.1.service.config 23.4.1.1.让...
第 4 章 配置数据高速缓存 第 5 章 管理多处理器服务器 第 6 章 创建和管理用户数据库 第 7 章 装入和卸下数据库 第 8 章 分布式事务管理 第 9 章 创建和使用段 第 10 章 使用 reorg 命令 第 11 章 检查数据库一致性...
胡伟武教授的《计算机体系结构》是一本深入解析计算机硬件与软件交互的权威教材,其习题答案涵盖了从第二章到第十二章的核心概念和理论应用。这本教材广泛应用于计算机科学与技术、电子工程以及相关专业的研究生课程...
第二章:安装 14 zabbix 软硬件需求 14 Zabbix 数据库硬盘容量计算 18 Zabbix 安装 20 Zabbix 升级 31 第三章:快速上手 33 Zabbix 中文语言 33 Zabbix 中文乱码 35 zabbix 监控第一台服务器 37 Zabbix 用户管理 41 ...
1.1 Web缓存.............................................................................................................................2 1.2 Squid的简明历史..............................................
第1章 Windows应用程序开发入门..........................................................................................16 1.1 第一个实例程序...............................................................
第1 章Linux操作系统概述................... .......................................................................... 2 1.1 Linux发展历史........................................................ 2 ...
第 1 章Redis 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 2 章数据类型初探. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
第 1 章 Windows应用程序开发入门..........................................................................................16 1.1 第一个实例程序.............................................................
第1章 RDMA背景简介 ............................................. 5 第2章 哪些网络协议支持RDMA ..................................... 8 2.1 InfiniBand(IB)........................................... 8 ...
2. 世界首台计算机:1946年2月,ENIAC(Electronic Numerical Integrator and Computer)在美国诞生,是世界上第一台电子数字计算机。 3. 32位微机:这里的“32位”指的是计算机能同时处理32位二进制数,即处理器的...
第 1 章 Webx总体介绍 ............................................................................................. 4 1.1. 设计理念 ....................................................................
**第5章 进程管理** 进程是程序在执行过程中的一个实例,是系统进行资源分配和调度的基本单位。本章主要探讨了以下几个方面: 1. **进程的概念与状态**:介绍了进程的定义,以及就绪、运行和阻塞三种基本状态及其...
第1 章 memcached的基础.................................................................................................................5 1.1 memcached是什么?.............................................
第 1 章Redis 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 2 章数据类型初探. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
第二章 SOPC Builder开发环境......................................................................................................8 2.1 创建Quartus II工程..................................................
27. **grub/grub-install/grub-md5-crypt**:在第二十章第3.0、3.4及3.8节中提及。GRUB(Grand Unified Bootloader)是常见的Linux引导加载程序。 28. **gtf**:在第二十四章第2.3节中解释。gtf命令用于计算字体的...