《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 业界动态 > 基于内容管理中间件的Java应用系统

基于内容管理中间件的Java应用系统

2009-01-06
作者:王肖锋,曹作良

??? 隨著Internet技術(shù)的成熟和普及,企業(yè)的商業(yè)信息來(lái)源遠(yuǎn)超出了傳統(tǒng)數(shù)據(jù)庫(kù)的形式,如財(cái)務(wù)報(bào)表、辦公文檔、掃描的圖片、電子郵件、音頻和視頻等。如何對(duì)這些“非結(jié)構(gòu)化”信息即“內(nèi)容”進(jìn)行有效的數(shù)字化管理,將成為繼“數(shù)據(jù)管理”之后用戶的一個(gè)新需求[1]。同時(shí)企業(yè)應(yīng)用系統(tǒng)模式逐步向網(wǎng)絡(luò)化、分布式、移動(dòng)性及各種業(yè)務(wù)系統(tǒng)集成的方向轉(zhuǎn)變。為了滿足用戶新的需求和適應(yīng)企業(yè)應(yīng)用系統(tǒng)的這種轉(zhuǎn)變,采用中間件技術(shù)、Java技術(shù)及J2EE多層次應(yīng)用體系結(jié)構(gòu),建立在有效內(nèi)容管理基礎(chǔ)上的企業(yè)應(yīng)用基礎(chǔ)平臺(tái),已成為目前企業(yè)信息系統(tǒng)建設(shè)的主流。中間件位于操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)之上,應(yīng)用軟件的下層,是為了給上層應(yīng)用軟件提供開(kāi)發(fā)和運(yùn)行環(huán)境,幫助用戶快速、靈活、有效地開(kāi)發(fā)和集成復(fù)雜的應(yīng)用軟件。根據(jù)中間件在系統(tǒng)所起的作用及采用的技術(shù)不同,中間件可以分為5類(lèi)。其中數(shù)據(jù)庫(kù)中間件是在所有中間件中的應(yīng)用最廣泛、技術(shù)最成熟的一種[2]。把Web服務(wù)和高效的數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)服務(wù)結(jié)合在一起,可以組成大型的多媒體數(shù)據(jù)庫(kù)管理系統(tǒng)。它能夠使數(shù)據(jù)庫(kù)管理系統(tǒng)達(dá)到最優(yōu)化,并且為Web應(yīng)用提供開(kāi)發(fā)環(huán)境和網(wǎng)絡(luò)服務(wù)功能。

1.內(nèi)容管理中間件?

??? 內(nèi)容管理中間件是用來(lái)實(shí)現(xiàn)客戶端與數(shù)據(jù)庫(kù)之間的通信。它同時(shí)存在于客戶端和服務(wù)端,負(fù)責(zé)客戶/服務(wù)器間透明的請(qǐng)求和應(yīng)答交換。其內(nèi)容生命周期包括:內(nèi)容生成負(fù)責(zé)內(nèi)容生成/更新,協(xié)作以及檢查/批準(zhǔn);內(nèi)容管理負(fù)責(zé)內(nèi)容權(quán)限設(shè)置,版本控制和存取控制;內(nèi)容發(fā)布/傳送負(fù)責(zé)針對(duì)特定輸出設(shè)備或目標(biāo)用途進(jìn)行定制??傊诰W(wǎng)絡(luò)的內(nèi)容管理中間件不單具有一般數(shù)據(jù)庫(kù)中間件功能,完成對(duì)數(shù)據(jù)庫(kù)操作的封裝,而且還能提供Web服務(wù),完成對(duì)非操作型互聯(lián)網(wǎng)頁(yè)面內(nèi)容的生成、組織、傳送和維護(hù)。

1.1.內(nèi)容管理中間件的功能?

