摘要:基于J2EE架構(gòu)在購(gòu)物超市原有的EIS系統(tǒng)上,設(shè)計(jì)實(shí)現(xiàn)了一套靈活的倉(cāng)庫(kù)庫(kù)存管理和自動(dòng)采購(gòu)系統(tǒng),實(shí)現(xiàn)了系統(tǒng)內(nèi)部庫(kù)存報(bào)警、自動(dòng)補(bǔ)貨、向供貨商提供查看庫(kù)存接口等功能,對(duì)購(gòu)物超市業(yè)的發(fā)展將起到較大的推進(jìn)作用。
關(guān)鍵詞:J2EE;倉(cāng)庫(kù)管理;用例分析;消息傳遞;XML文檔
中圖分類號(hào):F717.6文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1002-3100(2007)04-0074-04
Abstract: In this paper, a flexible and J2EE-based warehouse management system for the supermarket is designed and implemented on the basis of already existing EIS realizing the automatic storage checking and reporting, the automatic stocking up, and the visit interface offered to the merchandise provider. It will promote and accelerate supermarket's development.
Key words: J2EE; warehouse management; use case; message transfer; XML Document
近幾年,大型購(gòu)物超市的信息化建設(shè)引起了商家的高度重視。目前購(gòu)物超市應(yīng)用管理系統(tǒng)(即超市的EIS)普遍所采用的是C/S結(jié)構(gòu),其開(kāi)發(fā)重點(diǎn)是收銀功能的實(shí)現(xiàn),包括支持條碼槍、錢(qián)箱、小票打印機(jī)、條碼電子秤、會(huì)員卡消費(fèi)、磁卡等。在EIS建設(shè)中,倉(cāng)庫(kù)管理功能沒(méi)有得到商家的足夠重視,不能實(shí)現(xiàn)貨物自動(dòng)采購(gòu),沒(méi)有系統(tǒng)內(nèi)部庫(kù)存不足的報(bào)警功能。購(gòu)物超市的倉(cāng)庫(kù)管理系統(tǒng)(e-WarehouseMS)在企業(yè)的整個(gè)供應(yīng)鏈中起著非常重要的作用,如果不能保證正確的庫(kù)存和進(jìn)貨控制,將會(huì)導(dǎo)致管理費(fèi)用的增加,服務(wù)質(zhì)量難以得到保證。因此,在原有的EIS上設(shè)計(jì)一個(gè)性能優(yōu)良、擴(kuò)展性、靈活性都很好的倉(cāng)庫(kù)管理系統(tǒng)是大型購(gòu)物超市的一種必然。
SUN的J2EE架構(gòu)為基于Web的企業(yè)應(yīng)用提供了優(yōu)秀的技術(shù)支持,基于J2EE平臺(tái)來(lái)開(kāi)發(fā)倉(cāng)庫(kù)管理系統(tǒng)是一種很好的選擇。本文基于J2EE規(guī)范設(shè)計(jì)的e-WarehouseMS系統(tǒng)具有較好的擴(kuò)展性和一定的通用性,對(duì)購(gòu)物超市及倉(cāng)儲(chǔ)企業(yè)的發(fā)展將起到一定的推進(jìn)作用。
1倉(cāng)庫(kù)管理系統(tǒng)需求分析
1.1需求規(guī)格說(shuō)明
(1)基本功能需求:在原有的EIS系統(tǒng)上建立一套靈活庫(kù)存管理和自動(dòng)采購(gòu)的模塊。實(shí)現(xiàn)系統(tǒng)內(nèi)部貨物庫(kù)存報(bào)警、自動(dòng)補(bǔ)貨的功能,向外部用戶(供貨商)提供查看庫(kù)存的接口。
(2)系統(tǒng)的要求:由于采用JAVA技術(shù)構(gòu)建,系統(tǒng)能夠運(yùn)行于通用的技術(shù)環(huán)境中,也能夠運(yùn)行于多種OS平臺(tái)上,具有友好的交互界面,系統(tǒng)易維護(hù),功能易擴(kuò)展。
1.2需求分析
(1)用例(Use Case)分析:采用UML中用例模型[1,2]來(lái)描述角色(Actor)所理解的系統(tǒng)功能。系統(tǒng)設(shè)計(jì)包含3個(gè)用例:供貨商管理、庫(kù)存管理、靈活自動(dòng)采購(gòu)。系統(tǒng)功能范圍的界定即系統(tǒng)邊界包含上述3個(gè)用例。角色用于描述與實(shí)體功能有關(guān)的外部實(shí)體,它可以是用戶,也可以是外部系統(tǒng),如這里的供應(yīng)商系統(tǒng)即是一個(gè)外部實(shí)體。該系統(tǒng)的角色包括由企業(yè)內(nèi)部人員按在系統(tǒng)中扮演的角色分類而成的供應(yīng)商管理人員、庫(kù)存管理人員、采購(gòu)管理人員、訪問(wèn)倉(cāng)庫(kù)系統(tǒng)的外部人員。
(2)用例詳細(xì)描述:①管理人員(不區(qū)分具體的角色)維護(hù)庫(kù)存貨物信息、設(shè)置各種庫(kù)存原料的報(bào)警線,并且維護(hù)供貨商信息、設(shè)置供貨商查看庫(kù)存的權(quán)限;②供貨商按照供貨質(zhì)量分成不同的級(jí)別,不同的供貨商級(jí)別具有不同的庫(kù)存參看權(quán)限,同時(shí)優(yōu)先向級(jí)別高的供貨商生成采購(gòu);③時(shí)間觸發(fā)器定時(shí)檢查庫(kù)存,對(duì)庫(kù)存量小于庫(kù)存報(bào)警線的庫(kù)存品種,生成采購(gòu)單并且按照設(shè)定向庫(kù)存采購(gòu)審批人員發(fā)送E-mail,通知其審批采購(gòu)單,或者直接向供貨商發(fā)送補(bǔ)貨采購(gòu)單。
2J2EE平臺(tái)上e-WarehouseMS系統(tǒng)的設(shè)計(jì)
2.1系統(tǒng)的J2EE結(jié)構(gòu)模式設(shè)計(jì)
系統(tǒng)遵循J2EE架構(gòu)[3,4]設(shè)計(jì)為客戶層、Web層、業(yè)務(wù)邏輯層和EIS層的四層架構(gòu)。客戶層向用戶提供操作界面和顯示信息;Web層負(fù)責(zé)處理客戶請(qǐng)求;業(yè)務(wù)邏輯層由EJB組件實(shí)現(xiàn);EIS層包括企業(yè)基礎(chǔ)建設(shè)系統(tǒng),如數(shù)據(jù)庫(kù)系統(tǒng)、原有的EIS和其他關(guān)聯(lián)企業(yè)的EIS。Web層基于Model 2(即MVC模式),采用一個(gè)免費(fèi)的開(kāi)源的WEB層的應(yīng)用框架Struts實(shí)現(xiàn),servlet處理數(shù)據(jù)存取和導(dǎo)航流,采用JSP處理實(shí)現(xiàn)[5,6]。這種應(yīng)用結(jié)構(gòu)比較容易擴(kuò)展。
2.2商業(yè)對(duì)象及商業(yè)邏輯設(shè)計(jì)
(1)e-WarehouseMS系統(tǒng)涉及的商業(yè)對(duì)象主要有:庫(kù)存(InventoryTb)、購(gòu)貨單(PurchaseTb)、購(gòu)貨單項(xiàng)(PurchaseItem)、供應(yīng)商(SupplierTb)、賬戶(AccountTb)、地址(AddressTb)、貨物(MerchandiseTb)。
(2)需要實(shí)現(xiàn)的商業(yè)邏輯主要有:庫(kù)存的錄入、庫(kù)存狀態(tài)分析、補(bǔ)貨量分析、缺庫(kù)貨物查看、生成及修改采購(gòu)單、生成及修改采購(gòu)單明細(xì)等。
2.3系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
系統(tǒng)總體構(gòu)件及其相互間的依賴關(guān)系如圖所示,構(gòu)件主要包含用戶界面包、業(yè)務(wù)邏輯包、持久化包和系統(tǒng)工具包。包設(shè)計(jì)的目標(biāo)是盡可能地減小組件或部件間的緊耦合[7]172。
(1)用戶界面包:為用戶訪問(wèn)系統(tǒng)提供界面,它提出操作請(qǐng)求,由業(yè)務(wù)邏輯包執(zhí)行實(shí)際操作。該包中應(yīng)用部件主要為JSP和Servlet,如系統(tǒng)登陸頁(yè)面Login.jsp。
(2)業(yè)務(wù)邏輯包:其主要功能是實(shí)現(xiàn)商業(yè)對(duì)象的業(yè)務(wù)邏輯,其中的對(duì)象是Session Bean,由于無(wú)須保持會(huì)話狀態(tài),所有的Session Bean基本上是Stateless類別。
(3)持久化包:實(shí)現(xiàn)商業(yè)對(duì)象的持久化,其中的對(duì)象主要是Entity Bean,并且這些Entity Bean都是BMP類型,因?yàn)锽MP類型的Entity Bean對(duì)容器更加依賴,不易移植。
(4)系統(tǒng)工具包:包含系統(tǒng)其他包要使用的服務(wù),如與供貨商消息系統(tǒng)交換消息、向?qū)徟藛T發(fā)送E-mail、根據(jù)采購(gòu)單對(duì)象生成相應(yīng)XML文檔及解析XML文檔為采購(gòu)對(duì)象等。
2.4采購(gòu)流程設(shè)計(jì)
e-WarehouseMS系統(tǒng)的一個(gè)重要工作流程是采購(gòu)流程。當(dāng)時(shí)間觸發(fā)器(觸發(fā)時(shí)間間隔由管理員設(shè)定)檢查到貨物的庫(kù)存量達(dá)到庫(kù)存報(bào)警線時(shí),會(huì)觸發(fā)采購(gòu):生成采購(gòu)請(qǐng)求單(可以選擇管理人員或自動(dòng)生成)發(fā)送到供貨商;供貨商對(duì)請(qǐng)求單處理后給出響應(yīng),如果供貨商缺貨,其可向其他供貨商發(fā)出采購(gòu)請(qǐng)求;系統(tǒng)根據(jù)供貨商的響應(yīng)消息對(duì)采購(gòu)請(qǐng)求單進(jìn)行確認(rèn)、修改和審批;最后將審批后的采購(gòu)單發(fā)送給供貨商,進(jìn)入發(fā)貨流程。
3系統(tǒng)實(shí)現(xiàn)中的關(guān)鍵技術(shù)
3.1倉(cāng)庫(kù)庫(kù)存管理
管理人員登陸到庫(kù)存管理界面BrowseInventoryTb.Jsp后,可以通過(guò)多種方式查看庫(kù)存,如可以按庫(kù)存貨物的供應(yīng)商、按低于最小庫(kù)存量、按貨物類別等。比如選擇查看低于最小庫(kù)存量方式,該JSP的請(qǐng)求通過(guò)Action調(diào)用InventoryTbMngEIB(Session Bean)的BrowseLowQuantity方法,該方法然后調(diào)用InventoryTbBMP(Entity Bean)的findLowQuantity(查看庫(kù)存)方法,得到庫(kù)存量低于庫(kù)存報(bào)警線的庫(kù)存貨物,最后將庫(kù)存信息轉(zhuǎn)發(fā)到相應(yīng)JSP頁(yè)面。如果管理人員想采購(gòu)某些貨物可以轉(zhuǎn)到生成采購(gòu)頁(yè)面,生成采購(gòu)單。

