文档介绍:声明
本课件仅用于北京航空航天大学计算机学院的教学;
本课件修改采用了一些网络资源(论文、研究报告、技术报告等),在采用的时候并没有准确标注引用信息。
有关J2EE的流言
-对象映射
1. 对象-关系映射
对象-关系映射(Object/Relation Mapping,简称ORM)
面向对象的开发方法是当今企业级应用开发环境中的主流开发方法
关系数据库是企业级应用环境中永久存放数据的主流数据存储系统
对象和关系数据是业务实体的两种表现形式
业务实体在内存中表现为对象
在数据库中表现为关系数据
数据持久化(对象-关系映射)方法:
Entity Bean
会话 bean 和 JDBC
JDO(Java Data Object)
Hibernate
iBatis , TopLink, ……
Entity Bean
实体Bean作为企业数据持久性机制具有如下优点:
标准化
透明的持久性
事务支持
基于组件的设计
容器管理的服务。EJB 容器使开发人员不必管理常见的企业功能,如安全性、事务处理、连接合用和外部资源管理。
实体 bean 的主要缺点:
设计复杂性。容器管理的服务和自动且透明的持久性为整个应用程序设计引入了复杂性。实体 bean 通常也可以通过会话 bean 来访问,这意味着每个事务至少包含两个企业 bean,而通常会更多。
构建周期很长。一个 EJB 周期(设计/构建/测试/集成/测试/部署)所花的时间比可比的 Java 持久性解决方案多两到三倍。
响应时间。实体 bean 与 bean 实例的粒度相关。因此,开发人员始终面临选择:要么将 bean 按原样装入,而在别的方面解决响应时间长的问题;要么将数据分解成较小的实体,从而创建更复杂的系统体系结构。
资源使用情况。实体 bean 消耗了大量系统资源。
会话 bean 和 JDBC
会话 bean 和 JDBC 组合最受认可的优点如下:
设计简单。从体系结构设计观点来看,通过会话 bean 来直接处理数据管理比使用实体 bean 简单得多。
细粒度的控制。因为会话 bean 是通用的工作程序组件,所以它们允许开发人员完全控制整个持久性过程,包括高速缓存、持久性、并发性、同步及其它。相反,CMP 实体 bean 不允许开发人员控制持久性机制,而 BMP 实体 bean 仅使开发人员能够定义应发生什么,而不能定义应在何时或什么样的情况下发生。
成熟。JDBC 存在了七年左右!而实体 bean 出现至今只有三年多的时间。JDBC 的可靠性和最佳实践对于 J2EE 持久性机制的开发来说是一笔非常宝贵的资产。
速度。因为开发人员完全控制在会话 bean 中使用的数据访问机制,所以可以针对某些任务优化数据访问和持久性逻辑。由于直接和有目的的操作,这可以产生极快的响应时间。
缺点如下:
实现复杂。虽然这种系统的体系结构设计相当简单,但实际的会话 bean 实现常常十分复杂。如果应用程序的数据需求相当复杂,那么可能就无法实现管理数据库连接、确保数据完整性以及正确处理事务语义这些关键任务。开发人员常常需要实现某种类型的高速缓存同时确保最优性能。构造这种高速缓存机制使该系统的开发和维护进一步复杂化。
非固有的事务性。实体 bean 本质上是事务性组件,这些组件具有可配置的事务语义;而会话 bean 没有。将事务语义直接编码到应用程序代码中时,开发人员必须处处小心以确保每个功能的业务规则、流控制和事务完整性都得以保护并且可以容错。在实体 bean 开发中,这些细节都由容器处理。
持久性不是自动的或者得不到保证。在实体 bean 操作中,容器处理 bean 状态的持久性,并确保这种数据得到保护,供以后使用。对于会话 bean,将数据保持在安全、长期的数据存储中是开发人员的责任。
JDO(Java Data Object)
JDO 提供了面向对象的持久数据存储。开发人员使用 POJO(无格式普通 Java 对象,plain ordinary Java object)来装入和存储持久数据。
会话 bean 与 JDO 结合类似于将它们与 JDBC 结合,但 JDO 是以更面向对象且更以 Java 为中心的观点处理该问题的。