[摘 要] 從企業(yè)移動業(yè)務(wù)拓展角度出發(fā),介紹了一種基于JavaME與Web Services的系統(tǒng)架構(gòu),實現(xiàn)了服務(wù)端信息點播服務(wù)的構(gòu)建與發(fā)布機制,并參照J(rèn)SR 172( JavaME Web Services Specification 172),研發(fā)了支持遠程Web服務(wù)訪問的移動客戶端應(yīng)用程序,以期為企業(yè)構(gòu)建移動信息服務(wù)平臺提供一種現(xiàn)實、可行的思路。
[關(guān)鍵詞] 企業(yè)移動應(yīng)用; JavaME;Web服務(wù); JSR 172
[中圖分類號]F270.7;TP311[文獻標(biāo)識碼]A[文章編號]1673-0194(2009)01-0062-03
1 引 言
隨著移動通信技術(shù)的高速發(fā)展,以及移動設(shè)備的廣泛普及,以手機為代表的移動產(chǎn)品軟硬件環(huán)境也變得紛繁復(fù)雜,如手機操作系統(tǒng)就包括Symbian、Palm OS、Linux、Windows Mobile等,使得特定移動平臺開發(fā)的解決方案在部署時存在移植性問題,只能局限于小范圍應(yīng)用。同時,由于廠商和開發(fā)者對企業(yè)級應(yīng)用的關(guān)注度日益提高,探索“如何使企業(yè)服務(wù)覆蓋到移動客戶端,而不僅僅是Web瀏覽器與PC客戶端”,以及“如何使移動客戶端接入原有企業(yè)服務(wù)的成本最低”等問題就顯得尤為必要。據(jù)一份調(diào)查報告顯示,現(xiàn)在每出廠100臺移動電話中,有87臺是支持Java的[1]。因此,基于Java平臺在移動電話上的廣泛部署,以及Java應(yīng)用程序“一次編寫,到處運行”的優(yōu)點,開發(fā)支持Web服務(wù)的移動客戶端應(yīng)用程序,連通企業(yè)提供的Web服務(wù),有助于降低企業(yè)移動信息服務(wù)系統(tǒng)開發(fā)成本,提高信息資源利用率。
2JavaME平臺上的Web服務(wù)
2. 1系統(tǒng)架構(gòu)
JSR 172規(guī)定了標(biāo)準(zhǔn)化客戶端技術(shù),允許 JavaME應(yīng)用程序在典型Web服務(wù)架構(gòu)上使用遠程服務(wù),如圖1所示。
系統(tǒng)采用MVC軟件設(shè)計模式,由用戶層、表示層、應(yīng)用層和數(shù)據(jù)層組成的4層客戶服務(wù)器體系結(jié)構(gòu),很好地表達用戶與系統(tǒng)的交互過程,有利于軟件的工程化管理,具有很好的擴展性與靈活性。該Web服務(wù)架構(gòu)由3個元素構(gòu)成:①WSA(Web Services Architecture)無線設(shè)備上的網(wǎng)絡(luò)感知應(yīng)用程序。該應(yīng)用程序包括使用JSR 172運行庫與網(wǎng)絡(luò)進行通信的JSR 172存根。②無線網(wǎng)絡(luò)和Internet以及對應(yīng)的通信和數(shù)據(jù)編碼協(xié)議,包括二進制協(xié)議、HTTP 以及 SOAP/XML。③Web 服務(wù)器,扮演服務(wù)提供者的角色,通常在一個或多個防火墻和代理網(wǎng)關(guān)后面。Web 服務(wù)器通常提供對專用網(wǎng)絡(luò)上后端應(yīng)用程序和服務(wù)器的訪問[2]。
2. 2JavaME對Web服務(wù)的遠程訪問
JSR 172的發(fā)布,把Web服務(wù)擴展到了Java ME,通過定義一個XML解析器,彌補Java ME不能解析XML的不足?;贘SR 172的應(yīng)用程序本身是一個基于移動信息設(shè)備配置文件(Mobile Information Device Profile,MIDP)或個人基礎(chǔ)配置文件(Personal Basis Profile,PBP)的智能客戶機,不僅可以使用JAXP子集API來處理XML文檔,而且還可以使用JAX-RPC子集API來實現(xiàn)Web服務(wù)。對于像手機、PDA這樣的移動設(shè)備,應(yīng)用程序和JSR 172存根通常駐留在設(shè)備內(nèi)存中,而所有JSR 172元素連同基礎(chǔ)配置文件和配置一起嵌入到設(shè)備中。
JavaME客戶端實現(xiàn)過程包括獲取WSDL文檔、生成JAX-RPC存根類、通過該存根類實現(xiàn)對Web服務(wù)的遠程訪問,具體步驟如圖2所示。
3 實例分析
本文研究以移動信息點播服務(wù)為例,將移動客戶端MIDlet(是指運行在MIDP設(shè)備上的應(yīng)用程序)分為主程序與信息點播服務(wù)兩大模塊。其中,主程序模塊負(fù)責(zé)同Web服務(wù)器的數(shù)據(jù)交互,獲取服務(wù)器傳送的xml文件并解析。信息點播服務(wù)模塊負(fù)責(zé)顯示主程序模塊所解析的具體信息。
實現(xiàn)過程主要包括客戶端界面實現(xiàn)與服務(wù)端Web服務(wù)部署兩部分。客戶端基于Java ME技術(shù),服務(wù)端采用數(shù)據(jù)源和Web Services技術(shù)提供服務(wù)。
3. 1服務(wù)端服務(wù)創(chuàng)建與發(fā)布
服務(wù)端的服務(wù)是通過Web Services技術(shù)提供服務(wù)。部署Web服務(wù)時,采用Resin服務(wù)器,選用Glue來配置Web Services環(huán)境,實現(xiàn)客戶端與服務(wù)器端連接、通信以及數(shù)據(jù)交互。
(1)在服務(wù)端創(chuàng)建3個類:DataSourceSupport類、OrderNews類和ShowNews類,為客戶端提供服務(wù)。其中,DataSourceSupport類用于提供數(shù)據(jù)源的連接;ShowNews類則是根據(jù)用戶選擇的信息標(biāo)題,返回具體信息內(nèi)容;OrderNews類是根據(jù)用戶選擇的信息查看類型檢索數(shù)據(jù)庫,并返回檢索到的信息標(biāo)題,該類的核心代碼如下:
public class OrderNews{//檢索信息標(biāo)題
private DataSource ds;
public OrderNews() {
//定義DataSourceSupport類對象建立數(shù)據(jù)庫連接
DataSourceSupport dss = DataSourceSupport.getInstance();
ds = dss.getDataSource();
}
public String[] getTitle(String k,String date) {
//根據(jù)消息類型檢索數(shù)據(jù)庫,并返回結(jié)果
String sql = 1;
String key = k;
sql = \"select * from newsinfo where title like ' %\" + key + \"%' \";
if (sql == 1) {
return new String[0];
} else {
//調(diào)用searchBySql()函數(shù)執(zhí)行sql語句,并返回結(jié)果
return searchBySql(sql);
}
……
}
(2)創(chuàng)建兩個與提供Web Services服務(wù)類名一致的xml文件OrderNews.xml和ShowNews.xml,用于描述提供的服務(wù)。OrderNews.xml文件的主要代碼如下:
其中,