摘 要: 設計并實現了基于J2EE架構的經濟普查系統。利用J2EE多層結構模型的優點,將系統分為表示層、業務邏輯層和數據支持層等層次,介紹了各層次的設計,提出了經濟普查系統中基于J2EE和MVC模式的解決方案;從設計者的角度,詳細闡述了整個系統的架構與實現。建立了一套經濟普查管理軟件,對經濟普查數據實行集中管理、實時處理。
關鍵詞: 經濟普查系統; J2EE; MVC; 多層結構模型
中圖分類號:TP311 文獻標志碼:A 文章編號:1006-8228(2013)02-28-04
Design and implementation of economic census system based on J2EE
Zhang Lihong
(Zhejiang Changzheng Professional Technical College, Department of computing and information technology, Hangzhou, Zhejiang 310023, China)
Abstract: An economic census system based on J2EE is designed and realized. The system is divided into presentation layer, logic layer and data layer through J2EE multi-layer structure model. The design ideas of levels are described. The solution based on J2EE and MVC is proposed. The architecture and realization of the overall system are described from the designer's point of view. Furthermore, a set of economic census management software is designed, which has a centralized management and real-time processing for the economic census data.
Key words: economic census system; J2EE; MVC(Model-View-Controller); multi-layer structure model
0 引言
為了全面掌握國民經濟的發展規模、結構和效益等情況,我國于2008年進行了第二次全國經濟普查。這次普查的標準時間點為2008年12月31日,時期資料為2008年度[1]。普查對象是在我國境內從事第二產業、第三產業的全部法人單位、產業活動單位和個體經營戶,普查內容主要包括單位基本屬性、就業人員、財務狀況、生產經營情況、生產能力、原材料和能源消耗、科技活動情況等[2]。
1 經濟普查系統中技術應用現狀
目前,在經濟普查系統中應用的是具有一定競爭力的分布式組件技術,主要包括.NET,CORBA,J2EE三大主流的組件模型[3]。
J2EE(Java 2 Platform Enterprise Edition)是美國Sun公司推出的一個適用于企業級計算的支持多層、分布式應用的全新概念的Java平臺,它為搭建具有可伸縮性、靈活性、易維護性的企業信息系統提供了良好的機制[4]。
近年來,隨著Java技術的逐漸成熟與完善,J2EE平臺得到了長足的發展;而面向對象的MVC設計模式與J2EE多層體系結構結合起來,形成了一種快速高效的開發模式。其中,開源的Struts框架正是對MVC設計模式的實現,它提供了國際化和靈活性等許多特性,而且它選擇基于對象關系映射技術的Hibernate作為持久層的解決方案是比較合適的。
Struts是一個Web框架,它是Apache 基金會Jakarta 項目組的一個Open Source項目,主要采用MVC模式,能夠很好地幫助Java開發者利用J2EE開發Web應用[5]。和其他的Java架構一樣,Struts 也是面向對象設計,其體系結構包括模型(Model),視圖(View)和控制器(Controller)三部分。
Hibernate是Java應用和關系數據庫之間的橋梁,負責Java對象和關系數據之間的映射[6]。它是一個開放源代碼的對象關系映射框架,內部封裝了JDBC訪問數據庫的操作,向上層應用提供了面向對象的數據庫訪問API。Hibernate 在Java程序與數據庫之間進行的轉換,就是將Java中的對象與對象的關系,對應到關系型數據庫中的表與表之間的關系,Hibernate提供了這個過程中自動化對應轉換的方案,同樣也提供關系型數據庫中表與表之間的關系,對應到Java程序中對象與對象的關系。
2 系統功能分析與總體架構
經濟普查是關系國計民生的大事,對國民經濟的發展起著重大作用。而經濟普查系統是數據采集、處理與發布的基礎,本章介紹了經濟普查系統建設的意義、系統實現的主要功能與總體架構。
2.1 需求陳述
經濟普查系統是一套基于J2EE技術,并以規范的統計分類和統計方法為基礎建立起來的普查系統。該系統應具有強大的在線實時數據處理能力,能為加強和改善政府宏觀管理,調整經濟結構,編制預算,規范稅源和規劃產業層次結構提供重要依據,是構架國家宏觀數據庫,電子政務和實現國家行政管理現代化的重要基礎。
在系統的開發過程中,要充分考慮系統的可用性、可維護性、可擴展性、安全性等,使用戶操作盡量簡單明了。
⑴ 要保證系統的響應時間在普通用戶可接受的范圍內。
⑵ 建立完整的元數據庫管理系統,把統計涉及到的各類指標納入管理范疇,做到統一管理、統一維護。系統在開發過程中要充分考慮統計應用不確定性的實際情況,在統計指標維護、系統功能擴展等方面能適應統計信息和應用領域的變化。
⑶ 基本單位信息有部分涉密和敏感信息,在應用系統設計中必須包含安全部分的設計,并加以實現。安全設計和實現應該在應用程序每一個層次上加以體現,從而形成層次性深度防御。應用程序訪問和數據分離,必須以非數據擁有者的身份訪問數據。應用系統應該包含一個多元的身份信息。
⑷ 用戶界面設計要求簡單明了,便于操作,應主要遵循:界面直觀、對用戶透明的原則。
2.2 系統功能
根據普查的功能要求,可以把系統功能劃分為八項,即制度管理,調查對象管理,審核管理,數據匯總管理,數據查詢管理,元數據管理,系統管理和輔助功能。
2.2.1 制度管理
制度管理為專業用戶提供了制度布置和接收的功能。該子系統包括制度導入,制度導出,報表發布管理。
2.2.2 調查對象管理
經濟普查的對象是在中華人民共和國境內從事第二產業、第三產業活動的全部法人單位、產業活動單位和個體經營戶[7],普查對象應當如實填寫經濟普查數據。調查對象管理是指對被調查對象的管理,包括單位名錄管理,外網用戶管理。
2.2.3 審核管理
審核管理包括法人產業差錯清單、清理數據、審核結果分析、審核條件查看、數據成批審核。
2.2.4 數據匯總管理
數據匯總基于匯總關系,將基層數據加總得到匯總數據,匯總關系是根據統計分組的設定來表達的。在數據匯總中,匯總表選擇供用戶來選擇需要執行匯總的綜合表。
2.2.5 數據查詢管理
對于基層數據,可以按報表進行單指標或多指標組合查詢,查詢結果可以導出文件。對于綜合數據,可以按表查詢,查詢結果可以導出excel文件。進度查詢用于查看系統的執行進度情況。業務日志查詢用于查看,導出,刪除系統日志。
2.2.6 元數據管理
基于元數據標準的數據管理,為同級用戶之間進行數據合并和上下級之間進行數據上報、接收提供一致性的交互界面和后臺支持。主要包括數據導入與數據導出。其中數據導入包括導入本級數據、導入上報數據、導入清查數據。數據導出包括導出本級數據、導出上報數據。
2.2.7 系統管理
系統管理包括對國家統計局的所有組織進行創建、修改、啟用、停用等操作;機構用戶管理指的是對統計局專業用戶進行管理。
2.3 數據庫設計
數據庫設計有兩個最重要的目標,即滿足應用功能需求和良好的數據庫性能。所謂滿足應用功能需求,主要是指用戶當前與可預知的將來應用所需要的數據及其聯系應全部準確地存在于數據庫之中,從而滿足用戶應用中所需要的數據及其聯系應全部準確地存于數據庫中,從而滿足用戶應用中所需要的對數據進行的存、取、刪、改等操作。所謂良好的數據庫性能,主要是指對數據的高效率存取和空間的節省,并具有良好的數據共享性、完整性、一致性及安全保密性。
2.3.1 概念設計
概念設計是系統數據庫設計的關鍵,它通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體DBMS且反映組織信息需求的概念模型。本系統數據庫以實體聯系法(Entity-Relationship Approach)來建立數據庫的概念模型,按照系統數據流圖的分析結果,下面以調查對象管理中的單位名錄管理模塊為例構造出它們的E-R圖。根據需求和功能分解分析得到初步的用戶數據,如圖1所示,用E-R圖表示新增調查對象信息的需求(圖1中只畫出了主要屬性)。
[地區] [部門] [角色] [注冊
類型] [用戶][調查
對象][增加] [行業
代碼] [單位
代碼] [單位
名稱] [主營
業務] [上級] [操作
時間]
圖1 用戶修改企業信息的實體聯系模型
2.3.2 邏輯設計
邏輯設計就是把概念結構轉換成所選擇的DBMS支持的數據模型,并對其進行優化,也就是將概念結構設計得到的E-R圖,轉換生成等價的數據庫關系模式,并對轉換后的模型進行定義描述。而在用戶看來,一個關系模型的邏輯結構是一張二維表,由行和列組成。
在建立數據庫的關系模式時,需要遵循一定的原則。一方面,要求每個關系都應滿足一定的規范,只有這樣才能使關系模式設計合理、冗余最小、操作高效。本系統數據庫的設計要求是:滿足第三范式(3NF);滿足數據的一致性、完整性、安全性等原則。
2.3.3 物理設計
數據庫最終是要存儲在物理設備上的。為一個給定的邏輯數據模型選取一個最適合應用環境的物理結構(存儲結構與存取方法)的過程,就是數據庫的物理設計。物理結構依賴于給定的DBMS和硬件系統,因此,設計人員必須充分了解所用DBMS的內部特征,特別是存儲結構和存取方法;充分了解應用環境,特別是應用的處理頻率和響應時間要求;以及充分了解外存設備的特性。
數據庫的物理設計通常分為以下兩步。
⑴ 確定數據庫的物理結構
確定數據庫存儲結構時要綜合考慮存取時間、存儲空間利用率和維護代價三方面的因素。這三個方面常常是相互矛盾的,例如消除一切冗余數據雖然能夠節約存儲空間,但往往會導致檢索代價的增加,因此必須進行權衡,選擇一個折中方案。
⑵ 對物理結構進行評價,評價的重點是時間和空間效率
評價物理數據庫的方法完全依賴于所選用的DBMS,主要是從定量估算各種方案的存儲空間、存取時間和維護代價入手,對估算結果進行權衡、比較,選擇出一個較優的合理的物理結構。如果該結構不符合用戶需求,則需要修改設計。
3 系統實現
基于上述的總體架構與平臺設計,本章將介紹經濟普查系統的實現。其中包括系統的實現平臺、Struts應用配置、數據持久化層的實現和系統管理模塊的實現。
3.1 系統實現平臺
經濟普查系統采用tomcat 6.0作為J2EE服務器,數據庫服務器采用oracle 10g,采用B/S模式。在J2EE體系中,用Struts actionServlet控制,用JSP表現,而業務邏輯處理層用Javabean實現,持久化層采用Hibernate 3.0實現。
3.2 Struts應用配置
3.2.1 Struts配置
在Web.xml中設置org.apache.Struts.action.ActionServlet的一個實例。在一個完整的控制過程中,也就是處理一個HTTP請求時,在控制過程之初,這個Servlet會從一個配置文件Struts-config.xml中獲取請求與控制動作相對應的配置信息,Controller通過這些配置信息來決定HTTP請求該往何處轉發,而這些Action在接收到轉發來的請求后,實現真正的商業邏輯。在Web.xml文件中添加如下代碼:
<!--Struts config-->
org.apache.Struts.action.ActionServlet
3.2.2 配置Struts-config.xml文件
Controller通過Struts-config.xml文件的配置信息確定當有請求時該調用哪個對象來處理,Struts-config.xml文件是頁面Struts頁面導航最重要的文件,下面以系統用戶登錄為例介紹系統的文件配置。
身份驗證是在許可用戶(應用程序)訪問某個資源之前,鑒別其身份。授權發生在身份驗證之后,是確定用戶訪問資源時可享用的特權。未經過身份驗證的用戶被稱為匿名用戶。身份驗證是Web應用程序安全性的主要功能,系統登錄由賬戶和密碼組成。
配置ActionForm,前面介紹過一般一個Jsp頁面需要對應一個Model,即這里的ActionForm,此登錄表單對應的ActionForm如下:
public class LoginForm extends ActionForm {
private static final long serialVersionUID
=0x37fa8cd9c5eb4cd6L;
String userId;
String passwd;
public LoginForm() {
}
public String getPasswd() {
return passwd; }
public void setPasswd(String passwd) {
this.passwd=passwd; }
public String getUserId() {
return userId; }
public void setUserId(String userId) {
this.userId=userId; }
}
3.3 數據持久化層的實現
3.3.1 Hibernate配置文件
⑴ Hibernate.cfg.xml文件的建立
Hibernate可以從Hibernate.properties或者自定義的xml配置文件中讀取和數據庫連接有關的信息,此處我們在Hibernate.cfg.xml文件中定義數據庫:
<!一指定數據庫的驅動程序一>
name=\"Hibernate.connection.driver class\"> oracle jdbc.driver.OracleDriver <!一指定連接數據庫的}__> name=\"Hibernate.connection.url\">jdbc:oracleahin: @localhost:1521:jp2data system <!一指定數據庫的密碼一> zju <}一指定數據庫連接池大小一 <!一指定數據庫所適用的SQL方言一> net.sfHibernate.dialect.Oracle9Dialect
3.3.2 數據訪問對象DAO的實現
在系統中,使用數據訪問對象DAO(Data Access Object)設計模式,以便將低級別的數據訪問邏輯與高級別業務邏輯分離。DAO需要與數據源一起工作實現訪問機制。通過把Hibernate API封裝在DAO中,讓用戶直接調用封裝好的方法來訪問數據庫,這樣實現了對象的抽象化,也提高了對象的重用性。當底層數據源發生變化時,DAO向客戶端提供的接口不會變化,所以該模式允許DAO調整到不同的存儲模式,而不會影響其客戶端或業務組件。圖2為DAO實現圖。
[業務邏輯
對象][數據訪問
對象][數據源][數據傳輸
對象] [調用] [封裝] [調用/生成][獲取/修改]
圖2 DAO模式圖
在圖2中,業務邏輯對象代表需要對數據源進行訪問的客戶端,它可以是EJB組件或Web組件。客戶端通過DAO模式的實現類來訪問數據源。數據訪問對象類封裝了訪問數據源的所有方法。數據傳輸對象類負責在數據源和客戶端之間進行數據的封裝和傳輸。當客戶端獲取數據時,調用數據訪問對象中的相關方法,再由該方法實現對數據源的讀取操作,在得到相關數據后,該方法生成一個數據傳輸對象并將這些數據封裝在該對象中,最后將這個數據傳輸對象返回客戶端。同樣,當客戶端需要對數據源進行寫入操作時,會將需要更新的數據寫入一個數據傳輸對象中,再將其用作參數傳遞給數據訪問對象類中用于實現數據存儲的方法,并由其完成對數據源的寫入操作。
以系統中的UserDAO為例,其代碼部分如下:
public class UserDAOImpl extends HibernateDaoSupport
implements IUserDAO {
public void insert(User user)
throws DataAccessException {
getHibernateTemplate().save(user); }
public void delete(User user)
throws DataAccessException {
System.out.println(\"delete user:\" + user.getUserID());
getHibernateTemplate().delete(user); }
public void update(User user)
throws DataAccessException {
getHibernateTemplate().merge(user); }
}
通過在DAO中封裝getHibernateTemplate以實現對數據庫的操作,程序員只需要調用相應的業務邏輯如insert、delete方法等即可,不必關心內部操作細節。
4 結束語
本文主要探討了如何構建一個基于J2EE架構的多層分布式系統。結合目前的成熟技術和以往的研究成果,提出了一個綜合利用Struts和Hibernate框架、實現符合MVC設計模式的系統總體架構方案,并詳細闡述了系統中一些模塊的實現方法及步驟。實踐證明,應用基于Struts和Hibernate設計框架開發的、在J2EE平臺下的Web系統,其系統的結構層次比較清晰,可較好地實現層與層之間的解耦,提高了軟件開發的效率和維護的質量,也提高了系統的可擴展性、可維護性和可操作性。
參考文獻:
[1] 四川省人民政府經濟普查領導小組辦公室.第二次全國經濟普查概要.四川省情,2008.8.
[2] 全國經濟普查條例.北京統計,2004.10.
[3] 林星.面向組件的大規模軟件架構[J].IBM Developerworks,2004.3.
[4] 閻娟娟,陳波,王樂.基于Struts和Hibernate的J2EE架構的研究[J].計算機工程與設計,2008.21.
[5] 高紅梅,衛龍.基于struts框架的Web應用[J].技術與市場,2009.11.
[6] 陜振杰,黃宇.基于Struts框架的Hibernate應用研究[J].網絡安全技術與應用,2005.10.
[7] 許憲春.關于經濟普查年度GDP核算方案的思考[J].經濟科學,2005.3:5-8