?? ?內(nèi)容管理中間件是一種把網(wǎng)絡(luò)的內(nèi)容管理和數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)服務(wù)相結(jié)合的中間件。該中間件包括dao、util、dm、bs 4個(gè)包,分別為數(shù)據(jù)訪問(wèn)對(duì)象包、方便客戶端訪問(wèn)工具包、數(shù)據(jù)管理包和業(yè)務(wù)邏輯包。dao包負(fù)責(zé)業(yè)務(wù)邏輯與數(shù)據(jù)庫(kù)的鏈接,對(duì)數(shù)據(jù)庫(kù)表存取數(shù)據(jù),并進(jìn)行數(shù)據(jù)格式的轉(zhuǎn)換。dao包中的方法可以由bs包中的業(yè)務(wù)邏輯調(diào)用,它是直接與數(shù)據(jù)庫(kù)進(jìn)行轉(zhuǎn)換的唯一接口。DBSessionManager類(lèi)負(fù)責(zé)與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)訪問(wèn),并負(fù)責(zé)數(shù)據(jù)格式的轉(zhuǎn)換,如GB2312碼與ISO8859的轉(zhuǎn)換;DBHandler類(lèi)負(fù)責(zé)數(shù)據(jù)庫(kù)的配置,如數(shù)據(jù)庫(kù)所在服務(wù)器的名稱,訪問(wèn)數(shù)據(jù)庫(kù)的用戶名和密碼,數(shù)據(jù)庫(kù)的端口號(hào)等。

??? 內(nèi)容管理中間件具有以下基本功能:

1)??分布式事務(wù)處理:CMM應(yīng)用程序框架提供Web應(yīng)用所應(yīng)有的最底層結(jié)構(gòu),它分為三個(gè)獨(dú)立的層次:表示層、商務(wù)層、數(shù)據(jù)層。利用它只需向框架中加入一個(gè)應(yīng)用程序?qū)ο蠛鸵幌盗斜硎緦?、商?wù)層、數(shù)據(jù)層對(duì)象即可搭建一個(gè)應(yīng)用程序系統(tǒng)。

2)??直接訪問(wèn)數(shù)據(jù)庫(kù):就像訪問(wèn)本地?cái)?shù)據(jù)庫(kù)一樣,它支持SQL語(yǔ)言的關(guān)系數(shù)據(jù)庫(kù)。

3)??集成和開(kāi)發(fā)工具:為用戶提供了大型關(guān)系數(shù)據(jù)庫(kù)與網(wǎng)絡(luò)應(yīng)用軟件以及企業(yè)內(nèi)部或外部的其他商務(wù)應(yīng)用軟件的集成能力。

4)??存取權(quán)限控制(AccessControl):為用戶提供了“加鎖”和“解鎖”的功能。每個(gè)用戶每次只能存取數(shù)據(jù)庫(kù)中的一個(gè)“記錄(record)”。

5)??工作流程(Workflow)管理:工作流程管理方便了內(nèi)容創(chuàng)建,編輯,審核以及應(yīng)用人員間的交流。每一個(gè)合格的“記錄(record)”必須要依次通過(guò)所有審批環(huán)節(jié)。

6)??動(dòng)態(tài)內(nèi)容管理(DynamicContent):動(dòng)態(tài)內(nèi)容管理是指頁(yè)面內(nèi)容可以持續(xù)更新,以實(shí)現(xiàn)動(dòng)態(tài)跟蹤最新新聞或信息,從而吸引更多新的瀏覽者和已有的瀏覽者的關(guān)注。

1.2內(nèi)容管理中間件的實(shí)現(xiàn)?

