本文简要地介绍了Java2EnterpriseEnvironment(J2EE)环境,并讨论了J2EE开发中使用的面向对象方法(分析、设计、实现),以及一些与对象持久性相关的问题。/J2EE与IBM对象—对关系数据库系列(2)/请求—响应/模型—视图—控制器/J2EE持久性模型/IBM的对象—关系数据库/
请求—响应
基于 Web 的用户和应用程序服务器之间的交互遵循使用 HTTP 协议的原始 Web 模型。这意味着我们要受上面简要描述过的请求-响应模型的
约束。
为了便于进行该通信,引入了新的 Java 类。用于处理该通信的主类就是 HttpServlet 类。该类包含了一组与HTTP 协议相匹配的方法,其中获得请求内容的方法是 doGet() 和 doPost()。
HTTP 协议要么通过在 URL 中放置参数来向 Web 服务器传递信息,要么独立于 URL 传递信息。第一种称作 GET 命令,而第二种称作 POST 命令。GET 命令的优点是,URL 包含了检索请求信息所需的所有信息。因此,可将其加入书签以便将来重新调用。而 POST 命令独立于 URL 发送附加信息,提供了更好的安全性。当需要发送比较大量的信息时,该方法也更为合适。其缺点就是不能被加入书签。
doGet() 和 doPost() 接收两个参数:HttpServletRequest 请求和HttpServletResponse响应。这些附加类为您提供了需要从请求中获得的所有信息。您将使用响应参数来编写应答。已提供的方法可以满足您完成该应答所需的所有功能。
浏览器和应用程序服务器之间的一切交互都是通过 HttpServlet类完成的。您得花些时间去学习上述类中所包含的字段和方法。
模型—视图—控制器
J2EE 建议使用 MVC 开发模型。该模型背后的思想是:尽可能地将与用户的交互、处理以及数据访问分离开。该模型已经活跃了很长一段时间。我记得它最早出现在20 世纪 80 年代的 Smalltalk 语言中。
图 3 说明了该模型与 J2EE 组件的使用。应用程序首先发出一个 JSP(视图)请求,而 JSP 稍后将返回一个在浏览器中显示的页面。接着,用户选择一个动作,向 servlet(控制器)发送信息。再由 servlet 来决定必须完成什么操作,它可能需要检索一个 Java bean(模型)或 EJB 来提供数据访问。然后,servlet 可以向 JSP 传递一个对 Java bean 的引用,以便访问要格式化和显示的数据。

图 3. MVC 模型
Enterprise Java Beans(EJB) EJB 体系结构提供了开发分布式应用程序的标准模型。一个 EJB包含两个接口:Home 和 Remote。home 接口用于创建或查找指定类型的对象。remote 接口是通过 home接口检索得到的,为您提供了对远程对象的公共方法的访问。
EJB 有三种类型:会话(session)、消息(message)和实体(entity)。会话 bean 提供对业务过程的访问。它们分为两种类型:有状态的和无状态的。有状态会话 bean 保存特定客户机调用之间的信息。无状态会话bean 可以被多个客户机共享,因为它不保存调用之间的任何特定信息。
消息 bean 是一种无状态的 bean,提供了用于操纵 JMS 异步消息的业务过程。实体 bean 代表业务数据及其相关的操纵逻辑。该业务数据必须保存在持久性存储器(例如,一个
数据库)中。EJB是通过部署描述符进行分布的,部署描述符包括事务属性、安全性
授权和持久性等信息。
面向对象方法(O
OA)面向对象(Object Orientation)改进了软件的开发,它也是 J2EE环境中的关键部分。OO 的关键包括数据封装和继承的概念。
面向对象支持层次结构方法。我们可以看到对象继承层次结构和对象组合层次结构。图 4 通过部分医学数字图像和通信(Digital Imaging and Communications in Medicine,DICOM)标准,说明了这两种类型的层次结构。

图 4. DICOM 层次结构
一个 Data 对象(DICOMData)可以特殊化为以下四种对象中的一种:patient、study、series 或 image。而在图 4 所展示的另一层次结构中,则可以将 TAG 对象特殊化为 DataElement。这些类型的继承在OO 分析、设计和编程中极为普遍。仅仅查看 Java 类就可以看到一组精巧的对象继承层次结构。
图 4 还展示了聚集/组合示例,包括组合层次结构中的多个层次:我们看到,一个 Patient 可以包含多个study,而一个 study 可以包含多个 series,而一个 series 又可以包含多个image。我们还看到所有这些对象都可以包含多个TAG/DataElement,因为该组合是在对象继承层次结构的父类(DICOMData)中表示的。
聚集/组合模型使对象之间不太明显的区别变得有意义。阅读 OO文献时会发现,在多数商业应用程序中,具有频繁搜索并直接操纵的“第一级”对象,以及仅通过第一级对象来访问“第二级”对象 —— 如果您不检索第一级对象,就永远无法获得第二级对象。30 年前,这种典型的层次结构模型主导了数据库模型。我们将在后面的小节中进一步讨论它所带来的优点和缺点。
OO 中另一个有趣的主题就是对象持久性。实际上,OO 文献整个都在讨论对象,以及它作为内存中的对象与其他对象的交互。另一方面,持久性似乎是个很麻烦的问题。主要问题就是“持久保存对象”。数据库服务器除了在必要时恢复对象之外,不会添加值。这就是为何“阻抗失谐”问题对于许多OO 人员来说显得如此重要的部分原因。
J2EE 持久性模型
在谈论 J2EE 环境中的持久性时,我们很可能要涉及实体 bean。J2EE 环境为实体 bean 提供了两种持久性......