??? 隨著Internet技術的成熟和普及,企業的商業信息來源遠超出了傳統數據庫的形式,如財務報表、辦公文檔、掃描的圖片、電子郵件、音頻和視頻等。如何對這些“非結構化”信息即“內容”進行有效的數字化管理,將成為繼“數據管理”之后用戶的一個新需求[1]。同時企業應用系統模式逐步向網絡化、分布式、移動性及各種業務系統集成的方向轉變。為了滿足用戶新的需求和適應企業應用系統的這種轉變,采用中間件技術、Java技術及J2EE多層次應用體系結構,建立在有效內容管理基礎上的企業應用基礎平臺,已成為目前企業信息系統建設的主流。中間件位于操作系統、網絡和數據庫之上,應用軟件的下層,是為了給上層應用軟件提供開發和運行環境,幫助用戶快速、靈活、有效地開發和集成復雜的應用軟件。根據中間件在系統所起的作用及采用的技術不同,中間件可以分為5類。其中數據庫中間件是在所有中間件中的應用最廣泛、技術最成熟的一種[2]。把Web服務和高效的數據庫管理系統的數據服務結合在一起,可以組成大型的多媒體數據庫管理系統。它能夠使數據庫管理系統達到最優化,并且為Web應用提供開發環境和網絡服務功能。
1.內容管理中間件?
??? 內容管理中間件是用來實現客戶端與數據庫之間的通信。它同時存在于客戶端和服務端,負責客戶/服務器間透明的請求和應答交換。其內容生命周期包括:內容生成負責內容生成/更新,協作以及檢查/批準;內容管理負責內容權限設置,版本控制和存取控制;內容發布/傳送負責針對特定輸出設備或目標用途進行定制。總之,基于網絡的內容管理中間件不單具有一般數據庫中間件功能,完成對數據庫操作的封裝,而且還能提供Web服務,完成對非操作型互聯網頁面內容的生成、組織、傳送和維護。
1.1.內容管理中間件的功能?
?? ?內容管理中間件是一種把網絡的內容管理和數據庫管理系統的數據服務相結合的中間件。該中間件包括dao、util、dm、bs 4個包,分別為數據訪問對象包、方便客戶端訪問工具包、數據管理包和業務邏輯包。dao包負責業務邏輯與數據庫的鏈接,對數據庫表存取數據,并進行數據格式的轉換。dao包中的方法可以由bs包中的業務邏輯調用,它是直接與數據庫進行轉換的唯一接口。DBSessionManager類負責與數據庫的連接及數據訪問,并負責數據格式的轉換,如GB2312碼與ISO8859的轉換;DBHandler類負責數據庫的配置,如數據庫所在服務器的名稱,訪問數據庫的用戶名和密碼,數據庫的端口號等。
??? 內容管理中間件具有以下基本功能:
1)??分布式事務處理:CMM應用程序框架提供Web應用所應有的最底層結構,它分為三個獨立的層次:表示層、商務層、數據層。利用它只需向框架中加入一個應用程序對象和一系列表示層、商務層、數據層對象即可搭建一個應用程序系統。
2)??直接訪問數據庫:就像訪問本地數據庫一樣,它支持SQL語言的關系數據庫。
3)??集成和開發工具:為用戶提供了大型關系數據庫與網絡應用軟件以及企業內部或外部的其他商務應用軟件的集成能力。
4)??存取權限控制(AccessControl):為用戶提供了“加鎖”和“解鎖”的功能。每個用戶每次只能存取數據庫中的一個“記錄(record)”。
5)??工作流程(Workflow)管理:工作流程管理方便了內容創建,編輯,審核以及應用人員間的交流。每一個合格的“記錄(record)”必須要依次通過所有審批環節。
6)??動態內容管理(DynamicContent):動態內容管理是指頁面內容可以持續更新,以實現動態跟蹤最新新聞或信息,從而吸引更多新的瀏覽者和已有的瀏覽者的關注。
1.2內容管理中間件的實現?
??? 下面以dao數據訪問對象包為例來說明中間件的實現。中間件的目標就是要實現一個與數據庫的通用接口,同時該層次的設計要滿足獨立于數據庫具體設計實現。我們使用兩個管理層次上的BMP 實體Bean完成對數據庫的管理,一個管理數據庫中的各個用戶表,另外一個管理相應表格中的各個紀錄。下面是對管理數據庫中的用戶表的實現。
??? Table遠程接口繼承了javax.ejb.EJBObject,客戶端通過Bean管理數據庫中的用戶表時操作這個接口。定義了以下4個方法:
? ??? public abstract FieldDescriptor getFieldDescriptor(String s)?
? ??? public abstract Set getFieldNames()?
??? public abstract Set getPKFieldNames()? ?
??? public abstract String getTableName()?
TableHome接口繼承了javax.ejb.EJBHome,該接口由EJB容器的工具來實現。定義了基本的查詢方法如下:
? ??? public abstract Collection findByPattern(String s)
??? public abstract Table findByPrimaryKey(String s)
??? public abstract Table findByTableName(String s)
TableBean作為BMP的實體Bean,數據持久性都是自己手工管理的。EJB裝載時首先得到數據庫連接的對象(java.sql.Connection對象),使用該對象得到指定數據庫的DatabaseMetaData類對象,然后使用DatabaseMetaData類對象得到EJB主鍵(表格名稱)指定的表格的主鍵(PrimaryKey字段)。在TableBean中定義了3個查詢方法:
public String ejbFindByTableName(String s)
public String ejbFindByPrimaryKey(String s)
public Collection ejbFindByPattern(String s)
??? 表名稱作為TableBean的主鍵,因此前兩個方法是一樣的,它可以根據數據庫內惟一的主鍵值找到惟一的實體Bean的實例。第三種方法則得到多個表格的名稱,考慮到主鍵字段不一定唯一,使用Java容器類型變量存放主鍵字段和字段描述。
2.基于J2EE的遠程教學系統?
2.1 系統架構?
??? 遠程教學系統的一個突出特點是將人員信息、教學資源甚至系統軟件資源全部納入數據庫管理之中。依靠內容服務器的支持,對所有信息資源進行便捷有效的管理,尤其是作業和考試的數據庫的實現。這樣可以克服單純依靠電子郵件來實現的種種弊端。使用CMM可以方便地構建多層體系結構,多層應用模式的使用,給系統帶來更好的維護性、可擴展性。在多層應用結構中,CMM可以緊密地融合到系統中,開發人員可以更加容易使用開發平臺和開發工具,給系統帶來更多性能的提高。