??? 下面以dao數(shù)據(jù)訪問(wèn)對(duì)象包為例來(lái)說(shuō)明中間件的實(shí)現(xiàn)。中間件的目標(biāo)就是要實(shí)現(xiàn)一個(gè)與數(shù)據(jù)庫(kù)的通用接口,同時(shí)該層次的設(shè)計(jì)要滿足獨(dú)立于數(shù)據(jù)庫(kù)具體設(shè)計(jì)實(shí)現(xiàn)。我們使用兩個(gè)管理層次上的BMP 實(shí)體Bean完成對(duì)數(shù)據(jù)庫(kù)的管理,一個(gè)管理數(shù)據(jù)庫(kù)中的各個(gè)用戶表,另外一個(gè)管理相應(yīng)表格中的各個(gè)紀(jì)錄。下面是對(duì)管理數(shù)據(jù)庫(kù)中的用戶表的實(shí)現(xiàn)。

??? Table遠(yuǎn)程接口繼承了javax.ejb.EJBObject,客戶端通過(guò)Bean管理數(shù)據(jù)庫(kù)中的用戶表時(shí)操作這個(gè)接口。定義了以下4個(gè)方法:

? ??? public abstract FieldDescriptor getFieldDescriptor(String s)?

? ??? public abstract Set getFieldNames()?

??? public abstract Set getPKFieldNames()? ?

??? public abstract String getTableName()?

TableHome接口繼承了javax.ejb.EJBHome,該接口由EJB容器的工具來(lái)實(shí)現(xiàn)。定義了基本的查詢方法如下:

? ??? public abstract Collection findByPattern(String s)

??? public abstract Table findByPrimaryKey(String s)

??? public abstract Table findByTableName(String s)

TableBean作為BMP的實(shí)體Bean,數(shù)據(jù)持久性都是自己手工管理的。EJB裝載時(shí)首先得到數(shù)據(jù)庫(kù)連接的對(duì)象(java.sql.Connection對(duì)象),使用該對(duì)象得到指定數(shù)據(jù)庫(kù)的DatabaseMetaData類(lèi)對(duì)象,然后使用DatabaseMetaData類(lèi)對(duì)象得到EJB主鍵(表格名稱)指定的表格的主鍵(PrimaryKey字段)。在TableBean中定義了3個(gè)查詢方法:

public String ejbFindByTableName(String s)

public String ejbFindByPrimaryKey(String s)

public Collection ejbFindByPattern(String s)

??? 表名稱作為T(mén)ableBean的主鍵,因此前兩個(gè)方法是一樣的,它可以根據(jù)數(shù)據(jù)庫(kù)內(nèi)惟一的主鍵值找到惟一的實(shí)體Bean的實(shí)例。第三種方法則得到多個(gè)表格的名稱,考慮到主鍵字段不一定唯一,使用Java容器類(lèi)型變量存放主鍵字段和字段描述。

2.基于J2EE的遠(yuǎn)程教學(xué)系統(tǒng)?

2.1 系統(tǒng)架構(gòu)?

??? 遠(yuǎn)程教學(xué)系統(tǒng)的一個(gè)突出特點(diǎn)是將人員信息、教學(xué)資源甚至系統(tǒng)軟件資源全部納入數(shù)據(jù)庫(kù)管理之中。依靠?jī)?nèi)容服務(wù)器的支持,對(duì)所有信息資源進(jìn)行便捷有效的管理,尤其是作業(yè)和考試的數(shù)據(jù)庫(kù)的實(shí)現(xiàn)。這樣可以克服單純依靠電子郵件來(lái)實(shí)現(xiàn)的種種弊端。使用CMM可以方便地構(gòu)建多層體系結(jié)構(gòu),多層應(yīng)用模式的使用,給系統(tǒng)帶來(lái)更好的維護(hù)性、可擴(kuò)展性。在多層應(yīng)用結(jié)構(gòu)中,CMM可以緊密地融合到系統(tǒng)中,開(kāi)發(fā)人員可以更加容易使用開(kāi)發(fā)平臺(tái)和開(kāi)發(fā)工具,給系統(tǒng)帶來(lái)更多性能的提高。

