張 瑋,趙琳娜
(1.華北科技學院教務處,北京 101149;2.華北科技學院外語系,北京 101149)
煤炭生產是關系到國家經濟、人民生活的重要產業。由于煤炭企業的特殊作業方式,其突發事件多,供應過程中急用料多,給煤炭企業的物資管理帶來了很大的困難。煤炭企業的物資管理部門,必須要及時與生產一線進行信息交換,及時將物資消耗信息與生產工程進度、安全、質量等過程的信息進行比較、分析,從而做到生產資料全過程、全方位的管理與監控。如圖1所示。
煤炭企業的物資管理系統涉及的部門多、人員廣,從物資采購部、物資儲存部,一直到一線生產礦井。通過分布式的物資管理系統,能夠及時了解煤炭企業內部所有物資的進貨渠道、價格、庫存、消耗情況。同時,對于超過采購計劃的物資、數額以及庫存不足的物資能夠及時警告,從而在保證企業正常生產的前提下,做到控制成本,減少庫存積壓。同時,也對物資管理系統的分布性、并行性提出了更高的要求。
鑒于這種復雜性和高要求,本文從煤炭企業物資管理的需求入手,提出了以J2EE技術平臺為基礎,基于Spring框架為核心的分布式物資管理系統的解決方案。
煤炭企業的物資管理涉及到兩個主要環節:生產資料企業外采購、生產資料企業內流動。

圖1 煤炭企業物資管理中信息的流動
生產資料企業外采購環節主要由采購部門負責進行。采購部門根據庫存量和生產進度,及時、保量的完成一線生產所需的各種原材料,以保證整個企業的正常生產。基本業務流程如圖2所示。

圖2 生產資料企業外采購流程圖
生產資料企業內流動環節主要由倉庫部門負責。倉庫部門管理整個煤炭企業的物資存儲,包括原材料、維修配件、生產消耗品等。物資存儲直接面向生產一線,解決企業生產中遇到的物資消耗和物資采購間的不同步,以保證煤炭企業生產的連續性,起到物資需求緩沖帶的作用。基本業務流程如圖3所示。

圖3 生產資料企業內流動流程圖
在開發高效的分布式物資管理系統的過程中,如何同時滿足眾多參與者跨越空間、不同時效性的需求,實現他們各自的功能需求,是一個非常現實而棘手的問題。架構設計,就是在系統開發之初,就對可能出現的“不一致”進行評估、分析。力爭在項目初期,就對重要的問題、關鍵的技術進行統一的梳理、規劃。隨著功能的日益完善,整個系統在保證架構一致的基礎上逐步構建。
這一過程與現代高樓的建造頗為類似。工程師們在建造之初,就對整個大樓的地基、框架進行了設計、建造。隨后,只需要逐層進行少量的修改,就可以在短時間內完成整個大樓的建造。
在煤炭企業物資管理系統中,我們并不采用J2EE平臺中傳統的EJB容器,而是使用Spring框架支持的“輕量級容器”架構。Spring框架所提供的“輕量級容器”架構,并不要求業務對象必須實現特定的接口,只要是合法的Java對象,都可以成為業務對象,即通常我們所說的POJO(Plain Old Java Object)。這樣一來,作為業務對象而言,就可以甩掉沉重的EJB接口,而專注于實現業務功能,從而達到較高的內聚性。系統架構如圖4所示。

圖4 煤炭企業物資管理系統架構設計圖
用戶接口層主要是與用戶進行交互,提供人機交互界面,可以是應用程序也可以是網頁等網絡服務。
業務服務層主要是提供具體的業務功能,這些功能主要由業務對象來實現。同時,該層對外提供各種業務服務接口,供用戶接口層中的各種對象調用。
數據訪問層則封裝了數據訪問的所有實現,并對外提供數據訪問接口。對于數據的使用者而言,數據訪問對象是不存在的。數據訪問對象根據不同的實際情況,既可以直接操作數據庫也可以和對象關系映射層進行交互。
對象關系映射層(即Object-Relation Mapping)則完成了從對象到關系數據中表或字段的轉換。這種轉換經過配置后是自動完成的,并不需要對象本身進行顯示的干預。
根據煤炭企業的具體情況,設計其網絡結構,如圖5所示。