3.2生成采購(gòu)
采購(gòu)請(qǐng)求單的生成可以根據(jù)時(shí)間觸發(fā)器觸發(fā)庫(kù)存查看的結(jié)果,由自動(dòng)生成采購(gòu)頁(yè)面autocreatePuchasePage.jsp調(diào)用相應(yīng)對(duì)象實(shí)體的方法自動(dòng)生成,也可以由管理人員(采購(gòu)人員)根據(jù)要采購(gòu)的貨物信息,在createPuchasePage.jsp頁(yè)面中填寫(xiě)采購(gòu)量及選擇供貨商,然后就可以創(chuàng)建采購(gòu)單,供貨商相同的采購(gòu)單生成一張采購(gòu)請(qǐng)求單。采購(gòu)請(qǐng)求單生成后調(diào)用系統(tǒng)工具包中的toXML方法生成采購(gòu)單的XML文檔,再調(diào)用sendMessage方法將其發(fā)送給供應(yīng)商。采購(gòu)人員可以根據(jù)供貨商系統(tǒng)的回應(yīng)修改或者刪除采購(gòu)請(qǐng)求單。
3.3Entity Bean實(shí)現(xiàn)
系統(tǒng)主要包括InventoryTbBMP、MerchandiseTbBMP、AddressTbBMP、PurchaseTbBMP、PurchaseItemTbBMP、SupplierTbBMP、AccountTbbmp等Entity Bean。
以InventoryTbBMP為例,一個(gè)Entity Bean由四個(gè)類組成:InventoryTbPK.class是數(shù)據(jù)表InventoryTb主鍵的對(duì)象表示;InventoryTb.class是InventoryTbBMP的Remote接口類;InventoryTbHome.class是InventoryTbBMP的Home接口類;InventoryTbBMP.class是InventoryTbBMP的Bean體,它實(shí)現(xiàn)Home接口中的create、remove、findLowQuantity、findPK等方法,并實(shí)現(xiàn)Remote接口中的getQuantity等方法。
3.4消息傳輸實(shí)現(xiàn)
3.4.1消息格式
e-WarehouseMS系統(tǒng)和供應(yīng)商之間的消息格式采用基于cXML1.1(Commerce eXtensible Markup Language)標(biāo)準(zhǔn)的XML文檔[8]。系統(tǒng)包括OrderRequest.xml(系統(tǒng)對(duì)供應(yīng)商的采購(gòu)請(qǐng)求消息)和OrderResponse.xml(供應(yīng)商對(duì)系統(tǒng)采購(gòu)請(qǐng)求的響應(yīng)消息)兩種消息。第2種消息內(nèi)容相對(duì)簡(jiǎn)單,其定義的關(guān)鍵部分如下:
<cXMLversion=\"1.1.006\"xml:lang=\"en-US\"payloadID=\"???\"...>
<Response> /*采購(gòu)請(qǐng)求單確認(rèn)信息的標(biāo)簽*/
<Status code=\"xxx\" text=\"OK\"/>
</Response>
</cXML>
3.4.2消息傳輸?shù)腏MS實(shí)現(xiàn)
JMS支持點(diǎn)到點(diǎn)(Point-to-Point)消息和發(fā)布/訂閱(public-subscript)消息模型的消息[7]216。根據(jù)需求,e-WarehouseMS系統(tǒng)采用點(diǎn)到點(diǎn)模型比較適合。消息系統(tǒng)采用Weblogic Server應(yīng)用服務(wù)器中集成的JMS。
(1)消息發(fā)送實(shí)現(xiàn)
消息發(fā)送是系統(tǒng)將生成的采購(gòu)請(qǐng)求單OrderRequest.xml文檔發(fā)送給供應(yīng)商,由系統(tǒng)工具包的msgSend.class類實(shí)現(xiàn),msgSend.java中關(guān)鍵是sendMessage方法,其主要代碼為:
Context context=getInitialContext(url.tostring()); /*url是消息接收方的端口地址對(duì)象*/
Queue queue=(Queue)context.lookup(stringQueue); /*stringQueue是消息隊(duì)列名*/
QueueConnectionFactory queueconnectionfactory=
(QueueConnectionFactory)context.lookup(JMS_FACTORY);
QueueConnection queueconnection=queueconnectionfactory.createQueueConnection();
QueueSession queuesession=/*創(chuàng)建一個(gè)消息對(duì)話*/
queueconnection.createQueueSession(1, Session.AUTO_ACKNOWLEDGE);
QueueSender queuesender=queuesession.createSender(queue); /*創(chuàng)建QueueSender*/
TextMessage textmessage=queuesession.createTextMessage();
textmessage.setText(stringXML); /*添加內(nèi)容(XML文檔)到消息中*/
Queuesender.send(textmessage); /*發(fā)送消息*/
(2)消息接收實(shí)現(xiàn)
也由系統(tǒng)工具包的msgReceive.class類實(shí)現(xiàn),與消息發(fā)送的實(shí)現(xiàn)類似,msgReceive.java中receiveMessage方法的主要代碼為:
QueueReceiver queuereceiver
=queuesession.createReceiver(queue); /*創(chuàng)建QueueReceiver*/
textmessage=(TextMessage)queuereceiver.receive(); /*接收TextMessage*/
String stringXML=textmessage.getText(); /*提取textmessage中的XML文檔*/
(3)XML解析實(shí)現(xiàn)[9]
包括供應(yīng)商對(duì)采購(gòu)單的XML文檔和對(duì)采購(gòu)單響應(yīng)的XML文檔的解析。由系統(tǒng)工具包中的parserOrderRequest.class和parserOrderResponse.class實(shí)現(xiàn)。采購(gòu)單響應(yīng)的XML文檔結(jié)構(gòu)簡(jiǎn)單,解析相對(duì)簡(jiǎn)單。parserOrderRequest.java的主要方法如下:
private Stack tagStack=new Stack(); /*標(biāo)記的堆棧,存放解析提取的信息*/
OrderRequest or=new OrderRequest(); /*or為解析后的采購(gòu)單對(duì)象*/
public void startDocument(); /*對(duì)XML文檔開(kāi)始事件的處理*/
public void endDocument(); /*實(shí)現(xiàn)XML文檔結(jié)束事件的處理*/
public void startElement(); /*對(duì)標(biāo)記開(kāi)始事件的處理*/
public void endElement(); /*實(shí)現(xiàn)對(duì)標(biāo)記結(jié)束事件的處理*/
public void characters(); /*實(shí)現(xiàn)對(duì)標(biāo)記文本的解析*/
public static OrderRequest getOrderRequest(); /*解析并得到OrderRequest對(duì)象or */
其中g(shù)etOrderRequest方法的主要代碼如下:
parserOrderRequest por=new parserOrderRequest();
Parser parser=ParserFactory.makeParser(\"xml.parsers.SAXParser\"); /*創(chuàng)建解析實(shí)例*/
parser.setDocumentHandler(por); /*設(shè)置文檔處理器供解析時(shí)回調(diào)*/
parser.parser(sXml); /*開(kāi)始解析*/
return por.or; /*返回解析XML文檔得到的OrderRequest對(duì)象*/
4總結(jié)及下一步的工作
本文在J2EE平臺(tái)上構(gòu)建的e-WarehouseMS系統(tǒng)是用Jbuilder8.0開(kāi)發(fā)的,應(yīng)用服務(wù)器為Weblogic7.0,數(shù)據(jù)庫(kù)是Oracle9i,具有速度快、穩(wěn)定、擴(kuò)展性好、易維護(hù)的特點(diǎn)。e-WarehouseMS系統(tǒng)的應(yīng)用表明基于J2EE規(guī)范的四層結(jié)構(gòu)能很好地適應(yīng)Web開(kāi)發(fā)的需要。在計(jì)算機(jī)技術(shù)飛速發(fā)展的今天,基于J2EE平臺(tái)上的應(yīng)用必將得到進(jìn)一步的研究和完善,如EJB3.0規(guī)范的推出,已經(jīng)越來(lái)越體現(xiàn)出J2EE的優(yōu)勢(shì)。
下一步的工作是數(shù)據(jù)倉(cāng)庫(kù)和決策支持系統(tǒng)的研究與構(gòu)建,以更好地為購(gòu)物超市企業(yè)提供科學(xué)的數(shù)據(jù)管理與效益分析,提供合理的投資與風(fēng)險(xiǎn)控制決策。
參考文獻(xiàn):
[1] 李高林,姜昱明. 在基于JSP的電子商務(wù)應(yīng)用中利用UML建模與開(kāi)發(fā)技術(shù)[J]. 計(jì)算機(jī)應(yīng)用研究,2004,21(5):121-122.
[2] 王映. 基于UML的J2EE體系結(jié)構(gòu)系統(tǒng)建模[J]. 江南大學(xué)學(xué)報(bào):自然科學(xué)版,2003,2(5):462-465.
[3] 劉勇,李臘元. 基于J2EE的企業(yè)級(jí)系統(tǒng)的研究與應(yīng)用[J]. 武漢理工大學(xué)學(xué)報(bào):交通科學(xué)與工程版,2004,28(1):26-29.
[4] 姚俊,程耕國(guó),等. 基于J2EE的分布式體系及應(yīng)用[J]. 武漢科技大學(xué)學(xué)報(bào):自然科學(xué)版,2003,26(4):393-394.
[5] 寇毅,吳力文. 基于MVC設(shè)計(jì)模式的Struts框架的應(yīng)用方法[J]. 計(jì)算機(jī)應(yīng)用,2003,23(11):91-93.
[6] Ted Husteel, Cedric Dumoulin, David Wiwerfeldt. Struts in Action[M]. Manning Publication co, 2001.
[7] Gregory Nyberg, Robert Patrick. 精通BEA WebLogic Server——構(gòu)建與部署J2EE應(yīng)用的最佳策略[M]. 王松,徐以新,等譯. 北京:電子工業(yè)出版社,2004.
[8] 陳安娜,曹陽(yáng),等. 基于cXML標(biāo)準(zhǔn)的電子商務(wù)交易系統(tǒng)的研究與實(shí)現(xiàn)[J]. 武漢大學(xué)學(xué)報(bào):理學(xué)版,2002,48(5):613-616.
[9] 許繼元,楊翠娥,等. 基于J2EE和XML技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)信息的提取和解析[J]. 儀器儀表用戶,2004,11(1):93-94.