实体bean的承诺
当面对系统分析师的询问"我究竟何时应该考虑去使用CMP方式的实体beans呢?"的时候,我很难解释为什么要使用CMP形式的实体beans。实体beans的优势体现在两方面:高速缓存和对象-关系的映射。两者在先前的版本中都勉强的被实现,但EJB 2.0拯救了这种情况。WLS 7.0在EJB 2.0规范上的附加功能弥补了在使用实体beans和使用无状态会话beans之间在性能方面的差距,说明:无状态会话bean是通过DAO和JDBC访问数据库的,在某些情况下实体bean甚至比无状态会话bean执行的快。当使用JDBC时,强烈建议开发者使用容器管理的事务。
早期版本的问题
一些在过去使用实体beans的客户不得不重新设计和使用JDBC,因为他们的系统太慢以至于无法满足服务。缓慢的原因在于:
WLS 7.0的特征
WLS 7.0 实现了在EJB 2.0中提供的丰富的对象-关系映射规范。在优化读写数据库方面EJB 2.0也为容器提供了更丰富的便利。下面说明了开发者在WLS 7.0 中设计实体beans方面所拥有的丰富和灵活的特征。
其他有用的特征包括:自动生成主键,支持级联删除,支持EJB QL(Query Language,查询语言),ejbSelect方法,以及下面所描述的并行策略。
并行策略
并行策略定义一个实体bean创建多少实例,为了维持事务的完整性谁来实现同步以及在实体bean中的数据模型存取模式。恰当的并行策略可以使实体bean在性能上产生极大的不同。
1. 检查读取的列
2. 检查修改的列
3. 检查时间信息列
4. 检查版本信息列
选项3和4是不被推荐的,因为为适应这个并行策略,表的结构需要改变。
同样,对于开放式并行策略,你可以配置在事务为true和false期间你是否需要缓存。对在事务期间设置为false的缓存,将在每个事务开始的时候调用ejbLoad。
比较
对于CMP,总要有附加处理过程的,这是由于在EJB容器以及容器层上(合成码)有一个集成,该容器层用于处理事务、安全、池态、生命周期管理、failover、缓存和关系。这里。CMP(由设计或由规范)必须做一些内部操作(ejbLoad, ejbStore, ejbActivate, ejbPassivate)就像反对JDBC逻辑而由开发者自己手写编程。容器基础结构的好处是优化并生成数据库访问;加速开发以及简化代码维护。
在我见过的基准上,除非数据是被缓存了的, [stateless session bean + DAO (做 JDBC访问)] 执行比实体bean执行快30-50%。
什么时候使用什么
实体bean不能用来取代编写JDBC。如果你的对象-关系模型不是极度复杂(包括许多连接,等等)和灵活并且对于工程代码的维护比速度更重要时可以使用实体beans。
使用JDBC于简单的,原子级别绑定的更新;使存储过程和触发器相结合;并处理大量的ResultSets(记录集)。
WebLogic附加的功能例如read-mostly设计模式和开放式缓存cache-between-transactions设置成true是两种设计选择,它使实体beans成为吸引人的选择。它们都是BEA所特有的属性,在WebLogic特殊部署描述符中指定的。当转移到另一个适用J2EE的应用服务器上时无需代码变更。对于应用来说通过使用开放式缓存并行策略可以在短时间读取旧的数据。
对于大多数在读取而少数时候更新的用例,使用read-mostly设计模式。这种设计模式也有缺点,就是用户会读取到过时的数据。对于一些用户完全不应读取过时的数据的情况,他们可以从读写bean读取。
CMP实体beans的只读实体beans的特征将在以后发布的EJB规范版本中有所提及。使用只读实体beans来实现一个可以周期性更新的分布式缓存。
结论
现实世界中大多数的应用程序的读操作比写操作多很多。现实中read-mostly模式对两种情况来说都将是最好的方法。它提供简单的开发和灵活的部署,并且对于存取数据提供卓越的性能特性,只有当数据被修改时才会有的额外开销。cache-between-transactions设置成true的开放式的并行可以比JDBC还快。编写最优化的SQL对于正规的Java程序员来说很难,所以不要忽略实体beans的价值并决定它们是否最适合。
实体Beans的例子
提供的示例在BEA-HOME/samples/server/src/ejb20子目录下。
实现"read-mostly"设计模式注册bean的实现就像两个EJBs,一个作为只读另一个作为可读写的,并且在weblogic-ejb -jar.xml中ejbname是只读实体bean名字处添加
- · BEA Workshop8.1之Java Pag…
- · WebLogic Server8.1新功能介…
- · 总结:第一个Java控件
- · 教程:构建第一个Java控件
- · 用WebLogic Workshop开发EJB
- · 用WebLogic Workshop调试应…
- · WLS 9.1与MQ v5.3 通过JMS Bridge通信配置
- · 在Apache Xindice中保存XML文档
- · 升级到WebLogic 9的十大理由
- · 在JAVA EE环境下使用Kodo EJB
- · Weblogic Server 9新特性:J2EE Libraries 和 Optional Packages
- · WebLogic Server 9新特性:JSR-181 Web Services
- · WebLogic Server 9.0:JMS增强功能
- · WebLogic Server9.0产品重点新特性介绍
- · 在Spring中实现事务挂起
- · ALUI 界面深入客户化——替换Portal内置组件
- · ALUI在解决企业门户上的优势
- · AquaLogic User Interaction开发入门
- · 添加协作服务
- · 使用WebLogic SIP Server和WebLogic Workshop驱动Cantata媒体服务器
- · 深入Beehive标签库系列教程 - 前提条件
- · 深入Beehive标签库系列教程(1) - 基本NETUI标签
- · 深入Beehive标签库系列教程(3) - 表单标签:单选框
- · 深入Beehive标签库系列教程(5) - 表单控件:下拉框
- · 深入Beehive标签库系列教程(6) - 使用标签遍历数据
- · 赢得网络服务开发人员的三大…
- · 大规模的财政应用和面向服务…
- · BEA实现了新的Web服务标准
- · 赢得Web服务开发者青睐的“…
- · 第11步:运行Request Quote…
- · 第10步:将报价从工作流发给…
- · 第9步:将报价写入文件系统
- · 第8步:创建报价文档
- · 第7步:设计并行执行路径
- · 第5步:创建一个Perform节点
- · RFID基础知识
- · RFID应用趋势分析
- · 如何实现与沃尔玛等巨头进行RFID对接
