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