使用Oracle9i JDeveloper構(gòu)建應(yīng)用程序
2024-08-29 13:47:14
供稿:網(wǎng)友
使用Oracle9i JDeveloper構(gòu)建應(yīng)用程序作者:Robert HallOTN虛擬商場(chǎng)背后的決策:VSM開發(fā)人員訪談 去年,OTN發(fā)布了虛擬商場(chǎng)(Virtual Shopping Mall,VSM)系統(tǒng),這是一個(gè)為了向人們展示Oracle產(chǎn)品如何支持用來(lái)構(gòu)建企業(yè)應(yīng)用程序的java 2平臺(tái)企業(yè)版(Java 2 Platform EnterPRise Edition,J2EE)開放標(biāo)準(zhǔn)而設(shè)計(jì)的示例應(yīng)用程序。VSM模擬了一個(gè)Web站點(diǎn),在這里,廠商可以建立顧客能夠訪問(wèn)并訂購(gòu)商品的在線商店。在類似VSM的J2EE應(yīng)用程序中,J2EE服務(wù)是在用戶瀏覽器、企業(yè)數(shù)據(jù)庫(kù)以及原有信息系統(tǒng)之間的中間層執(zhí)行的。J2EE的核心組件是企業(yè)JavaBeans(EJB)、JavaServer Pages(jsp)、Java Servlet以及到信息源的各種接口。由Oracle印度開發(fā)中心(IDC)的四位開發(fā)人員構(gòu)建的USM已經(jīng)被數(shù)千名OTN會(huì)員下載過(guò),并且在OTN以及其他以Java為中心的網(wǎng)站和出版物中引起了廣泛的愛(ài)好和討論,這些網(wǎng)站和出版物包括theserverside.com、ejbsig(EJB Special Interest Group,EJB非凡愛(ài)好小組)和Java開發(fā)者雜志(Java Developer's Journal)。最近,我與IDC的Reghu Krishna Pillai談?wù)摿薞SM及其開發(fā)過(guò)程。Robert Hall:你是如何協(xié)調(diào)團(tuán)隊(duì)開發(fā)的?你使用了什么工具和方法?Reghu Krishna Pillai:我們四個(gè)--Neelesh Shastry、Sujatha Ranganathan、Shrinivas Bhat和我--來(lái)自IDC,我們是從零開始設(shè)計(jì)和構(gòu)建這個(gè)系統(tǒng)的。在開發(fā)和部署階段,我們使用了Oracle9i JDeveloper集成開發(fā)環(huán)境(IDE)。開發(fā)方法是用于開發(fā)J2EE應(yīng)用程序的軟件設(shè)計(jì)流程--Rational Unified Process (RUP) ,RUP定義了以下要害的開發(fā)活動(dòng): 需求分析:提供了一個(gè)用例圖表
面向?qū)ο蟮姆治觯捍_定類、對(duì)象和交互
體系結(jié)構(gòu)規(guī)范:確定MVC模型
具體設(shè)計(jì):開發(fā)一個(gè)類圖表
實(shí)施:使用Java實(shí)施業(yè)務(wù)邏輯
確認(rèn):進(jìn)行單元和集成測(cè)試
組裝和部署:生成和部署EAR文件
完成應(yīng)用程序開發(fā)后,我們使用了Oracle9i JDeveloper提供的向?qū)⒃搼?yīng)用程序部署到OC4J(Oracle9iAS Containers for J2EE)上。RH:一些要害的前端問(wèn)題是什么?你們是如何解決這些問(wèn)題的?RKP:和用戶界面有關(guān)的主要挑戰(zhàn)是: 整個(gè)應(yīng)用程序采用一個(gè)通用的感觀:每個(gè)頁(yè)面被分為諸如頁(yè)眉、頁(yè)腳和導(dǎo)航部分等用戶界面組件。由于這些用戶界面組件在大部分頁(yè)面中被重復(fù)使用,因此我們使用了樣式表。
實(shí)現(xiàn)靈活的布局治理:為了實(shí)現(xiàn)簡(jiǎn)單的靜態(tài)布局,我們放棄了使用模板,因?yàn)槟0宓膹?fù)雜性太高。
實(shí)現(xiàn)javascript的跨瀏覽器兼容性。
使用設(shè)計(jì)模式RH:你能否談?wù)刅SM的體系結(jié)構(gòu)和你為了支持它而使用的一些設(shè)計(jì)模式?RKP:虛擬商場(chǎng)應(yīng)用程序基于模型-視圖-控制器(Model-View-Contrller,MVC)設(shè)計(jì)模式,該設(shè)計(jì)模式在應(yīng)用程序內(nèi)分為三種截然不同的功能形式。模型表示應(yīng)用程序中數(shù)據(jù)的結(jié)構(gòu)以及對(duì)數(shù)據(jù)的特定操作;視圖通過(guò)某個(gè)應(yīng)用程序函數(shù)將數(shù)據(jù)以一定的形式展示給用戶;控制器根據(jù)用戶的喜好和模型狀態(tài),將用戶行為和用戶輸入轉(zhuǎn)變成調(diào)用模型并選擇適當(dāng)視圖的應(yīng)用程序函數(shù)。MVS使治理應(yīng)用程序的流程變得更加輕易。另外,它還可以輕松地支持多個(gè)視圖,例如,可以在不修改流程邏輯的情況下為手持設(shè)備創(chuàng)建視圖。修改業(yè)務(wù)邏輯或視圖對(duì)彼此只有很小的影響,甚至沒(méi)有影響。通過(guò)MVC為應(yīng)用程序添加新的用例變得簡(jiǎn)單,設(shè)計(jì)也變得更加清楚和更易于維護(hù)。我們已經(jīng)在內(nèi)部實(shí)施了一個(gè)可擴(kuò)展且功能強(qiáng)大的MVC設(shè)計(jì)模式。VSM中的視圖由在瀏覽器中提供的JSP構(gòu)成。模型由EJB和其他可在業(yè)務(wù)層訪問(wèn)到的支持類構(gòu)成。至于控制器,我們實(shí)施了一個(gè)servlet,用于解析和傳輸由模型和視圖產(chǎn)生的請(qǐng)求和響應(yīng),這些視圖通過(guò)一個(gè)xml映射文件注冊(cè)到VSM框架。另外,企業(yè)信息系統(tǒng)(Enterprise Information System,EIS)層提供了一個(gè)能以一種與實(shí)施無(wú)關(guān)的方式將已有數(shù)據(jù)和應(yīng)用資源映射到J2EE應(yīng)用程序設(shè)計(jì)上的軟件層。這個(gè)抽象的數(shù)據(jù)庫(kù)層可以作為一個(gè)在不同的應(yīng)用程序間可重復(fù)使用的庫(kù)。
諸如商店、訂單、商品和用戶等VSM都作為實(shí)體Bean來(lái)模擬。每個(gè)組件都對(duì)應(yīng)一條數(shù)據(jù)庫(kù)記錄,并具備事務(wù)處理功能,容器治理持久性(Container Managed Persistent,CMP)實(shí)體Bean是實(shí)施的最佳選擇,因?yàn)樗鼈円子谑褂茫宜鼈兝昧藨?yīng)用服務(wù)器的優(yōu)化特性。RH:通過(guò)基于Web的用戶界面,要在中間層執(zhí)行業(yè)務(wù)邏輯,而數(shù)據(jù)卻保存在數(shù)據(jù)庫(kù)中,因此假如你不降低網(wǎng)絡(luò)流量,那么應(yīng)用程序的性能就會(huì)受到損害。你是如何解決這個(gè)問(wèn)題的?RKP:設(shè)計(jì)模式就在此處發(fā)揮了很大的作用,例如,我們?cè)诜?wù)器上實(shí)施了一個(gè)session Facade,以為客戶端提供一個(gè)到底層EJB的統(tǒng)一接口。客戶端只需與facade交互,由facade代表它們調(diào)用適當(dāng)?shù)姆?wù)器端EJB方法,從而降低了網(wǎng)絡(luò)流量。另一個(gè)要害是Value Object設(shè)計(jì)模式(也被稱為數(shù)據(jù)傳輸對(duì)象),在此模式下,一個(gè)服務(wù)器端對(duì)象充當(dāng)一組相關(guān)數(shù)據(jù)的容器。例如,當(dāng)一名用戶下了一個(gè)訂單時(shí),應(yīng)用程序必須治理多個(gè)對(duì)象和屬性,包括訂單號(hào)、訂單日期、客戶姓名和發(fā)貨地址。假如不使用Value Object 模式,應(yīng)用程序必須對(duì)每個(gè)屬性做遠(yuǎn)程get-method調(diào)用,這就會(huì)增加網(wǎng)絡(luò)流量、提高EJB容器資源的使用率并導(dǎo)致總體性能下降。Value Object模式只需進(jìn)行一次網(wǎng)絡(luò)往返就可完成同樣的工作。然而,我們發(fā)現(xiàn)應(yīng)該避免對(duì)value object不加選擇的使用,因?yàn)樗赡軙?huì)導(dǎo)致在服務(wù)器上建立過(guò)多的對(duì)象,也會(huì)導(dǎo)致不必要的數(shù)據(jù)傳輸。RH:VSM通過(guò)根據(jù)用戶角色顯示用戶界面來(lái)控制對(duì)應(yīng)用特性的訪問(wèn)。例如,商店老板可以訪問(wèn)那些使他們能夠上載文件的頁(yè)面,而商場(chǎng)客戶卻不能訪問(wèn)。你是怎么實(shí)現(xiàn)這點(diǎn)的?RKP:我們使用了Servlet過(guò)濾器。過(guò)濾器就相當(dāng)于Web應(yīng)用程序的攔截器,因此它們可用來(lái)解決諸如日志、安全性和緩存等交叉問(wèn)題。VSM使用了一個(gè)過(guò)濾器來(lái)處理用戶請(qǐng)求并返回正確的頁(yè)面。在VSM中采用的策略是通用的,可以重復(fù)用于任何Web應(yīng)用程序。它是一個(gè)可插式組件,因?yàn)樗菄@servlet過(guò)濾器實(shí)施的。這些過(guò)濾器為基于servlet的應(yīng)用程序添加了新特性,而且你可以在不接觸已有的servlet代碼的情況下對(duì)它們進(jìn)行定制和擴(kuò)展。例如,假如一個(gè)應(yīng)用程序需要控制對(duì)其Web頁(yè)面的訪問(wèn),我們只需在該應(yīng)用程序的web.xml文件中添加一行代碼就可以實(shí)現(xiàn)這個(gè)目的。RH:你發(fā)布了一個(gè)信用卡校驗(yàn)組件,作為一個(gè)可以從VSM示例應(yīng)用程序訪問(wèn)的Web服務(wù)。你為什么建立一個(gè)獨(dú)立的Web服務(wù)而不是將該功能直接構(gòu)建到應(yīng)用程序中?RKP:Web服務(wù)非常適合于集成不同類型的應(yīng)用程序和業(yè)務(wù)。這種方法使VSM更靈活、更易于維護(hù),并且是模塊化的而不是單一的。實(shí)際上,這個(gè)信用卡校驗(yàn)服務(wù)可以被一個(gè)支付網(wǎng)關(guān)提供商提供的實(shí)際支付服務(wù)所代替。因此,當(dāng)我們需要一個(gè)有金融交易支持的商業(yè)VSM時(shí),就可以很輕易地集成第三方提供的Web服務(wù)。 選擇XMLRH:所有提供給VSM用戶或從VSM用戶接收的數(shù)據(jù)都是XML格式的,這是為什么?RKP:我們選擇XML是因?yàn)樗诔蔀殡娮訑?shù)據(jù)交換(Electronic Data Interchange,EDI)的開放標(biāo)準(zhǔn)。通過(guò)使用XML,我們的應(yīng)用程序可以很輕易地集成后端功能和其他企業(yè)應(yīng)用程序,假如有的話。XML用于VSM中的報(bào)表編制。通過(guò)從數(shù)據(jù)庫(kù)表中提取表格數(shù)據(jù)然后將其轉(zhuǎn)換成結(jié)構(gòu)化XML的內(nèi)置支持,Oracle9i數(shù)據(jù)庫(kù)使我們的工作變得更加簡(jiǎn)單。另外,XML使我們可以將內(nèi)容與表示層分離開,從而使應(yīng)用程序更加靈活。這里有個(gè)例子:在當(dāng)前的實(shí)施中,商店老板可以獲得一個(gè)Html格式的報(bào)表視圖。但是,因?yàn)檫@個(gè)報(bào)表是XML格式的,所以可以很輕易地在報(bào)表上使用樣式表和格式化對(duì)象,從而產(chǎn)生不同格式(如Adobe PDF和Microsoft Word)的報(bào)表。RH:Java和J2EE仍在不斷地發(fā)展,VSM是否展示了它們的最新特性?RKP:在VSM的第一個(gè)版本中,我們展示了J2EE 1.2的特性和少量J2EE 1.3的特性,比如servlet過(guò)濾器。我們當(dāng)前正在開發(fā)的版本將展示各種J2EE 1.3的特性及其國(guó)際化特性。另外,為了答復(fù)來(lái)自O(shè)TN社區(qū)的反饋意見(jiàn),我們正在構(gòu)建一個(gè)基于BC4J(Business Components for Java,Oracle用于建立可伸縮的高性能J2EE應(yīng)用程序的基于標(biāo)準(zhǔn)的服務(wù)器端框架)的VSM版本。使用BC4J和標(biāo)準(zhǔn)的J2EE組件進(jìn)行開發(fā)是兩個(gè)不同的開發(fā)范例,這兩種方法各有其優(yōu)點(diǎn)和缺點(diǎn)。BC4J是一個(gè)純Java框架,它實(shí)施了各種J2EE設(shè)計(jì)模式,使J2EE應(yīng)用程序的開發(fā)更快、更輕易。因?yàn)樵贐C4J中開發(fā)的應(yīng)用程序是純Java的,所以它們可以在各種應(yīng)用服務(wù)器上運(yùn)行。(編者注:BC4J VSM現(xiàn)在可以在otn.oracle.com/sample_code/tutorials/bc4jvsm/bc4jvsmtoc.htm上找到)自行了解有關(guān)內(nèi)容OTN會(huì)員可以下載各種VSM版本,包括全部的源代碼、安裝指導(dǎo)、用戶指南和教程。要想獲得更多信息,請(qǐng)?jiān)L問(wèn)OTN的示例代碼頁(yè)面。