简介
数据库的选型应该是会为您带来商业优势的战略性决策。一旦做出决策,您就必须充分利用该数据库服务器来实现这一优势。本文简要地介绍了 java 2 EnterPRise Environment(J2EE)环境,并讨论了 J2EE 开发中使用的面向对象方法(分析、设计、实现),以及一些与对象持久性相关的问题,因为对象持久性与对象-关系数据库治理系统(ORDBMS)的使用相关联。
Web 体系结构背景
J2EE 包含几十个缩写词,每个均代表不同的概念。要理解这一复杂性,回顾一下 Web 体系结构的发展过程是十分有用的,如图 1 所示。
图 1. Web 体系结构
图 1 中所展示的体系结构代表了 1996 年的 Web 环境。那时,浏览器和 Web 服务器主要是由 Netscape 提供的,而 Netscape 的产品在当时较之以前的产品来说是一个重大的进步。
在图 1 的左侧,我们看到的是浏览器。它包含一些附加功能,以使用插件来提供像显示 .pdf 文件这样的功能。它还增加了一些编程功能,以改善与用户的交互。其中包括一种能够添加到 Html 语言中的脚本语言 javascript(独立于 Java 创建的),以及可包含在 HTML 页中进行下载的 Java applet。
该浏览器使用超文本传输协议(HTTP)与 Web 服务器进行通信。HTTP 的重要特点就是它建立在请求-响应模型的基础上。每个请求-响应都是相互独立的。Web 服务器不会等待当前客户机的下一请求。因此,该协议是无状态的(stateless)。
万维网(WWW)是为了易于访问文档而创建的。因为每个请求都是单独完成的,所以无需追踪复杂的交互。Web 服务器可以接收请求,并使用所提供的信息在由 Web 服务器控制的目录结构中检索所请求的文档。
在发展初期,Web 服务器的定义中添加了一个称作公共网关接口(Common Gateway Interface,CGI)的接口。这是一种按照所定义的协议来调用以指定格式接收信息的程序,使用该程序来实现请求,并将之返回给 Web 服务器的简单方式。该方式还有能力调用一个可以生成更多动态内容的程序。因为这是对于浏览器请求的扩展,所以 CGI 程序是暂时性的:通过请求创建,一旦返回结果就终止。
CGI 协议也有其局限性,并用于实现访问关系数据库的应用程序。这意味着每当向驻留在关系数据库中的信息发出请求时,都必须打开数据库连接,插入、更新和检索数据,以及关闭连接。在大多数情况下,多数时间都消耗在数据库的连接上。人们想出了两个办法来解决该问题:让 CGI 程序与永久性程序进行对话,以及通过包含 API 来扩展 Web 服务器的功能。
第一个办法是让 CGI 程序与永久性程序进行对话,这个方法可以有许多变种。CGI 程序可以启动一个要基于某个 ID 来进行访问的应用程序,而这个 ID 是我们在响应中返回的(如图 1 中的 app-srv 所示)。假如此 ID 在某个间隔内还没有被重新使用,程序将终止。另一种方式是让一个永久性程序来处理所有客户机向该应用程序发送的请求。该场景极可能需要一个多线程程序,用于验证客户机的有效性,以及向每个新的客户机分配 ID。然后,它必须记录每个客户机 ID 的超时时间。
第二个办法是通过包含 API 来扩展 Web 服务器的功能,即利用 Web 服务器 API(图 1 中的 NSAPI)来编写应用程序,并将之驻留在 Web 服务器上。通过该方法,Web 服务器可以保持数据库连接,以及包含应用程序特定的处理信息。这种方法也需要记录用户和连接超时。
进入应用程序服务器将各种 Web 应用程序的实现方式合并成为一个更完整的架构是有道理的。那时,Java 倡导的“一次编写,到处运行”的概念已经十分流行。所以,J2EE 的成型并未花很长时间。
J2EE 是一个 Java 规范,且深受面向对象(OO)程序设计方法的影响(Java 是一种 OO 编程语言)。其目标是提供一个应用架构,其中包含实现企业应用程序所需的所有特性,这包括可移植性、可伸缩性、事务控制,等等。J2EE 规范包括:
J2SE:Java 2 Standard Edition 包含了闻名的 Java 环境,其中包括与平台无关的 Java 开发工具箱/Java 运行时环境(JDK/JRE)、多线程环境、Java 基础类等。
EJB:Enterprise Java Beans 提供了在分布式环境中表示对象的标准方式。EJB 具有三种类型:会话 bean、实体 bean 和消息 bean。
Servlets:Java Servlets 提供了请求-响应通信模式中的操作机制。
jsp:Java Server Pages 是非凡类型的 servlets,用于动态创建 HTML 页并显示给用户。
JDBC:Java 数据库连接接口提供了与诸如关系数据库的数据源进行通信的标准化方式。
JTA/JTS:Java 事务 API 与 Java 事务服务。
JMS:Java 消息服务。
JNDI:Java 命名和目录接口。该接口对于 J2EE 环境至关重要,因为它提供了一种无需知道其位置就可以追踪资源的方式。您可以将之与 LDAP 目录服务等同起来。
JavaMail
JAXP:用于 xml 处理的 Java API。它还包括用于 XML 注册的 Java API(JAXR)和基于 XML 的 RPC 通信协议(JAX-RPC)。
Connector Architecture:该体系结构提供了与未集成在 J2EE 环境中的遗留系统进行通信的方式。 JAAS:Java 认证和授权服务。
这些规范仍然在不断演变着,而且还在添加更多组件。颇有意义的是,这些规范是基于标准的,并且致力于提供给用程序提供者、应用程序服务器提供者以及硬件平台之间的可移植性。正如您可以看到的,J2EE 环境正试图提供企业应用程序中所需的所有可能服务。这包括了多年以来以不同形式提供的许多服务。
图 2 中提供了 J2EE 环境的高层表示。而真正的实现则可能包含许多其他组件,并且可以将其对象分布在大型网络中的多个机器上。
图 2. J2EE 高层体系结构