??? CMM在整個(gè)遠(yuǎn)程教學(xué)系統(tǒng)的位置如圖1。它由以下3個(gè)核心組件構(gòu)成:ServiceManager,Modeler,和Wrap。ServiceManager其功能類(lèi)似于一個(gè)數(shù)據(jù)庫(kù)管理者(DBA),提供了一個(gè)友好的網(wǎng)絡(luò)界面以實(shí)現(xiàn)終端用戶與數(shù)據(jù)庫(kù)的交流。Modeler內(nèi)置了所有數(shù)據(jù)庫(kù)操作邏輯,主要包括存取控制,工作流程控制等。Wrap它是可以與數(shù)據(jù)庫(kù)直接對(duì)話的EJB組件,描述了數(shù)據(jù)庫(kù)的基本單元——表和記錄,它還可以集成企業(yè)已有關(guān)系型數(shù)據(jù)庫(kù)。該系統(tǒng)采用符合J2EE技術(shù)規(guī)范的多層結(jié)構(gòu)的B/S應(yīng)用模式。系統(tǒng)邏輯上分為4個(gè)層次:客戶層、Web服務(wù)層、應(yīng)用邏輯層和數(shù)據(jù)層??蛻魧迂?fù)責(zé)人機(jī)用戶的輸入信息、請(qǐng)求服務(wù)器服務(wù)和顯示服務(wù)器端返回的結(jié)果。Web服務(wù)層負(fù)責(zé)接受客戶端的請(qǐng)求、調(diào)用EJB進(jìn)行業(yè)務(wù)邏輯處理及通過(guò)JDBC直接訪問(wèn)后臺(tái)存儲(chǔ)系統(tǒng)。應(yīng)用邏輯層主要進(jìn)行業(yè)務(wù)邏輯處理和系統(tǒng)級(jí)服務(wù)以及與Servlet/Jsp通信及后臺(tái)的數(shù)據(jù)庫(kù)通信。數(shù)據(jù)層負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和組織、數(shù)據(jù)庫(kù)的分布式管理和數(shù)據(jù)庫(kù)的備份與同步[3],[4]。

2.2 系統(tǒng)特點(diǎn)?

1)??客戶端零維護(hù)。整個(gè)系統(tǒng)完全基于Java語(yǔ)言來(lái)實(shí)現(xiàn),所有應(yīng)用程序運(yùn)行在服務(wù)器端,客戶端通過(guò)瀏覽器來(lái)執(zhí)行應(yīng)用程序。

2)??平臺(tái)無(wú)關(guān)性。由于Java語(yǔ)言和J2EE標(biāo)準(zhǔn)的平臺(tái)無(wú)關(guān)性,因此使用該中間件的遠(yuǎn)程教學(xué)系統(tǒng)可以方便實(shí)現(xiàn)平臺(tái)的遷移,減少系統(tǒng)的運(yùn)行成本。

3)??開(kāi)放的標(biāo)準(zhǔn)和開(kāi)放的結(jié)構(gòu)使其易與其他應(yīng)用軟件,中間件以及不同體系結(jié)構(gòu)進(jìn)行集成。通過(guò)J2EE平臺(tái)的豐富的系統(tǒng)功能,如:JDBC、JTA、JMS、JNDI、CORBA等,可與幾乎所有關(guān)系數(shù)據(jù)庫(kù)和現(xiàn)有業(yè)務(wù)應(yīng)用系統(tǒng)進(jìn)行無(wú)縫連接。

4)??跨操作系統(tǒng)、跨異構(gòu)數(shù)據(jù)庫(kù)、跨應(yīng)用服務(wù)器。

2.3 在分布式系統(tǒng)中Web(其他Java)應(yīng)用 ?

??? 在web應(yīng)用程序中可以直接使用DBSessionManager類(lèi)的對(duì)象來(lái)獲取表格,得到數(shù)據(jù)以及對(duì)他們進(jìn)行修改刪除等數(shù)據(jù)操作。而這時(shí)數(shù)據(jù)庫(kù)的連接、安全、事務(wù)、持久等特性都是透明的,用戶不必管理數(shù)據(jù)庫(kù)的連接池,不必手工查詢和處理。由于CMM和WEB應(yīng)用配置在同一臺(tái)計(jì)算機(jī)上,所以使用RMI-IIOP訪問(wèn)遠(yuǎn)程對(duì)象對(duì)用戶來(lái)說(shuō)也是透明的。

