站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题J2EE 探险者:持久数据管理,第 1 部分

J2EE 探险者:持久数据管理,第 1 部分

摘要: J2EE 探险者:持久数据管理,第 1 部分
<table cellSpacing=0 cellPadding=0 width=168 align=right border=0> <tr> <td width=8></td> <td width=160> <table cellSpacing=0 cellPadding=0 width=160 border=0> <tr> <td width=160 bgColor=#000000 height=1></td></tr> <tr> <td align=middle background=/developerWorks/cn/i/bg-gold.gif height=5>内容:</td></tr> <tr> <td width=160 bgColor=#666666 height=1></td></tr> <tr> <td align=right> <table cellSpacing=0 cellPadding=3 width="98%" border=0> <tr> <td>什么是数据持久性?</td></tr> <tr> <td>J2EE 中的持久性</td></tr> <tr> <td>实体 bean 的优点</td></tr> <tr> <td>实体 bean 的缺点</td></tr> <tr> <td>会话 bean 和 JDBC</td></tr> <tr> <td>会话 bean/JDBC 的优点</td></tr> <tr> <td>会话 bean/JDBC 的缺点</td></tr> <tr> <td>进行调用</td></tr> <tr> <td>结束语</td></tr> <tr> <td>参考资料</td></tr> <tr> <td>关于作者</td></tr></table></td></tr></table> <table cellSpacing=0 cellPadding=0 width=160 border=0> <tr> <td width=160 bgColor=#000000 height=1></td></tr> <tr> <td align=middle background=/developerWorks/cn/i/bg-gold.gif height=5>相关内容:</td></tr> <tr> <td width=160 bgColor=#666666 height=1></td></tr> <tr> <td align=right> <table cellSpacing=0 cellPadding=0 width=160 border=0> <tr> <td>The ABCs of EJBs</td></tr> <tr> <td height=1></td></tr> <tr> <td>J2EE 探索 系列</td></tr> <tr> <td height=1></td></tr> <tr> <td>EJB 最佳实践 系列</td></tr> <tr> <td height=1></td></tr> <tr> <td>Advanced database operations with JDBC</td></tr> <tr> <td height=1></td></tr> <tr> <td>JDBC 3.0 有什么新特性?</td></tr> <tr> <td height=1></td></tr> <tr> <td>developerWorks Toolbox 订阅</td></tr> <tr> <td height=1></td></tr></table></td></tr></table> <table cellSpacing=0 cellPadding=0 width=160 border=0> <tr> <td width=160 bgColor=#000000 height=1></td></tr> <tr> <td align=middle background=/developerWorks/cn/i/bg-gold.gif height=5>Java 专区中还有:</td></tr> <tr> <td width=160 bgColor=#666666 height=1></td></tr> <tr> <td align=right> <table cellSpacing=0 cellPadding=3 width="98%" border=0> <tr> <td>教学</td></tr> <tr> <td>工具与产品</td></tr> <tr> <td>代码与组件</td></tr> <tr> <td>所有文章</td></tr> <tr> <td>实用技巧</td></tr></table></td></tr></table> <table cellSpacing=0 cellPadding=0 width=160 border=0> <tr> <td width=150 bgColor=#000000 colSpan=2 height=2></td></tr> <tr> <td width=150 bgColor=#ffffff colSpan=2 height=2></td></tr></table> <table cellSpacing=0 cellPadding=0 border=0> <tr vAlign=top align=left> <td>

级别:中级

</td></tr></table>

Kyle Gabhart(kyle@gabhart.com)
顾问,Gabhart Consulting
2003 年 6 月

J2EE 平台为管理企业数据持久性提供了一组丰富的选项,但如何选择适合于您体系结构的选项呢?Kyle Gabhart 介绍了 J2EE 最佳的数据持久性技术 — 实体 bean、JDBC 和 JDO — 并在几个不同环境中比较它们。

