數據庫的選型應該是會為您帶來商業優勢的戰略性決策。一旦做出決策,您就必須充分利用該數據庫服務器來實現這一優勢。本文簡要地介紹了 java 2 EnterPRise Environment(J2EE)環境,并討論了 J2EE 開發中使用的面向對象方法(分析、設計、實現),以及一些與對象持久性相關的問題,因為對象持久性與對象-關系數據庫治理系統(ORDBMS)的使用相關聯。
Web 體系結構背景
J2EE 包含幾十個縮寫詞,每個均代表不同的概念。要理解這一復雜性,回顧一下 Web 體系結構的發展過程是十分有用的,如圖 1 所示。
圖 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 環境的高層表示。而真正的實現則可能包含許多其他組件,并且可以將其對象分布在大型網絡中的多個機器上。
新聞熱點
疑難解答