??? 獲取遠(yuǎn)程對(duì)象的方法如下所示:

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); 得到對(duì)配置系統(tǒng)的服務(wù)上下文環(huán)境

??????????? Object objref = initial.lookup("wrap");?

??????????? DBSessionHome home = (DBSessionHome) PortableRemoteObject.narrow (objref, DBSessionHome.class);? 使用wrap的jndi名獲取遠(yuǎn)程對(duì)象的home接口的引用

??????????? dbs = home.create();? 獲取對(duì)Ejb的遠(yuǎn)程對(duì)象接口(EjbObject接口)的引用

??????? } catch (Exception ex) {

??????????? System.err.println("Caught an unexpected exception!");

??????????? ex.printStackTrace();

??????? }

其中l(wèi)ocalhost需要換成目標(biāo)主機(jī)的地址/機(jī)器名/域名。

??? DBSession是配置與服務(wù)器中負(fù)責(zé)和服務(wù)器中實(shí)體Bean通訊的會(huì)話Bean,它使用實(shí)體 Bean的local接口管理實(shí)體bean所代表的數(shù)據(jù),接受客戶端請(qǐng)求,并使用對(duì)應(yīng)實(shí)體Bean的業(yè)務(wù)方法給客戶端適當(dāng)?shù)姆答?。因此,DBSession可以看成對(duì)實(shí)體Bean的封裝。

3.結(jié)論?

??? 目前,基于網(wǎng)絡(luò)的內(nèi)容管理技術(shù)和數(shù)據(jù)庫(kù)中間件技術(shù)已經(jīng)成為企業(yè)應(yīng)用系統(tǒng)的核心技術(shù)。該中間件產(chǎn)品已用于天津市科技攻關(guān)項(xiàng)目“高等職業(yè)遠(yuǎn)程教育信息服務(wù)系統(tǒng)軟件平臺(tái)”開(kāi)發(fā)了遠(yuǎn)程教育平臺(tái)軟件,并將在中歐國(guó)際合作項(xiàng)目高等職業(yè)遠(yuǎn)程教育項(xiàng)目中進(jìn)行完善。該中間件在遠(yuǎn)程教學(xué)系統(tǒng)的運(yùn)行中能滿足應(yīng)用要求,使得遠(yuǎn)程教學(xué)平臺(tái)具有較高的安全性、可擴(kuò)展性和開(kāi)放性,有利于系統(tǒng)的維護(hù)和升級(jí),還能整合遠(yuǎn)程教學(xué)系統(tǒng)現(xiàn)有業(yè)務(wù),降低系統(tǒng)更新成本。

參考文獻(xiàn)?

[1] 史寶慧,麥中凡. 從數(shù)據(jù)管理到內(nèi)容管理--企業(yè)門(mén)戶核心技術(shù)研究. 計(jì)算機(jī)工程與應(yīng)用, 2001,37(17)-143-146.?

[2] 李維宏,徐如志. 中間件技術(shù)及其發(fā)展動(dòng)態(tài). 微計(jì)算機(jī)應(yīng)用,2002,23(3)-138-141.?

[3] Subrahmany Allamaraju. J2EE服務(wù)器端高級(jí)編程[M]. 北京:機(jī)械工業(yè)出版社,2001.?

[4] Rahim Adatia. EJB編程指南[M]. 北京:電子工業(yè)出版社,2000.?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容

<ins id="rt6l8"><label id="rt6l8"></label></ins>
<tbody id="rt6l8"><th id="rt6l8"><input id="rt6l8"></input></th></tbody>
  • <ins id="rt6l8"></ins>