??? CMM在整個遠程教學系統的位置如圖1。它由以下3個核心組件構成:ServiceManager,Modeler,和Wrap。ServiceManager其功能類似于一個數據庫管理者(DBA),提供了一個友好的網絡界面以實現終端用戶與數據庫的交流。Modeler內置了所有數據庫操作邏輯,主要包括存取控制,工作流程控制等。Wrap它是可以與數據庫直接對話的EJB組件,描述了數據庫的基本單元——表和記錄,它還可以集成企業已有關系型數據庫。該系統采用符合J2EE技術規范的多層結構的B/S應用模式。系統邏輯上分為4個層次:客戶層、Web服務層、應用邏輯層和數據層。客戶層負責人機用戶的輸入信息、請求服務器服務和顯示服務器端返回的結果。Web服務層負責接受客戶端的請求、調用EJB進行業務邏輯處理及通過JDBC直接訪問后臺存儲系統。應用邏輯層主要進行業務邏輯處理和系統級服務以及與Servlet/Jsp通信及后臺的數據庫通信。數據層負責數據的存儲和組織、數據庫的分布式管理和數據庫的備份與同步[3],[4]。
2.2 系統特點?
1)??客戶端零維護。整個系統完全基于Java語言來實現,所有應用程序運行在服務器端,客戶端通過瀏覽器來執行應用程序。
2)??平臺無關性。由于Java語言和J2EE標準的平臺無關性,因此使用該中間件的遠程教學系統可以方便實現平臺的遷移,減少系統的運行成本。
3)??開放的標準和開放的結構使其易與其他應用軟件,中間件以及不同體系結構進行集成。通過J2EE平臺的豐富的系統功能,如:JDBC、JTA、JMS、JNDI、CORBA等,可與幾乎所有關系數據庫和現有業務應用系統進行無縫連接。
4)??跨操作系統、跨異構數據庫、跨應用服務器。
2.3 在分布式系統中Web(其他Java)應用 ?
??? 在web應用程序中可以直接使用DBSessionManager類的對象來獲取表格,得到數據以及對他們進行修改刪除等數據操作。而這時數據庫的連接、安全、事務、持久等特性都是透明的,用戶不必管理數據庫的連接池,不必手工查詢和處理。由于CMM和WEB應用配置在同一臺計算機上,所以使用RMI-IIOP訪問遠程對象對用戶來說也是透明的。
??? 獲取遠程對象的方法如下所示:
Properties env = new Properties();
??????? env.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
??????? env.setProperty("java.naming.provider.url", "localhost:1099");
??????? env.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
??????? try {
??????????? Context initial = new InitialContext(env); 得到對配置系統的服務上下文環境
??????????? Object objref = initial.lookup("wrap");?
??????????? DBSessionHome home = (DBSessionHome) PortableRemoteObject.narrow (objref, DBSessionHome.class);? 使用wrap的jndi名獲取遠程對象的home接口的引用
??????????? dbs = home.create();? 獲取對Ejb的遠程對象接口(EjbObject接口)的引用
??????? } catch (Exception ex) {
??????????? System.err.println("Caught an unexpected exception!");
??????????? ex.printStackTrace();
??????? }
其中localhost需要換成目標主機的地址/機器名/域名。
??? DBSession是配置與服務器中負責和服務器中實體Bean通訊的會話Bean,它使用實體 Bean的local接口管理實體bean所代表的數據,接受客戶端請求,并使用對應實體Bean的業務方法給客戶端適當的反饋。因此,DBSession可以看成對實體Bean的封裝。
3.結論?
??? 目前,基于網絡的內容管理技術和數據庫中間件技術已經成為企業應用系統的核心技術。該中間件產品已用于天津市科技攻關項目“高等職業遠程教育信息服務系統軟件平臺”開發了遠程教育平臺軟件,并將在中歐國際合作項目高等職業遠程教育項目中進行完善。該中間件在遠程教學系統的運行中能滿足應用要求,使得遠程教學平臺具有較高的安全性、可擴展性和開放性,有利于系統的維護和升級,還能整合遠程教學系統現有業務,降低系統更新成本。
參考文獻?
[1] 史寶慧,麥中凡. 從數據管理到內容管理--企業門戶核心技術研究. 計算機工程與應用, 2001,37(17)-143-146.?
[2] 李維宏,徐如志. 中間件技術及其發展動態. 微計算機應用,2002,23(3)-138-141.?
[3] Subrahmany Allamaraju. J2EE服務器端高級編程[M]. 北京:機械工業出版社,2001.?
[4] Rahim Adatia. EJB編程指南[M]. 北京:電子工業出版社,2000.?