圖5 網絡結構示意圖
采購部門、倉儲工作人員使用“客戶端”通過Internet或企業內部的Intranet經過防火墻訪問業務邏輯服務器,直接調用各種業務對象,完成各種業務操作。
物資供應商則使用“瀏覽器”經由Internet,并穿過防火墻訪問WEB服務器,查詢訂單、追蹤訂單結算等情況。
一線的生產礦井工作人員則通過瀏覽器、客戶端,及時了解物資儲備情況、本礦井隨生產消耗的物資情況,同時可以及時追加物資領取申請。
在“輕量級容器”為核心的架構設計中,主要涉及到了兩種框架的使用。一個是由Spring提供的分布式對象框架,主要負責各種業務對象的調度,為客戶端和WEB服務器提供業務功能;另一個是由Hibernate提供的對象關系映射框架,主要負責將普通的Java對象轉換為關系數據庫可以識別的表及表間關系,為數據的持久化提供一種透明的實現機制。
Spring是目前應用較為廣泛的J2EE架構,它可以替代EJB架構作為企業級應用的輕量級解決方案。Spring框架的核心機制,是依賴注入和聲明式事務管理,這兩項技術可將最普通的Java對象(Plain Old Java Object)直接放到框架中進行管理,從而將被管理對象的侵入程度降到最低。
Spring框架使用HttpInvoker類,將函數的參數和返回值進行序列化,然后利用HTTP協議進行傳輸,整個過程相對于客戶端而言是透明的。分布式處理過程的參與類圖,如圖6所示。

圖6 分布式處理過程的參與類圖
DistributedClass:是被分布處理的類,其方法可以被遠程調用,簡稱為“分布類”。
IDistributedClass:Java接口類型,是分布類在“本地”的代理,包含了遠程服務方法的完整簽名。
DistributedClassClient:是分布類的使用者,簡稱為“調用者”。
ParameterClass:參數類,在遠程調用時需要被序列化,所以必須實現Java中的Serializable接口。
分布式處理過程中異地調用對象的序列圖,如圖7所示。
Hibernate框架是近幾年逐漸崛起的O/R映射工具。在配置好Hibernate框架后,從對象到關系數據庫的映射即可自動完成。除了最基本的增、刪、改、查外,Hibernate中也可以很好的管理事務,而無需在程序設計上花費大量的精力。Hibernate框架中,對象關系映射的參與類圖,如圖8所示。
PersistentClass代表了需要存儲在數據庫中的類,簡稱“存儲類”。BusinessService代表了需要將存儲類的數據寫入數據庫的業務服務類。PersistentClassList代表了一組“存儲里類”,是一個列表或組的概念。DAO 定義了數據訪問對象必須實現的方法簽名,這些方法均與數據庫存儲有關。DAOImpl 則具體實現了DAO接口中定義的數據訪問方法,封裝了訪問關系數據庫的實際過程。
煤炭企業的物資管理具有獨特的信息流程,所涉及到的部門、人員眾多,因此對煤炭企業的物資管理系統具有更多分布式的要求。我們利用J2EE平臺下Spring框架優良的分布式處理機制和Hibernate框架,很好的解決了這一問題,并給出了專門針對煤炭企業物資管理系統的架構實施方案。

圖7 分布式處理過程中異地調用對象的序列圖

圖8 Hibernate框架中對象關系映射的參與類圖
架構設計為整個系統的實現提供了一個一致性的基礎。在架構設計的基礎上,便可以著手針對具體的用戶需求實現具體的功能。這些后續的過程,都是在項目架構設計基礎上進行的。
[1]O.A.Burkres and J Chen.Luterase.An Execution Environment for Heterogeneous Software System[J].IEEE Computer,1993,26(8):57-69.
[2]孫衛琴.精通Hibernate:Java對象持久化技術詳解[M].北京:電子工業出版社,2006.
[3]王琰,朱福海.淺談煤炭企業供應物資的管理創新[J].煤炭經濟研究,2005(3):48-49.
[4]李剛.Spring寶典[M].北京:電子工業出版社,2006.
[5]Rod Johnson,Juergen Hoeller.J2EE Development without EJB[M].JavaEye譯.北京:電子工業出版社,2006.
[6]王智利.論物資系統構建[J].物資科技,2004(3):8-10.
[7]A.P.Sheth,J.A.Larson.Federated Database System for Managing Distributed,Heterogeneous and Autonomous Databases[J].ACM Computing Surveys,1990,22(3):183-236.