1?緒論?
1.1 物流概述
??? 物流(logistics)是指物品從供應地向接收地的實體流動過程。根據(jù)實際需要,將運輸、儲存、裝卸、包裝、流通加工、配送、信息處理等基本功能實施有機結合。隨著電子商務的興起,各種網(wǎng)絡通訊技術的不斷進步,軟件工程學的面向對象和基于組件方法的廣泛應用,通過EDI、GPS和網(wǎng)絡技術,使得實現(xiàn)物流信息化和虛擬物流(以計算機網(wǎng)絡技術進行物流動作與管理,實現(xiàn)企業(yè)間物流資源共享和優(yōu)化配置的物流方式)成為可能。?
??? 物流的正式概念最早出現(xiàn)于日本,目前世界上物流水平最高的國家還有美國、加拿大、英國和澳大利亞。這些國家的物流基礎設施比較完備,交通便利,倉儲規(guī)范,因此具備實現(xiàn)大規(guī)模物流軟件系統(tǒng)的基本條件。在物流發(fā)達的國家中,各種物流企業(yè)根據(jù)自己的業(yè)務范圍,利用功能強大的物流系統(tǒng)軟件,不僅可以為客戶提供各種方便快捷的服務即電子商務中的B2C,還可以實現(xiàn)企業(yè)間(包括國際間)的事務合作和資源共享即電子商務中的B2B。?
??? 比較而言,我國的物流由于基礎設施不完備,交通和倉儲設施存在著地區(qū)性的較大差異,因此水平不高,而且要實現(xiàn)大規(guī)模的信息化存在著很多困難。所幸的是,國內(nèi)企業(yè)現(xiàn)在也十分重視物流的發(fā)展,為了更有效地整合資源,提高產(chǎn)品的生產(chǎn)效率,增強客戶對產(chǎn)品和服務的滿意程度,進而全面提升企業(yè)的市場競爭實力,許多公司都單獨設立了的物流部,并采用現(xiàn)代化的信息和網(wǎng)絡技術來提高該部門的服務質量。與此同時,社會上也出現(xiàn)了許多提供專業(yè)化物流配送一條龍服務的第三方物流企業(yè)。?
??? 隨著中國加入WTO日程的臨近,來自國際的競爭肯定將是激烈的,面對著機遇與挑戰(zhàn)并存的前景,我們必須發(fā)展自己的物流信息化ERP平臺,提高物流服務的整體水平。?
??? 為了實現(xiàn)物流電子化、信息化,我們有兩條路可以走:1、全盤西化,利用國外現(xiàn)成的軟件;2、采用先進的信息技術,結合實際,自主開發(fā)大型物流企業(yè)ERP平臺。方法1有其方便快捷的優(yōu)點,但是也存在著比較大的缺點:?
1.?國外的條件和我國的客觀實際存在著比較大的差異,如果拿國外的軟件直接用的話,會有“食洋不化”的情況出現(xiàn)。?
2.?系統(tǒng)維護不便,出現(xiàn)問題后修改的周期比較長。?
3.?溝通和交流障礙將會影響軟件的使用。?
4.?不利于我國在物流軟件方面出現(xiàn)有自主版權的產(chǎn)品。?
??? 因此,盡管存在著從零做起、沒有任何經(jīng)驗可循的困難,我們?nèi)匀灰敛华q豫地選擇第二種方案,中儲物流便是在此方針指導下,開始立項建設自主開發(fā)的、覆蓋面達全國范圍60余家倉庫的、大規(guī)模的、基于J2EE的分布式物流企業(yè)ERP平臺的。?
1.2 問題的提出?
??? J2EE框架旨在通過JSP/Servlet/EJB的三層架構來分離Web應用程序的顯示/業(yè)務/數(shù)據(jù)三層邏輯,但實踐證明在通常的Web應用系統(tǒng)開發(fā)中JSP因其使用簡單、開發(fā)速度較快而成為被廣泛使用的技術。但在大量采用JSP技術開發(fā)的Web應用中,存在著一些顯著的缺點,例如:HTML、JAVA代碼以及實現(xiàn)客戶端功能的Javascript代碼強耦合在一起,系統(tǒng)的業(yè)務邏輯內(nèi)嵌在網(wǎng)頁中,使得代碼的閱讀、調試和維護都具有一定困難;冗余代碼比較多,軟件可復用效率不高等。?
??? 比較而言通過結合使用Java Struts、XSLT、EJB等技術,可以使應用系統(tǒng)的框架更加合理,更加有效地分離顯示/業(yè)務/數(shù)據(jù)三層邏輯,更加有利于系統(tǒng)的移植和擴充。?
??? Java Struts是基于Web層進行應用系統(tǒng)開發(fā)的框架,它采用MVC設計模式,可以很好地分離顯示和業(yè)務邏輯,尤其將Java Struts和XSLT結合起來,可以產(chǎn)生更好的分離顯示和業(yè)務邏輯效果。?
??? EJB是服務器端的組件模型,通過EJB不但可以清晰地劃分各個功能接口及業(yè)務邏輯,而且能夠將應用系統(tǒng)部署到不同的機器上,從而通過分布式計算來減輕服務器端和數(shù)據(jù)庫系統(tǒng)的負載。?
??? 采用傳統(tǒng)的面向過程的程序設計和實現(xiàn)方法,對于某種類型的問題來說,有著其特有的開發(fā)時間短,見效快,人員不需要經(jīng)過特別培訓等優(yōu)點,例如我們的項目,因為它的模型是基于企業(yè)事務的流程建立起來的,因此采用面向過程的設計和實現(xiàn)方法就顯得既自然又簡單,沒有必要進行太多的抽象。但是,簡便的實現(xiàn)方案是要付出代價的,這就是系統(tǒng)的可維護性和可重用性不好,當業(yè)務邏輯發(fā)生變化時(這對于企業(yè)來說是經(jīng)常有的事),我們就不得不對大量的代碼進行修改,并且由于代碼模塊間的緊密耦合,使得修改一個地方有可能對另外的許多地方產(chǎn)生影響,因此會給系統(tǒng)的維護和升級帶來許多麻煩。?
??? 采用基于組件的軟件設計和開發(fā)方法,雖然在設計階段需要比較高層次上的分析和抽象,這往往不太容易做到,但是卻為今后的代碼實現(xiàn)和重用帶來很大的方便,而且好的設計方案可以使系統(tǒng)實現(xiàn)的層次結構更加清晰,從而有利于日后代碼模塊的維護和更新。?
??? 設計模式是比組件更高一個層次上的軟件抽象和復用。在軟件設計模式和框架方面的可重用性是面向對象的發(fā)展趨勢。例如,Java Struts通過提供符合MVC模式的框架,使在其基礎上開發(fā)的系統(tǒng)具有模塊化、組件化等優(yōu)點。?
目前,客戶端組件開發(fā)已經(jīng)比較成熟,業(yè)界有許多專門從事開發(fā)構件的第三方組件提供商,隨著Web Service的不斷發(fā)展和成熟,服務器端組件開發(fā)將是未來網(wǎng)絡應用系統(tǒng)發(fā)展的趨勢。J2EE的EJB是專用于開發(fā)服務器端組件的技術,它通過提供統(tǒng)一的資源管理和事務處理機制,可以大大簡化開發(fā)服務器端組件的復雜性,使服務器端組件的開發(fā)不必考慮server如何分配系統(tǒng)資源,如何進行線程調用,以及用什么機制調用該組件等一系列實現(xiàn)的細節(jié),而只需將重點放在組件需要實現(xiàn)的業(yè)務邏輯上,從而達到簡化和加快系統(tǒng)開發(fā)的目的。?
????本文旨在通過對面向對象和基于組件開發(fā)等軟件工程學方法的研究,提出符合EJB規(guī)范的物流配送系統(tǒng)設計方案,并且期望通過該設計方案能夠提高系統(tǒng)程序代碼的可維護性、可復用性和可擴展性。?
2 基于組件開發(fā)和EJB在物流配送系統(tǒng)中的應用?
2.1 物流配送系統(tǒng)的主要功能及特點?
??? 配送系統(tǒng)是中儲物流企業(yè)ERP平臺中的一部分,其主要功能有:接收客戶訂單,并為其代理貨物運輸;貨物在途監(jiān)控及監(jiān)控信息的網(wǎng)上發(fā)布;各種合同管理;結算及費用預繳、補繳管理;保險業(yè)務管理;信息統(tǒng)計匯總及生成各種報表。?
??? 配送系統(tǒng)基于具體的物流配送業(yè)務,具有以下特點:業(yè)務涉及的主體很多,例如,客戶、倉庫、貨物簽收單位(可能是倉庫或超市等)、運輸公司、運輸個人、交通部門包括鐵路、海運、航空等,和保險公司,因此,系統(tǒng)中的對象比較多,而且對象之間的關系比較復雜;業(yè)務完成的空間和時間范圍較大,根據(jù)客戶的訂單,一批貨物需要從一個城市運往另一個城市(市內(nèi)配送除外),途經(jīng)許多其它城市,一般無法當天到達,因此貨物從出庫到順利運達直至正常簽收,不但需要經(jīng)過空間上的轉移,而且需要經(jīng)過時間上的延續(xù),因此,在業(yè)務流程中,會出現(xiàn)許多可能的情況,并且這些情況都需要考慮在系統(tǒng)控制之內(nèi),所以每一類對象都存在著多種狀態(tài),并且這些狀態(tài)會隨時間而變化;系統(tǒng)需要支持多種用戶,各種用戶對系統(tǒng)的操作權限也不同,一般客戶僅可以瀏覽或查詢同自己的業(yè)務相關的信息,而公司內(nèi)部業(yè)務人員和系統(tǒng)操作維護人員,則可以同時對數(shù)據(jù)進行修改和刪除等操作,即系統(tǒng)需要同時對共享數(shù)據(jù)進行讀和寫操作,并且需要保證數(shù)據(jù)的完整性,一致性和安全性。?
2.2 系統(tǒng)開發(fā)采用的主要軟件及技術?
??? 基于物流配送本身的業(yè)務特點及企業(yè)對系統(tǒng)功能的具體要求,決定了本系統(tǒng)采用的主要軟件和技術如下:?
1. Web服務器及應用服務器:BEA Weblogic 6.0?
2.?軟件編碼工具:Borland Jbuilder6.0,Ultra Edit8.0?
3.?分析及設計軟件:Rational Rose,Microsoft Viso?
4.?項目工作組支持軟件:GUN CVS?
5.?數(shù)據(jù)庫系統(tǒng)軟件:Oracle 8.16?
6.?主要應用的技術:CBD,J2EE,XML?
3 需求分析?
??? 本系統(tǒng)面向的服務對象是第三方物流公司,通過將其業(yè)務流程全面信息化,能產(chǎn)生出有利用價值的數(shù)據(jù),再通過對這些數(shù)據(jù)的分析和整理就可以為公司現(xiàn)在和將來的經(jīng)營決策提供幫助。此外本系統(tǒng)還通過Internet接口提供企業(yè)對外的宣傳窗口,使客戶可以通過訪問Web頁面得到相關信息和其他公用信息。?
??? 本系統(tǒng)涉及到的實體比較多,包括:承運人,運輸人,客戶,簽收人以及保險公司等,其中承運人,即第三方物流公司,可以掌握系統(tǒng)中的全部數(shù)據(jù),并且可以對系統(tǒng)進行操作:錄入客戶訂單、選擇運輸人、車輛和路線、派車、錄入出庫單、對在運輸途中的車輛和貨物進行監(jiān)控以及錄入簽收單等。客戶則只能通過Internet錄入訂單,查詢相關信息。司機與系統(tǒng)的接口主要用于及時反饋運輸情況和貨物有無破損等信息。簽收人可以通過Internet訪問與之相關的簽收單,確認簽收或者退貨。?
4 EJB設計模式?
??? Session Fa?ade 是EJB最基本的設計模式之一,它將實體Bean隱藏于會話Bean之后,即客戶端不能直接訪問實體Bean,而只能同會話Bean 進行交互,再由會話Bean對實體Bean進行修改、刪除等操作。這樣就使實體Bean層,即服務器端對象模型,對于客戶端來說是完全透明的,從而清晰地劃分了客戶端層、業(yè)務邏輯層和實體模型層。采用Session Fa?ade還可以將需求分析階段產(chǎn)生的,用以描述應用業(yè)務邏輯及工作流程的Use Case直接對應于會話Bean的各實現(xiàn)方法,使整個應用從邏輯的角度來看,層次更加清晰。因為客戶端不能直接訪問實體Bean,而只能通過會話Bean來接入網(wǎng)絡,因此采用Session Fa?ade可以使系統(tǒng)的結構更加趨于合理,有效地減少了客戶端與服務器端之間的交互,從而達到減輕網(wǎng)絡負載的目的。?
??? Message Fa?ade也是EJB最基本的設計模式之一,它同Session Fa?ade一樣位于客戶端和服務器端實體模型之間。Message Fa?ade和Session Fa?ade之間的區(qū)別在于Message Fa?ade可以用來實現(xiàn)系統(tǒng)的一些異步功能,即當客戶端發(fā)出請求后,并不需要等待服務器端的回應,而由服務器端EJB組件內(nèi)部進行與之相應的一系列操作,在系統(tǒng)暫時繁忙或者出故障時,就將事務回滾,將客戶端請求掛起并排到一個隊列中,待系統(tǒng)空閑或服務器恢復服務時,不需要客戶端的干預而自動地再次執(zhí)行相關的操作,因此Message Fa?ade具有一定的系統(tǒng)容錯性。?
??? 以車輛在途監(jiān)控Use Case為例:當司機在運輸途中到達了監(jiān)控計劃指定的地點,或者遇到車輛、貨物的破損等一些意外情況時,可以通過電話、手機或者網(wǎng)絡將意外以及車輛到達某地的時間等信息輸入系統(tǒng),然后由系統(tǒng)的服務器端組件負責針對不同的信息及情況進行不同的處理,例如當貨物發(fā)生損失時,系統(tǒng)需要通知保險公司進行貨物定損及理賠等,這時司機并不需要等待系統(tǒng)的回應就可以直接繼續(xù)上路了,由配送中心負責處理一些相關事宜。?
??? Message Fa?ade設計模式除了繼承Session Fa?ade設計模式的優(yōu)點之外還具有的特點是:當客戶發(fā)送了一個JMS消息后,就可以隨意進行其他活動,而不必等待服務器完成了整個Use Case的業(yè)務邏輯之后才給予答復,因此適合用在相對耗時且比較復雜的應用系統(tǒng)中;使用消息Bean將保證應用系統(tǒng)在它所賴以運行的EJB Server或者其他一些子系統(tǒng)出現(xiàn)故障并且暫停服務時仍能夠繼續(xù)運行,例如,在車輛在途監(jiān)控Use Case中,如果數(shù)據(jù)庫系統(tǒng)出現(xiàn)了問題,那么車輛及貨物運輸途中的異常處理事務將無法完成,這時由客戶端傳來的異常消息會被保存到一個消息隊列里,并且在一段時間后自動重試。若EJB容器發(fā)生了故障,那么消息也會被保存起來等待下一次的使用。這些克服故障的能力是同步模式,即Session Facade所不能具有的,雖然網(wǎng)絡的復雜性使得只采用消息Bean沒有辦法避免所有的風險,但它至少也減輕了網(wǎng)絡應用系統(tǒng)運行過程中由于網(wǎng)絡的不穩(wěn)定性而造成的異常。?
5 結論及展望?
??? 基于中儲物流配送系統(tǒng)的實際開發(fā)經(jīng)驗,本論文得出以下結論:面向對象和基于組件開發(fā)是軟件工程學發(fā)展的主流方向,因為隨著設計模式(Design Pattern)、UML用例設計(Use Case)和統(tǒng)一軟件開發(fā)過程(UDP)等先進技術在應用系統(tǒng)開發(fā)中的廣泛使用,系統(tǒng)設計和開發(fā)人員已從中體會到了面向對象和基于組件開發(fā)帶來的好處,即系統(tǒng)實現(xiàn)代碼的邏輯層次清晰,具有較好的可維護性、可移植性和可復用性;隨著Web Service的不斷發(fā)展和成熟,服務器端組件開發(fā)將是未來網(wǎng)絡應用系統(tǒng)發(fā)展的趨勢,Java的J2EE開發(fā)平臺為開發(fā)分布式的服務器端組件提供了專用的工具,即EJB(Enterprise Java Beans),EJB通過提供統(tǒng)一的資源和事務處理機制,可以大大簡化開發(fā)服務器端組件的復雜性,使服務器端組件的開發(fā)人員不必考慮服務器如何分配系統(tǒng)資源,如何進行線程調用,以及用什么機制調用該組件等一系列實現(xiàn)細節(jié),而只需將重點放在組件要實現(xiàn)的業(yè)務邏輯上,從而達到簡化和加快系統(tǒng)開發(fā)的目的;隨著網(wǎng)絡、信息和通訊技術的不斷發(fā)展,現(xiàn)代物流配送可以完全實現(xiàn)電子化及信息化,即車輛運輸貨物的過程可以通過網(wǎng)絡達到全程監(jiān)控和隨意調度的目的。?
??? 從軟件工程的角度來說,未來的發(fā)展方向有:各種不同組件技術之間的任意組合,即根據(jù)具體應用的特點采用最合適的組件技術,然后再將用不同技術實現(xiàn)的組件通過一定機制結合在一起,使它們可以協(xié)作共同實現(xiàn)系統(tǒng)的各項功能;建立大多數(shù)軟件和應用系統(tǒng)所需要的通用組件庫,從而進一步提高組件的可重用性;提供更高層次上的軟件復用,例如,各種設計模式的總結和重復使用。?
??? 從物流配送系統(tǒng)的角度來說,未來的發(fā)展方向有:引入GPS,從而進一步加強對在途貨物的監(jiān)控力度,真正達到實時性信息交互;無線網(wǎng)絡應用的發(fā)展使得電子商務由原來的E_Commerce向M_Commerce (Commerce that use mobilephones 手機商務)發(fā)展,利用JAVA的J2ME技術可以方便地在原有的JAVA系統(tǒng)平臺上擴展出無線應用子系統(tǒng),例如SMS手機短信業(yè)務,免去了客戶上網(wǎng)查詢的麻煩,隨時可以用手機查到自己貨物的運輸位置和狀態(tài);利用Web Service將數(shù)碼倉庫與配送系統(tǒng)進行整合,這樣已經(jīng)存在數(shù)碼倉庫中的數(shù)據(jù)就可以直接進入配送系統(tǒng)進行貨物運輸和在途監(jiān)控了。?
