简介
实体 Enterprise JavaBeans(EJB)开发人员发现自己面临数据建模问题的挑战,这并不稀奇。因为实体 EJB 通常代表由关系 DBMS 管理的数据,所以程序员们常常必须决定:如何将表中现有的数据映射到支持 Web 应用程序所需的新的服务器端 Java 对象。尽管许多开发工具可以帮助程序员构建映射到单个表的单个实体 EJB,但很难找到有以下能力的工具:能帮助程序员创建实体 EJB,且该实体 EJB 映射到非关系数据或由多个数据源(可能既有关系数据源,也有非关系数据源)管理的数据。
在本文中,我们将研究 IBM DB2 联合数据库管理系统(DBMS)是如何帮助 EJB 程序员解决这些问题的。该技术为程序员提供了全异数据的单站点映象,呈现了一个虚拟数据库,这个虚拟数据库掩盖了远程数据源所需的应用程序编程接口(API)中的差别。这是联合 DBMS的特征之一,它使 EJB 程序员能以透明和高效的方式使用全异数据。
前一篇文章 处理 Web 应用程序中的全异数据介绍了联合 DBMS 概念并对它们如何能补充 Web 应用程序服务器环境做了说明。另一篇文章 构建访问联合数据的Web 组件研究了构建使用联合数据的会话 EJB 和 Web 服务的设计需求。在本文中,我们将研究联合 DBMS 技术更进一步的用法:作为创建带有容器管理的持久性(container-managed persistence (CMP))的实体 bean的基础。但在我们深入研究技术细节之前,理解联合数据库技术在什么情况下可能有益于实体 EJB 程序员是很重要的。
益处何在?
CMP 实体 bean 代表着 DB2 联合数据库技术的一种相当完善的用法,因为数据库访问的代码 — 也就是实现持久性的代码 — 是在部署 EJB 时自动生成的。相反,构建访问持久数据的会话 EJB的程序员,要编写自己的JDBC 语句才能建立数据库连接以及发出 SQL 语句。
在随后的几节中,我们将讨论如何构建使用联合 DBMS 技术的各种 CMP 实体 bean。IBM的WebSphere Studio Application Developer 集成版(WSADIE)将作为我们的Java开发平台。但是,首先要理解在什么情况下使用 DB2 联合技术会对实体 bean 程序员有好处,这很重要。联合技术可以:
扩展 EJB 所表示的数据源的范围。尽管流行的Java 编程工具 — 如 IBM的WSADIE — 提供对多种数据源的本机支持,但 DB2的联合技术提供了对一些其它数据源(包括非关系数据源)的现成的访问能力。此外,如果需要,DB2 程序员还可以构建封装器,以便使 DB2 能访问任何想访问的数据源,其中包括“旧的”DBMS、文件系统、原型软件等。
支持许多常用 DBMS的CMP 实体 bean的自动化开发和部署,而 不要求这些 DBMS的客户机软件安装在运行 WSADIE 或 IBM WebSphere Application Server的平台上。
支持单个 CMP 实体 bean的自动化开发和部署,该实体 bean的属性映射到来自多个数据源的数据。在这种方案中,会创建一个 DB2 视图,它连接或合并来自多个数据服务器的数据。因为“视图更新”问题对任何关系 DBMS 都很常见,所以这样的CMP 实体 bean 都被开发成“只读”的。
实体 EJB 概述
EJB 是遵守某些编程规范的服务器端软件组件。实体 EJB 代表了通常存储在关系 DBMS 中的持久数据。开发人员可以自己管理他们 bean的持久方面(通过 bean 管理的持久性,或简称 BMP),但大多数人选择将这一职责委托给容器(通过 容器管理的持久性,或简称 CMP)。本文着重讨论 CMP 实体 bean。
EJB 规范对开发人员制定了某些编码需求。这些需求会稍有不同,取决于您希望支持的EJB 规范级别。对于本文,我们将着重关注 EJB 1.1,它是 WebSphere Application Server 版本 4(我们的目标部署平台)支持的级别。在部署时,每个 CMP 实体 bean 都有几个代码模块,包括:
home 接口,定义创建、查找和除去 bean 实例的客户机方法。
remote 接口,定义与 bean 关联的业务方法。“getters”和 “setters”常用来获取和设置 bean的各个属性。
bean 类,包含由 EJB开发人员编码的业务逻辑方法和由容器使用的EJB 生命周期方法。EJB 客户机不直接访问这个类的对象,而是用容器生成的类(实现了 home 和 remote 接口)间接使用这个类的服务。
主键类,对能唯一标识该 bean的每个实例的属性(或属性集)进行标识,并提供创建和操作键的方法。
开发了 EJB 后,程序员必须设置管理 bean的特征(如其事务隔离级别)的部署描述符。最后,必须将这个 bean 打包并部署在 EJB 服务器中。部署过程会导致产生附加的类,其中包括那些与前面描述的home和 remote接口相关联的类。一个合适的Java开发环境(如 WSADIE)在开发、部署和测试 EJB 时会有很大的帮助。