数据持久性是企业开发中最棘手的一个方面。一个企业数据持久性解决方案必须提供迅速的客户机事务,随着时间的过去确保数据完整性,以及在如系统崩溃和网络故障之类的日常灾祸发生时使数据继续存在。在 J2EE 探险者系列接下来的两个部分中,我们将着重讨论 J2EE 技术,这些技术有助于您为企业体系结构创建可靠的数据持久性解决方案。我们将通过简要地介绍企业应用程序中的数据持久性来开始该主题,然后继续更详细地讨论各种技术选项。在本部分中,我们将比较实体 bean 的一站式(single-stop)解决方案同更复杂的(但更健壮的)会话 bean 与 Java 数据库连接(Java Database Connectivity,JDBC)代码的组合。在下一部分中,我们将比较 Java 数据对象(Java Data Object,JDO)与实体 bean。

什么是数据持久性?

数据是任何计算机应用程序最重要的方面。计算机应用程序的核心是使某人或另一个计算机系统能够访问其数据。在企业环境中,数据不仅必须是可访问的(即,与用户界面连接并按一系列业务规则管理),而且还必须是持久的。持久数据存储就是即使在服务器崩溃的情况下仍能存在的数据存储。

持久数据存在于应用程序的活动内存之外,通常在数据库或平面文件系统中。虽然持久数据被读入瞬时存储器以供使用或修改,但它始终被写到外部数据存储中以长期存储。美国国家标准与技术研究所(The United States National Institute of Standards and Technology)(请参阅参考资料)定义了三种级别的持久数据:

大多数业务应用程序至少提供部分持久数据。这种类型的持久性在事务中期或者甚至在请求中期出现系统故障时容易遭破坏,这会导致数据不完整且常常遭毁坏。另一方面,在持久数据实现中,对系统中断或故障以“回滚(rollback)”回应,数据状态被回滚到上一个已知的良好配置。持久数据实现在企业体系结构和数据库管理系统(DBMS)中很常见。完全持久数据实现非常少见。完全持久数据实现的少数几个示例有:日志记录文件系统、VMS 文件系统(如 VAX 和 Mac OS X)以及并发版本控制系统(CVS)。

J2EE 中的持久性

信息时代非常强调分布式企业计算平台的使用。在这类平台上,必须不惜任何代价保护数据并使其永远持续存在,即使面临网络故障、内存泄漏和服务器崩溃时,也是如此。为了维护这种持久性,应用程序组件必须能够处理并发性、连接管理、数据完整性和同步。J2EE 的所有三种数据管理技术都为开发人员处理这些功能,但每种技术在处理时略有不同。

我们将在余下的文章中讨论实体 bean vs. 会话 bean 和 JDBC 组合的优缺点。

实体 bean 的优点

谈到企业级数据持久性时,实体 bean 有下列优点:

<table cellSpacing=0 cellPadding=5 width=240 align=right border=1> <tr> <td background=/developerworks/i/bg-gold.gif>

实体 bean 的起落
然而,当架构设计师、开发人员和顾问开始使用实体 bean 时,它的吸引力和魔力就开始迅速消失。在 EJB 1.1 规范得到广泛实现时,事实表明使用实体 bean 必须小心谨慎。虽然它们仍代表了数据持久性的功能强大的组件-模型体系结构,但它们消耗过多的服务器资源这一点也是众人皆知。EJB 2.0 规范已经缓解了其中一些问题。虽然许多人仍需要从使用 EJB 1.1 实体 bean 的影响中恢复过来,但是与往日相比,实体 bean 现在变得更可信赖,是一种更可行的解决方案。随着本地接口出现、CMP 能力得到增加、J2EE 供应商具备更多有关实现 EJB 规范的经验,实体 bean 在整个业界再次成为可行的数据持久性机制。

1999 年,当首次引入 J2EE 和 EJB 规范时,实体 bean 被吹捧为是一种卓越的企业组件,它会彻底改变企业应用程序的开发、维护和可移植性。令业界振奋的是实体 bean 代表了一种没有麻烦的、自动持久性机制。 </td></tr></table>

总之,实体 bean 从标准化和业界最佳实践中受益,简化了企业开发的某些复杂性并提供引人注目的基于组件的设计。

实体 bean 的缺点

虽然实体 bean 确实有一个令人印象深刻的特性列表,这为它们添色不少,但我们还是要考虑它们的缺点,其缺点如下:

总之,实体 bean 的缺点是复杂性和较长的构建周期,从而使设计和开发包含它们的系统变得更困难。在生产中,实体 bean 因霸占资源和对大实体的并发请求响应极慢而声名狼籍。

会话 bean 和 JDBC

无状态会话 bean 的受欢迎程度不象实体 bean 那样大起大落(请参阅侧栏)。事实上,在普及和功能方面,无状态会话 bean 自 1999 年(当年发行了 EJB 规范)开始就一直保持稳定和可靠。它们产生性能极佳的结果和有效的资源合用,并且是 EJB 系列的一个重要工作程序组件。无状态的会话 bean 的稳定性和可预知性使它们成为管理持久企业数据的优秀候选者。

无状态会话 bean 常常与 JDBC 相结合来创建可靠的持久数据管理解决方案。在下面两节中,我们将衡量该解决方案的优缺点,但我们将不探究这两种技术本身的细节。如果您需要学习有关无状态会话 bean 或 JDBC 的更多内容,请参阅参考资料。

它是如何工作的
因为会话 bean 没有一种固有的数据访问机制,所以它们必须使用资源管理器连接工厂。资源管理器是 J2EE 容器的一个组件,它管理特定类型资源的整个生命周期,包括连接合用、事务支持以及使实际连接变成可能的任何必需的网络协议。连接工厂是用于创建至资源管理器的连接的对象。EJB 规范定义了 JDBC、JMS、JavaMail 和 JCA 资源的资源管理器。

在基于会话 bean 和 JDBC 的持久性体系结构中,会话 bean 将所有访问命令都委托给 JDBC 层。在接收调用时,会话 bean 使用 JDBC 来获得实现 javax.sql.DataSource 接口的对象。然后,返回的对象充当 java.sql.Connection 对象(由 JDBC API 定义)的资源管理器工厂,这些 java.sql.Connection 对象实现与数据库管理系统的连接。一旦获得了 Connection 对象,其余的持久性代码和业务逻辑(查询、更新、存储过程调用、结果集浏览和事务提交/回滚等等)就是纯 JDBC。

会话 bean/JDBC 的优点

会话 bean 和 JDBC 成为处理企业数据持久性的极佳组合。该组合最受认可的优点如下:

总之,会话 bean 和 JDBC 的组合能使开发人员对数据管理语义有细粒度的控制权,这一组合利用健壮且成熟的数据管理技术,支持功能优化,并将它全部封装成一个相对简单的组件体系结构中。

会话 bean/JDBC 的缺点

到目前为止都在谈论会话 bean 和 JDBC 组合的优点,但它也有一些缺点。缺点如下:

总之,与 JDBC 结合的会话 bean 遭受三个关键问题:bean 的实现常常是复杂的;会话 bean 没有固有的事务性;持久性机制不是自动的或者得不到保证。

进行调用

尽管还有不足,J2EE 架构设计师已开始宣布带有原始 JDBC 调用的纯无状态会话 bean 是最安全和最受推崇的数据持久性机制。这并非主要因为该组合是优于实体 bean 的解决方案(两者各有所长),实际是因为它有推动力。在实体 bean 很快脱颖而出又很快失宠的时候,对会话 bean 和 JDBC 的接受程度却随着时间的推移缓慢而稳定地积累起来。

不管当前趋势是什么,仔细地权衡实体 bean 和会话 bean 与 JDBC 组合的优点总是值得的。下面的列表标识了比较这两个数据持久性解决方案的四个关键方面:

结束语

J2EE 探险者系列的第三部分中,我们针对数据持久性将实体 bean 与会话 bean 和 JDBC 组合作了比较和对照。这里讨论的方案并未涵盖所有情形,但是它们代表了实体 EJB 组件和会话 EJB 组件的一些最常见用法。

下个月,我们将通过比较实体 bean 和 Java 数据对象(Java Data Object)来继续研究 J2EE 数据持久性机制。祝您到那时“探索”愉快!

</td>

↑返回目录
前一篇: J2EE 中使用EntityBean和JDO各有什么优点缺点
后一篇: 构建高性能J2EE应用的10个技巧