1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      用J2ME開發(fā)企業(yè)級無線應(yīng)用

      更新時間: 2007-05-16 13:53:14來源: 粵嵌教育瀏覽量:825


        系統(tǒng)需求

        現(xiàn)場銷售人員在與客戶洽談時,需要及時地了解客戶和聯(lián)系人的詳細(xì)資料,管理相關(guān)的商業(yè)機(jī)會,清楚公司產(chǎn)品的報價、存貨等信息,能夠方便地進(jìn)行查詢(多條件)、創(chuàng)建、更新和刪除(權(quán)限允許)等操作,并且能夠把相關(guān)數(shù)據(jù)下載到手機(jī)當(dāng)中。另外,現(xiàn)場服務(wù)工程師需要隨時掌握客戶的服務(wù)請求及其客戶和聯(lián)系人信息,以便做出迅速的反映,協(xié)調(diào)處理好該服務(wù)請求。由于客戶、聯(lián)系人資料等需要填寫較多的數(shù)據(jù),系統(tǒng)應(yīng)當(dāng)支持離線和在線兩種工作方式,用戶可以先在離線方式下創(chuàng)建數(shù)據(jù)信息,保存到手機(jī)當(dāng)中,再上傳數(shù)據(jù),進(jìn)行同步,從而節(jié)省費(fèi)用。開發(fā)工具我選擇IBM WebSphere Studio.

        系統(tǒng)設(shè)計與實(shí)現(xiàn)

        考慮到系統(tǒng)的安全性、擴(kuò)展性和可維護(hù)性,我決定在J2EE平臺下開發(fā)服務(wù)器端程序,這樣做系統(tǒng)復(fù)雜度低、成本低、系統(tǒng)性能優(yōu)越。系統(tǒng)客戶端是運(yùn)行在Java手機(jī)上的,因此必須充分考慮這一特點(diǎn),并在開發(fā)中加以應(yīng)用。系統(tǒng)設(shè)計的目標(biāo)是分開業(yè)務(wù)邏輯和表示層,它是一個典型的四層分布式MVC應(yīng)用體系架構(gòu),下面將對其設(shè)計思想和實(shí)現(xiàn)原理進(jìn)行詳細(xì)闡述。

        客戶端(Client Tier)

        客戶端獲得用戶請求后提交給遠(yuǎn)程服務(wù)器,得到結(jié)果后加以表現(xiàn)。我選擇在J2ME(CLDC+MIDP)平臺上開發(fā)客戶端程序。由于MIDlet程序開發(fā)具有內(nèi)存小、界面簡單、有限的運(yùn)算能力和網(wǎng)絡(luò)性能等特點(diǎn),需要重點(diǎn)設(shè)計以下幾個方面:

        1.與Web服務(wù)器之間的通信

        J2ME支持打開網(wǎng)絡(luò)連接、傳送數(shù)據(jù)、訪問遠(yuǎn)程服務(wù)器資源。首先,用戶在離線方式下設(shè)置系統(tǒng)參數(shù),指定本公司W(wǎng)eb服務(wù)器的IP地址、端口和Web根目錄,選擇工作方式(在線或者離線)。隨后,程序?qū)蓷l相關(guān)信息寫進(jìn)本地數(shù)據(jù)庫,一條記錄Web服務(wù)器地址,另一條記錄工作方式。每當(dāng)系統(tǒng)啟動或者切換工作方式時加載,這樣可以使得MIDlet工作在適當(dāng)?shù)臓顟B(tài)。MIDlet編程支持HTTP網(wǎng)絡(luò)連接,代碼如下:

      HttpConnection conn = (HttpConnection)Connector.open(url);

        這樣就在客戶端與Web服務(wù)器之間建立了HTTP連接,其中url存儲了請求參數(shù)信息,比如:

      url = "http://www.mcrm.com:8000/CRMRoot/custCreateAlias?id=001&name=..."

        Web服務(wù)器中相應(yīng)的Servlet將調(diào)用doGet()方法處理請求,返回響應(yīng),從而把業(yè)務(wù)邏輯的處理交給服務(wù)器端,達(dá)到“瘦”客戶端的設(shè)計目標(biāo)。建好HTTP連接以后,就可以方便地操作數(shù)據(jù)流,進(jìn)行數(shù)據(jù)讀寫了,代碼如下:

      InputStream in = conn.openInputStream();
      int data;
      while(data=in.read()!=0){...} ...

        需要注意的是,有的手機(jī)對中文的支持還不算很完善,其中有些地方需要進(jìn)行編碼轉(zhuǎn)換。

        客戶端編程的重點(diǎn)在于準(zhǔn)確地提交用戶請求參數(shù)、創(chuàng)建和查詢客戶信息、聯(lián)系人信息、商業(yè)機(jī)會和服務(wù)請求,并可對查詢到的結(jié)果進(jìn)行更新、刪除和下載。實(shí)現(xiàn)時,類CRMCustomer、類CRMLinkman、類CRMOpportunity、類CRMService封裝了這些方法;類custSearch、類linkSearch、類oppoSearch、類servSearch提供了查詢的界面;類CRMViewProduct實(shí)現(xiàn)了查看產(chǎn)品信息的功能。它們的實(shí)現(xiàn)手段相同,都是通過生成并提交存儲請求參數(shù)信息的url,打開HTTP連接,請求服務(wù)響應(yīng)來達(dá)到目的。]

                           圖1 移動客戶支持管理系統(tǒng)體系架構(gòu)簡圖


        2.本地數(shù)據(jù)庫操作

        MIDP(Mobile Information Device Profile)支持對持久數(shù)據(jù)的存儲,J2ME記錄管理系統(tǒng) ( RMS )允許數(shù)據(jù)流被儲存并在一個記錄基礎(chǔ)上訪問數(shù)據(jù),由應(yīng)用程序開發(fā)者把每個記錄解析到字段水平。系統(tǒng)需要存儲的是包含用戶請求參數(shù)信息的URL,從第三條記錄開始讀寫(前兩條已做系統(tǒng)參數(shù)用)。調(diào)用J2ME中類RecordStore的getRecord(int recordId)、addRecord(byte[] data, int offset, int numBytes)方法進(jìn)行基本的讀、寫操作,并以“&”為標(biāo)志符解析數(shù)據(jù)記錄url,得到名/值對。系統(tǒng)把整個本地數(shù)據(jù)庫操作封裝在類CRMdb當(dāng)中,這樣,這些操作就可重用。

        3.XML解析

        XML(Extensible Markup Language)是一種獨(dú)立于系統(tǒng)的表達(dá)數(shù)據(jù)信息的標(biāo)記語言,現(xiàn)已成為網(wǎng)絡(luò)系統(tǒng)中通用的數(shù)據(jù)交換格式。本系統(tǒng)采用XML技術(shù)進(jìn)行數(shù)據(jù)交換,利用它的分級結(jié)構(gòu),很容易訪問到所需的數(shù)據(jù)信息。這就意味著想要取得遠(yuǎn)程服務(wù)器端XML文檔中的數(shù)據(jù)信息,MIDlet編程就必須支持XML解析技術(shù)。從網(wǎng)上不難得到J2ME端的XML解析器,本系統(tǒng)采用的是NanoXML,它是一種非確認(rèn)(non-validating)、單步(single-step)解析器。NanoXML解析整個XML文檔,并把它轉(zhuǎn)換成一棵元素樹(如圖2),可以通過調(diào)用方法getChildren、getTagName、getContents等來遍歷整棵樹,得到數(shù)據(jù)信息。

                          圖2 XML文件和相對應(yīng)的樹型文件模型


        表示層(Web Tier)

        Servlets和JavaBean構(gòu)成了表示層。這是一種控制結(jié)構(gòu),減低了視圖與模型之間的耦合性。當(dāng)Servlet響應(yīng)到一個HTTP GET請求時,doGet()方法被service()方法的默認(rèn)實(shí)現(xiàn)所調(diào)用,并把request對象和response對象作為參數(shù)傳給該函數(shù)。整個程序覆蓋了doGet()方法,它們所做主要工作是創(chuàng)建JavaBean實(shí)例,傳遞request對象,調(diào)用bean方法,取得存放于Bean中的數(shù)據(jù),返回結(jié)果(XML文檔)。JavaBean封裝了更為復(fù)雜的業(yè)務(wù)邏輯,可以調(diào)用EJB方法執(zhí)行各種數(shù)據(jù)存取的事務(wù)。JavaBean是一種可重用組件,提高代碼復(fù)用性,加快了軟件開發(fā)過程。如上所述,系統(tǒng)利用JAXP和W3C提供的訪問XML的接口DOM來處理XML文檔。代碼如下所示:

      <custList>
      <matchedCust>7</matchedCust>
      <customer>
      <id>Cust_001</id>
      <name>Oliver</name>
      </customer>
      </custList>

        業(yè)務(wù)邏輯層(Business Tier

        EJB container提供了一種系統(tǒng)級服務(wù),開發(fā)者只需要專注于業(yè)務(wù)邏輯處理即可。系統(tǒng)運(yùn)用實(shí)體Bean封裝數(shù)據(jù)對象,建立與數(shù)據(jù)庫間的映射。會話Bean封裝了業(yè)務(wù)邏輯,該系統(tǒng)實(shí)現(xiàn)的會話Bean是無狀態(tài)的。業(yè)務(wù)邏輯層結(jié)構(gòu)如圖3所示。



      圖3 業(yè)務(wù)邏輯層結(jié)構(gòu)設(shè)計

        EJBs功能如表1。
      表1
      包ejb.entity 封裝了客戶、聯(lián)系人、產(chǎn)品、商業(yè)機(jī)會及客戶服務(wù)請求等數(shù)據(jù)信息,并提供Home、Remote訪問接口。
      包ejb.session 封裝了系統(tǒng)所需的業(yè)務(wù)邏輯和數(shù)據(jù)操作,包括添加、查詢、更新和刪除各項信息,并提供Home、Remote訪問接口,也提供了一些方便數(shù)據(jù)操作的輔助類。

        數(shù)據(jù)庫(Backend Tier)

        利用Sun公司提供的JDBC API可以很方便地操作關(guān)系型數(shù)據(jù)庫(RDBMS),如上所述,實(shí)體Bean要與數(shù)據(jù)庫表建立一種良好的映射關(guān)系。設(shè)計數(shù)據(jù)庫時要注意主鍵值,它是惟一標(biāo)識。本系統(tǒng)數(shù)據(jù)庫共有五張表,見表2。

      表2
      customer 存儲客戶信息,設(shè)name,location,honor等字段,主鍵id。
      linkman 存儲聯(lián)系人信息,設(shè)birthday,custid,custname等字段,主鍵id。
      opportunity 存儲商業(yè)機(jī)會信息,設(shè)description,moment,status等字段,主鍵id。
      product 存儲產(chǎn)品信息,設(shè)style,price,unit等字段,主鍵id。
      service 存儲客戶服務(wù)請求信息,設(shè)product,contact等字段,主鍵id。

        現(xiàn)在,以“創(chuàng)建客戶信息”為用例,察看整個系統(tǒng)各個模塊間的協(xié)作與實(shí)現(xiàn)。

      請求參數(shù)輸入界面: CRMCustomer.java
      響應(yīng)的servlet: custCreate.java
      處理請求的JavaBean: CRMController.java
      調(diào)用的會話bean: CRMBean.java
      實(shí)體bean: CustBean.java
      數(shù)據(jù)庫表: customer
      顯示結(jié)果: CRMCustomer.java

        在整個開發(fā)周期中,需不斷精化和細(xì)化用戶需求,改進(jìn)用例與建模,迭代構(gòu)造和測試,使系統(tǒng)趨于完善。

        小結(jié)

        利用Java無線應(yīng)用技術(shù),結(jié)合J2ME和J2EE平臺,可以設(shè)計并開發(fā)出健壯、高效的企業(yè)級無線應(yīng)用程序,幫助企業(yè)提升經(jīng)濟(jì)效益。現(xiàn)在,越來越多的電信廠商生產(chǎn)出性能優(yōu)越的Java手機(jī),而且在電信運(yùn)營商、電信設(shè)備制造商和應(yīng)用程序開發(fā)者之間存在著一種較好的盈利模式。我們相信Java無線應(yīng)用會有更好的發(fā)展。




      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲成AV人在线观看影院 | 亚洲午夜精品国产自 | 亚洲欧美日韩一区精品中文字幕 | 亚洲一区二区人妖 | 亚洲精品萝福利莉在线 | 亚洲国产天堂久久综合网站 |