摘要:J2EE是一種利用Java2平臺來簡化多級企業解決方案的開發、部署和管理的體系結構,它通過提供企業計算環境所必需的各種服務,使得部署在J2EE平臺上的多層應用能夠實現高可用性、安全性、可擴展性和可靠性。對實際應用的J2EE分層結構進行了詳細分析,給出一種J2EE架構下的多層應用模式,并通過高校網上選課系統的設計詳細介紹了該模式下的具體開發方案。
關鍵詞:J2EE;EJB;Struts;設計模式
中圖法分類號:TP39309文獻標識碼:A
文章編號:1001-3695(2006)09-0172-03
隨著計算機網絡技術的迅猛發展和信息化的逐步深入,教學管理信息系統在高校中的應用也日趨廣泛。同時,由于學分制的推廣以及學生在課程選修方面的自由度逐漸增加,因此迫切需要建立相應的信息系統對學生課程的選修進行有效管理。考慮到高校應用環境中人員多、訪問量大、訪問相對集中等特點,必然對信息系統中數據管理提出更高的要求。因此如何結合高校應用的特點開發一套適合高校課程選修管理的信息系統是很有研究意義的。
SUN公司推出的J2EE技術體系為我們開發系統提供了良好的技術支持。J2EE是一個基于組件的體系結構,采取通過創建和組織J2EE組件來建立基于Web瀏覽器訪問、分布式應用、可伸縮、易維護的信息系統。本文提出應用J2EE的多層結構構建基于Web的網上選課系統,同時討論了如何優化性能的有效措施。
1J2EE體系結構及其核心技術
J2EE(Java2Platform,EnterpriseEdition)體系結構(圖1)是SUN公司于1999年底推出的一項企業計算平臺規范,它定義了包括平臺角色、組件模型、標準服務等一系列規范。J2EE系統一般是由客戶層、Web層、業務層和數據庫層構成的多層系統,客戶層可以是基于Web應用的,也可以是不基于Web的。在一個基于Web的J2EE中,用戶的瀏覽器在客戶層中運行,并從一個Web服務器上下載Web層中的靜態HTML頁面或由JSP或Servlet等程序生成的動態HTML頁面。Web層組件可由JSP頁面、Applets及Servlets組成,通過容器支持諸如客戶請求和響應等。業務層常用EJB實現,該層構成了應用的業務邏輯規則,是整個應用的核心部分,它按業務劃分成一個個獨立的邏輯單元EJB。EJB根據客戶請求,通過JDBC訪問后臺數據庫進行后臺計算,所有計算的復雜性都對客戶層進行屏蔽。Web層和EJB層通常被封裝在一個應用服務器中,它們構成了三層系統的中間層。
J2EE的一個主要目的就是簡化企業應用系統的開發,使程序員將主要精力放在商業邏輯的開發上。EJB正是基于這種思想的服務器端技術。EJB(EnterpriseJavaBeans)是J2EE體系結構的核心,它本身也是一種規范,該規范定義了一個可重用的組件框架來實現分布式的、面向對象的商業邏輯。EJB在功能上分為會話Bean(SessionBean)和實體Bean(EntityBean)。SessionBean執行事務邏輯、規則和工作流程,是具有事務過程邏輯的可重用組件。EntityBean將底層數據以對象的形式映射到內存中,供其他組件使用。這種將事務邏輯與底層數據分離的做法,使開發者只需關心商業邏輯而由EJB容器來實現目錄服務、事務處理、持久性、安全性等底層系統邏輯,使得應用可以適應不同操作系統的需要,增強了系統的可移植性和可擴充性。
2網上選課系統的結構設計
2.1系統邏輯結構
從邏輯上講,本系統分為四個層次,分別為Web表現層、業務規則層、數據訪問層、數據資源層。系統的邏輯層次結構如圖2所示。
2.2系統功能結構
根據使用對象的不同把選課系統劃分為學生、任課教師、系院秘書、系統管理員四個模塊,如圖3所示。系統管理員負責給各系(院)秘書分配使用權限和數據管理工作,系(院)秘書根據各自具體情況建立教師檔案、課程信息、開課情況和學生記錄,并給本系教師和學生分配使用權限。任課教師只能查詢與自已相關的信息以及錄入自已所任課程的學生成績,同時,教師也能修改自已的個人資料。學生必須在注冊登錄后進行課程、成績查詢以及在規定時間內選擇、修改課程。
2.3數據庫的邏輯設計(圖4)
3網上選課系統的實現及關鍵技術
選課系統的四層結構分別采用以下技術建立:數據庫采用MySQL,數據訪問層采用CMP(容器管理持久)實體Bean管理數據持久性,業務規則層采用SessionFacade模式實現為會話Bean,采用JBOSS作為應用服務器,前端Web表現層采用Struts實現MVC架構。
3.1數據訪問層設計
數據訪問層設計得成功與否往往對項目起著至關重要的影響,其設計的關鍵是遵循數據持久性框架,要求提供分開數據持久邏輯與表示和業務邏輯的整體機制,不讓框架上建立的應用程序了解數據所在的數據庫平臺,同時抽象數據庫中存儲數據的物理細節和數據庫中數據實體之間存在的關系,隱藏數據庫操作命令和事務管理的細節。數據持久層的實質就是要在對象-關系數據庫之間提供一個成功的企業級別的映射解決方案,盡最大可能彌補這兩種范例之間的差異。J2EE中的實體Bean正好提供了內存對象與數據庫中的實體之間的一個良好映射方案。另一方面,Bean容器處理了大部分的數據完整性、資源管理和并發性功能,從而使開發人員主要關注業務邏輯和數據處理,而不是這些低級細節。
在本系統中的數據實體主要有學生實體、教師實體、課程實體、開課信息實體、選課實體以及系(院)等實體。實體Bean的形式是采用容器管理持久性2.0的格式,是EJB2.0規范定義的新型實體Bean。所有實體Bean除了具有一般實體Bean所具有的EJB方法(ejbCreate();findByPrimaryKey();ejbActiVate()等)外,還按各自的需求定義和用EJB組件查詢語言EJBQL實現類似findBy***()形式的函數,如學生實體中的findByDep(stringdepid)(按照系院編號查找學生)等,開課信息實體中的findByCourseTerm(StringcourseNo,Stringterm)(按學期查找某課程號的課程開課情況)等。
數據訪問層設計的另一個值得考慮的問題是性能,在此考慮兩個方面的措施:①用JDBCforReading模式實現所有主要用于讀訪問的操作,因為一次性只讀訪問沒有必要創建EntityBean的負載。②由于系統中存在對少部分數據如系(院)、教師等或資源如JDBC數據源、EJBHome等的大量查找,因此緩存這部分數據對于提高查找速度、減少數據庫訪問量或JNDI命名服務的使用,對于提高系統性能具有非常重要的作用。采用ServiceLocator模式與Singleton模式一起使用可以實現緩存機制。以查找某編號的系(院)為例,首先從ResoucreCache(實現為Hashtable)中找尋,找到則返回;沒有找到則從數據源中查找,找到后在把結果返回的同時也將結果寫入ResoucreCache中,下一次使用時則只需從ResoucreCache中得到。
3.2業務規則層
本系統用會話Bean來實現業務規則,會話Bean分為有狀態和無狀態兩種。在選課系統中,無狀態會話Bean主要用于調用實體Bean,有狀態會話Bean用于創建實體Bean。
無狀態會話Bean的主要任務是調用已經存在的實體Bean實例,在本系統中是為用戶提供查詢各個實體實例的服務。例如調用課程實體Bean的按系院查詢功能,可以得到某個特定系(院)的全部課程實體而不用直接操縱實體Bean;同樣,如查詢教師信息、查詢成績等功能也可以通過無狀態會話Bean來完成。之所以采用無狀態會話Bean作為客戶端調用方式,是因為無狀態會話Bean不保存用戶狀態,可以支持大量用戶同時訪問系統,這在校園網環境中是尤為重要的。
有狀態會話Bean在本系統中的作用主要是用來創建一個新的實體Bean實例。有狀態會話Bean在電子商務中的應用非常普遍,最常見的例子就是購物車。本系統中的有狀態會話Bean的應用與購物車類似,比如學生選課過程中要求跟蹤學生每一次的選擇結果(Item),每一Item有唯一的標志——開課編號(KkId)。學生可以增、刪、改選課結果,或者清空選課結果,因此選課是與一個Session關聯的,因為它歸屬某個學生,跨越多個請求。所以設計的關鍵在于在哪里存放選課的狀態信息,我們使用了有狀態的SessionEJB,里面用一個Collection存放選課結果(KkId,開課號)。同時EJB提供addItem,deleteItem,updateItem,empty,getItems等各種方法來增、刪、改、清空里面的內容以及返回結果。
減少遠程網絡調用是提高系統性能的又一關鍵問題,本系統采用了兩種手段:ValueObject模式和SessionFacade模式。ValueObject模式用于獲取與更新實體的狀態數據,數值對象(ValueObject)將所有狀態數據包裝成一個可系列化對象,然后在客戶端與實體之間傳遞,向遠程客戶端提供代表服務器上內容的本地對象視圖,從而在數據的獲取或更新過程中可以將遠程調用減少到一次。另外,有時客戶端通常需要來自幾個實體Bean的信息,這時可以使用數值對象,把來自不同源的數據包裝起來,傳輸到客戶端。比如,學生選課結果數值對象(StudentCourseVO)包含Student和Course兩個實體,因此在StudentCourseVO中除了含有學生的基本信息字段外,還用LinekdList封裝課程信息。SessionFacade模式解決的是客戶端對EJB(通常是實體Bean)的多次調用。比如,學生在查詢選課結果時會涉及對選課結果、課程信息、教師信息等多個實體Bean的操作,因此將這樣的操作放到SessionFacade中,就可以讓客戶端具有SessionFacade的一個遠程引用而不是對多個實體Bean的引用。
3.3Web表現層
在開發J2EEWeb表現層時,通常采用MVC(ModelViewController)設計模式。本系統采用Struts架構,它是一個免費的OpenSource的J2EEWeb層的應用架構,繼承了MVC的各項特性。本系統將上面提到的業務層中的SessionEJB適配為Struts中的模型(Model),亦即把Model當作SessionEJB的客戶端,在動作類(Action)中通過ServiceLocator查找EJB來使用SessionEJB中定義的業務邏輯。控制器(Controller)主要由ActionServlet類中的Servlet接收來自客戶端的請求,截取并分發這些請求到相應的動作類;另外控制器還負責用相應的請求參數填充ActionForm,經過Validate方法進行數據驗證后傳給動作類(Action)。最后動作類會把控制權傳給后續的JSP文件生成視圖。所有控制邏輯都是利用Strutsconfig.xml文件配置的。另外,由于客戶端滿足規定形式的請求都必須經過ActionServlet處理,因此通過繼承ActionServlet類,可以在這里對所有訪問進行特殊要求的驗證。
4結束語
EJB是J2EE平臺的核心技術,采取基于J2EE和StrutsMVC框架模式來開發Web信息管理系統,使用Struts框架將業務邏輯和顯示頁面分離開來。服務器端采用EJB組件技術,結合使用適當的J2EE設計模式,不僅有效地提高了系統開發效率,還使得系統具有高性能、可擴展性、重用性以及事務處理和高安全性的特點。
參考文獻:
[1]杜韜,曲守寧,董彩云,等.EJB技術在高校教學管理系統中的開發與應用[J].計算機工程,2005,31(7):228229.
[2]成科揚.基于J2EE體系結構的高校畢業生就業信息系統的設計研究[J].計算機應用研究,2005,22(5):214215.
[3]郭濤.J2EE多層體系結構及在教育信息平臺中的應用[J].計算機應用研究,2004,21(6):209211.
[4][美]GraigABerry,JohnCarnell,MatjazBJuric.實用J2EE設計模式編程指南[M].邱仲潘,等.北京:電子工業出版社,2003.7275,140141.
[5][美]StevenJohnMetsker.設計模式Java手冊(影印版)[M].北京:中國電力出版社,2004.3751.
[6]杜明,李朝純.Struts+EJB在J2EE平臺上的設計與實現[J].計算機應用研究,2005,22(3):223225.
[7][美]DeepakAlur,JohnCrupi,DanMalks.J2EE核心模式(影印版)[M].北京:科學出版社,2004.124132.
[8]SunMicrosystemCorporation.JavaTechnologyJava2Platform,EnterpriseEdition(J2EE)EnterpriseApplicationModel[EB/OL].http://java.sun.com/j2ee/appmodel.html,2003/2005.
作者簡介:
范會聯(1971),男,講師,研究方向為網絡信息系統、軟件工程;李獻禮(1960),男,副教授,研究方向為網絡信息系統、非線性電路。