許珩
【摘要】本文針對(duì)移動(dòng)電子商務(wù)應(yīng)用其中重要一種的PIM(Personal information management)個(gè)人信息管理應(yīng)用,設(shè)計(jì)出了基于J2ME的手機(jī)客戶端、WEB服務(wù)器和后臺(tái)數(shù)據(jù)庫(kù)三層框架結(jié)構(gòu)的移動(dòng)PIM系統(tǒng),并對(duì)核心SyncML數(shù)據(jù)同步協(xié)議進(jìn)行了詳細(xì)的分析,研究了在J2ME平臺(tái)下實(shí)現(xiàn)SyncML中定義的慢同步及雙向增量同步邏輯的解決方案。
【關(guān)鍵詞】移動(dòng)PlM系統(tǒng) J2ME SyncML協(xié)議
【中圖分類號(hào)】TN929.53 【文獻(xiàn)標(biāo)識(shí)碼】A 【文章編號(hào)】1672-5158(2013)04-0153-02
一、引言
作為移動(dòng)電子商務(wù)應(yīng)用中重要一種的PIM(Personal informationmanagement)個(gè)人信息管理應(yīng)用,是受到廣泛關(guān)注的一個(gè)新興領(lǐng)域。移動(dòng)終端PIM是指用戶將移動(dòng)終端中的信息(通訊錄,日程安排等)以無(wú)線或者有線方式與電腦或者PIM服務(wù)器保持一致,并能使用多種終端、多種接人手段查詢和管理信息。由于移動(dòng)終端操作系統(tǒng)以及各系統(tǒng)HM平臺(tái)接口的多樣性以及PIM協(xié)議的私有性使得PIM服務(wù)往往只能針對(duì)某個(gè)單一手機(jī)操作系統(tǒng),PIM服務(wù)的通用性和可擴(kuò)展性受到了移動(dòng)終端系統(tǒng)軟硬件條件的極大的限制。
本文研究了基于J2ME平臺(tái)的HM相關(guān)技術(shù),設(shè)計(jì)出了基于J2ME的手機(jī)客戶端、WEB服務(wù)器和后臺(tái)數(shù)據(jù)庫(kù)三層框架結(jié)構(gòu),并主要對(duì)核心SyncML數(shù)據(jù)同步協(xié)議進(jìn)行了詳細(xì)的分析,研究了在J2ME平臺(tái)下實(shí)現(xiàn)SyncML中定義的慢同步及雙向增量同步邏輯的解決方案,在考慮了移動(dòng)設(shè)備資源缺乏的情況下,實(shí)現(xiàn)了J2ME平臺(tái)移動(dòng)PIM客戶端,初步達(dá)到了移動(dòng)應(yīng)用程序的易用性和系統(tǒng)的可擴(kuò)展性的目標(biāo)。經(jīng)過(guò)深入研究和完善,本文采用MVC設(shè)計(jì)模式,研究并實(shí)現(xiàn)了一個(gè)功能穩(wěn)定、運(yùn)行可靠的J2ME平臺(tái)下的PIM個(gè)人信息管理系統(tǒng),符合移動(dòng)電子商務(wù)的應(yīng)用環(huán)境,在支持KVM的移動(dòng)終端平臺(tái)上開(kāi)發(fā)的移動(dòng)PIM系統(tǒng)使得通用性和擴(kuò)展性問(wèn)題在解決方案的性能上得到了進(jìn)一步的提高。
二、系統(tǒng)框架以及重要設(shè)計(jì)
(一)系統(tǒng)總體框架
模型一視圖一控制器(MVC)一種軟件設(shè)計(jì)模式,最近幾年逐漸成為Sun公司J2EE平臺(tái)的設(shè)計(jì)模式,MVC強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開(kāi)。MVC應(yīng)用程序分成三個(gè)核心部件:模型(Model)、視圖(View)、控制器(Control)。MVC標(biāo)準(zhǔn)模式經(jīng)典的應(yīng)用就是將JSP+Servlet+Javabean+JDBC技術(shù)編寫CGI程序,并且用于數(shù)據(jù)動(dòng)態(tài)加載以及頁(yè)面響應(yīng)。它們各自處理自己的任務(wù)。視圖是移動(dòng)終端與用戶交互的界面。對(duì)于舊式的Web應(yīng)用程序來(lái)說(shuō),視圖完全是由HTML元素組成的界面,隨著新的技術(shù)已層出不窮,在新式的Web應(yīng)用程序中,雖然HTML依舊在視圖中扮演著重要的角色,但是諸如MacromediaFlash,XHTML,XML/XSL,WML等一些標(biāo)識(shí)語(yǔ)言以及Web services的出現(xiàn),HTML以及不能滿足Web應(yīng)用的發(fā)展。MVC的一大優(yōu)點(diǎn)是它能為應(yīng)用程序處理很多不同的視圖。在視圖中其實(shí)沒(méi)有真正的處理發(fā)生,作為視圖來(lái)講,它只是作為一種輸出數(shù)據(jù)并且允許用戶操縱的方式,不管這些數(shù)據(jù)是聯(lián)機(jī)存儲(chǔ)的還是一個(gè)通信錄或者日程列表。
PIM移動(dòng)終端信息管理系統(tǒng)采用內(nèi)嵌式的程序設(shè)計(jì),集成在移動(dòng)終端的操作系統(tǒng)中,移動(dòng)終端用戶登錄平臺(tái)系統(tǒng)后,通過(guò)3G網(wǎng)絡(luò)訪問(wèn)相應(yīng)WEB服務(wù)器來(lái)實(shí)現(xiàn)移動(dòng)商務(wù)信息管理功能,獲取WEB服務(wù),改變了過(guò)去僅依靠WAP或短信動(dòng)通信技術(shù),使得移動(dòng)終端用戶不受一般電子商務(wù)的各種技術(shù)限制,能夠直接使用移動(dòng)終端平臺(tái)進(jìn)行通信錄管理、日志管理、獲得PIM同步服務(wù)、移動(dòng)終端交換電子名片,應(yīng)用等操作,利用高速無(wú)線網(wǎng)絡(luò)的帶寬優(yōu)勢(shì),選擇等級(jí)不同的加密登陸方式,獲取3G時(shí)代高速移動(dòng)PIM服務(wù)。整個(gè)系統(tǒng)在網(wǎng)絡(luò)傳輸過(guò)程中采用了系統(tǒng)要求的Basic64以及MD5算法進(jìn)行加密,保證了個(gè)人信息的安全。同時(shí),系統(tǒng)平臺(tái)采用的J2ME技術(shù)開(kāi)發(fā),保證了系統(tǒng)穩(wěn)定性好,界面友好,操作人性化,易用性好,管理安全等特性。平臺(tái)總結(jié)構(gòu)圖1如下:
從邏輯構(gòu)成上講,PIM系統(tǒng)包括三個(gè)部分:服務(wù)器端,移動(dòng)終端,數(shù)據(jù)庫(kù)端。
服務(wù)器端:服務(wù)器用于實(shí)現(xiàn)移動(dòng)個(gè)人信息管理系統(tǒng)的應(yīng)用功能,并且也為移動(dòng)終端提供個(gè)人數(shù)據(jù)同步服務(wù)和封裝管理功能的狀態(tài),并且為MIDlet提供系統(tǒng)訪問(wèn)的接口和方法,以及管理信息的途徑。Tomcat作為一個(gè)開(kāi)源的servlet容器,是由JAVA進(jìn)行編寫的并能夠被不做改變得移植到不同架構(gòu)、OS平臺(tái)上,Tomcat服務(wù)器及其應(yīng)用程序符合JSP規(guī)范,能夠完整實(shí)現(xiàn)servlet J2ME PIM系統(tǒng)應(yīng)用開(kāi)發(fā)設(shè)計(jì)。
移動(dòng)終端:對(duì)于具備不同手機(jī)軟硬件特性,但是支持JVM虛擬機(jī)的不同移動(dòng)終端設(shè)備來(lái)說(shuō),采用J2ME技術(shù)能夠使應(yīng)用程序MIDlet在各種手機(jī)以及PDA上進(jìn)行移植和運(yùn)行,并以此屏蔽掉各移動(dòng)終端軟硬件的差異性。MIDP2.0提供高層用戶界面決定PIM終端數(shù)據(jù)界面的展示方式,RMS接口提供數(shù)據(jù)的持續(xù)性保存以及GCF接口提供網(wǎng)絡(luò)的連接方式等。移動(dòng)終端應(yīng)用程序可以在支持J2ME的手機(jī)終端或者PDA上進(jìn)行手機(jī)模擬器軟件運(yùn)行。
數(shù)據(jù)庫(kù):負(fù)責(zé)系統(tǒng)對(duì)于邏輯數(shù)據(jù)的管理和存儲(chǔ),實(shí)現(xiàn)數(shù)據(jù)的持續(xù)性和一致性。MYSQL數(shù)據(jù)庫(kù)具備功能強(qiáng)大、使用方便、運(yùn)行快速安全的優(yōu)點(diǎn),作為本系統(tǒng)采用的數(shù)據(jù)庫(kù),MYSQL數(shù)據(jù)庫(kù)使得管理簡(jiǎn)化,并增強(qiáng)了PIM應(yīng)用程序所需的可靠性和易用性。系統(tǒng)移動(dòng)終端的MIDlet容器,提供用戶UI并進(jìn)行人機(jī)交互和網(wǎng)絡(luò)通信發(fā)起;WEB服務(wù)器作為PIM系統(tǒng)的訪問(wèn)入口,處理移動(dòng)終端MIDlet的管理和同步請(qǐng)求;由符合JSP規(guī)范的servlet調(diào)用應(yīng)用服務(wù)器的JavaBean來(lái)完成數(shù)據(jù)邏輯運(yùn)算,JavaBean使用JDBC方式對(duì)數(shù)據(jù)存儲(chǔ)庫(kù)進(jìn)行存取訪問(wèn),然后將運(yùn)算結(jié)果返回Servlet;Servlet經(jīng)過(guò)處理將處理數(shù)據(jù)結(jié)果以返回到移動(dòng)終端,并通過(guò)MIDlet容器中的用戶UI界面呈現(xiàn)給用戶.系統(tǒng)采用MVC架構(gòu)有利于系統(tǒng)的維護(hù),以及業(yè)務(wù)功能的擴(kuò)展。
(二)服務(wù)器端詳細(xì)設(shè)計(jì)
服務(wù)器端利用基于J2EE架構(gòu)的tomcat作為服務(wù)器,具體實(shí)現(xiàn)如下l 3l:
1、服務(wù)器端需要對(duì)同步引擎核心模塊進(jìn)行實(shí)現(xiàn):服務(wù)器通過(guò)解析客戶端發(fā)送的SymeML協(xié)議數(shù)據(jù)包并進(jìn)行XML解析并且判斷,包括服務(wù)器端和移動(dòng)終端共同采取的同步類型(雙向同步或者慢同步,代碼201和200),對(duì)認(rèn)證信息進(jìn)行校驗(yàn),解析出客戶端發(fā)送同步數(shù)據(jù)源的狀態(tài),并在同步初始化過(guò)后修改(添加,刪除和更新)服務(wù)器中相應(yīng)的數(shù)據(jù)存儲(chǔ)對(duì)象。
2、JDBC用于與1、中的模塊進(jìn)行數(shù)據(jù)庫(kù)連接,本系統(tǒng)采用MYSQL數(shù)據(jù)庫(kù).該數(shù)據(jù)庫(kù)中保存的信息分為3類:(1)客戶端的認(rèn)證信息、登陸的用戶名和密碼,客戶端的設(shè)備類型和設(shè)備的屬性狀態(tài);(2)客戶端同步的數(shù)據(jù)源類型和對(duì)應(yīng)的數(shù)據(jù)信息(聯(lián)系人按照vCard格式保存,日程/任務(wù)按照iCalender格式來(lái)保存);(3)涉及在同步過(guò)程中的關(guān)于SyenML協(xié)議的一些信息,包括同步的同步錨,同步的系統(tǒng)日志,同步過(guò)程中對(duì)數(shù)據(jù)源的處理命令。
3、建立HTTP協(xié)議同SymeML同步協(xié)議底層的綁定,并且通過(guò)使用Java中的通用網(wǎng)絡(luò)連接框架GCF中的Httpconneetion來(lái)實(shí)現(xiàn)Http數(shù)據(jù)傳輸,達(dá)到傳輸?shù)耐该餍?,同時(shí)結(jié)合分布式并行處理方式以及多線程調(diào)度來(lái)保持和多客戶端的通信。
4、對(duì)該服務(wù)器端進(jìn)行擴(kuò)展,利用Javascript的腳本語(yǔ)言和JDBC數(shù)據(jù)庫(kù)連接來(lái)開(kāi)發(fā)基于Web的應(yīng)用程序來(lái)訪問(wèn)服務(wù)器端的數(shù)據(jù)存儲(chǔ)對(duì)象,從而也提供客戶端對(duì)服務(wù)器上的數(shù)據(jù)進(jìn)行修改以及管理員對(duì)整個(gè)系統(tǒng)進(jìn)行維護(hù)和管理的功能.由于移動(dòng)終端的研究應(yīng)用被作為本平臺(tái)重點(diǎn)考慮并設(shè)計(jì)的對(duì)象,所以沒(méi)有過(guò)多考慮PC機(jī)瀏覽器部分。
三、系統(tǒng)數(shù)據(jù)同步架構(gòu)
(一)SyncML同步框架
作為一個(gè)應(yīng)用層協(xié)議,SyncML協(xié)議是唯一一種行業(yè)通用的移動(dòng)數(shù)據(jù)同步化協(xié)議,用以真正實(shí)現(xiàn)使用任何終端設(shè)備均可隨時(shí)隨地訪問(wèn)任何網(wǎng)絡(luò)數(shù)據(jù)。本系統(tǒng)通過(guò)對(duì)SyneML數(shù)據(jù)同步協(xié)議的研究以及二次開(kāi)發(fā)為移動(dòng)客戶端提供PIM信息的數(shù)據(jù)同步以及交換,通過(guò)使用XML在傳輸層傳輸數(shù)據(jù),減少客戶端占用的系統(tǒng)資源和網(wǎng)絡(luò)資源,提高了效率以及系統(tǒng)的通用性。
SyncML同步框架由提供數(shù)據(jù)同步服務(wù)的網(wǎng)絡(luò)服務(wù)器端和移動(dòng)終端以及中間的移動(dòng)模型框架組成。終端和網(wǎng)絡(luò)服務(wù)器通過(guò)常用的網(wǎng)絡(luò)傳輸方式進(jìn)行連接。終端和服務(wù)器端通過(guò)SyneML表示協(xié)議所規(guī)定的SyncML接口進(jìn)行消息通信。移動(dòng)框架由雙向的“同步引擎”、“同步代理”以及“同步適配器”組成?!巴揭妗必?fù)責(zé)管理整個(gè)操作過(guò)程.“同步代理”管理“同步引擎”對(duì)網(wǎng)絡(luò)的訪問(wèn),管理客戶端和服務(wù)器端的應(yīng)用進(jìn)行數(shù)據(jù)同步的相互通信過(guò)程.“同步代理”通過(guò)調(diào)用“面向同步代理的應(yīng)用程序接口”完成這些功能.“同步適配器”負(fù)責(zé)消息的收發(fā)過(guò)程,在這個(gè)過(guò)程中A和B雙方相互通信,收發(fā)SyncML數(shù)據(jù)包。
(二)數(shù)據(jù)同步重要技術(shù)
由于終端和服務(wù)器端需要進(jìn)行同步,所以同步協(xié)議的實(shí)現(xiàn)需要記錄發(fā)生在本次同步和前次同步之間所有的數(shù)據(jù)修改,并且對(duì)數(shù)據(jù)的修改通過(guò)替換,增加和刪除的操作來(lái)實(shí)現(xiàn)。
1.使用同步錨準(zhǔn)確記錄同步時(shí)間范圍:
為了保證同步的完整性和數(shù)據(jù)一致性,使用了數(shù)據(jù)庫(kù)中的同步錨來(lái)記錄服務(wù)器和同步的時(shí)間。為了減少耦合性,增強(qiáng)獨(dú)立性,客戶端和服務(wù)器分別都有三個(gè)同步錨,Last,Next,Stored。Last同步錨對(duì)上一次同步發(fā)生的時(shí)間進(jìn)行記錄,Next同步錨對(duì)本次同步發(fā)生的時(shí)間進(jìn)行記錄,Stored表示服務(wù)器端儲(chǔ)存的與特定客戶端關(guān)聯(lián)的同步錨。初始化同步時(shí),客戶端和服務(wù)器都將各自的兩個(gè)同步錨發(fā)給對(duì)方。同步錨必須在同步正常結(jié)束后進(jìn)行更新,如果同步終端之間的通信沒(méi)有正常結(jié)束,那么終端必須不能更新同步錨,如果通信中斷后又重新開(kāi)始,則Next同步錨的值需要被更新。端關(guān)聯(lián)的同步錨。當(dāng)然,初始過(guò)程的兩個(gè)包中還包括其它信息,單就同步錨而言,存在一個(gè)服務(wù)器端的比較,判斷當(dāng)前的同步采取什么方式:如果錨不匹配,服務(wù)器判斷當(dāng)前是一個(gè)新同步或前次同步失敗。處于這種情況下通常會(huì)重新執(zhí)行慢同步。如果錨匹配,則結(jié)束同步初始化,開(kāi)始交換更改數(shù)據(jù)日志并且更新雙方個(gè)人信息數(shù)據(jù)。如果數(shù)據(jù)成功更新后,服務(wù)器及客戶端要刷新自己存儲(chǔ)的同步錨,做好下次同步的準(zhǔn)備。
2.PIM數(shù)據(jù)ID在服務(wù)器和客戶端之間的映射:
同樣源于“耦合性減小,獨(dú)立性增強(qiáng)”原則,并且雙方的ID可能不匹配,服務(wù)器端和客戶端需要分別產(chǎn)生并且保存GUID全局?jǐn)?shù)據(jù)記錄ID以及LUID本地?cái)?shù)據(jù)記錄ID,并且由服務(wù)器保存并且維護(hù)一份GUID-LUID的映射表。也就是說(shuō),服務(wù)器必須分別記錄同一個(gè)數(shù)據(jù)記錄在客戶端和服務(wù)器端的ID。
客戶端保存本地LUID表,服務(wù)器端保存全局GUID表和LUID與GUID的映射關(guān)系表。LUID是由客戶端賦值數(shù)據(jù)記錄的,這意味著即使是服務(wù)器端添加了一個(gè)新的數(shù)據(jù)項(xiàng),在客戶端該數(shù)據(jù)項(xiàng)的LUID仍然是由客戶端所指定。而當(dāng)客戶端通過(guò)Map命令將數(shù)據(jù)項(xiàng)的本地ID發(fā)回給服務(wù)器端,服務(wù)器在收到客戶端的Map命令進(jìn)行數(shù)據(jù)項(xiàng)進(jìn)行映射后,服務(wù)器端就能根據(jù)客戶端的LUID更新服務(wù)器端的LUID-GUID映射表,使得兩個(gè)ID得到對(duì)應(yīng)。
3.解決同步中發(fā)生沖突
如果客戶端和服務(wù)器端對(duì)同一個(gè)數(shù)據(jù)項(xiàng)同時(shí)實(shí)行修改,就會(huì)產(chǎn)生沖突。通常情況下,由服務(wù)器端的同步引擎提供解決方法,并通知客戶端沖突解決結(jié)果。由于目前移動(dòng)3G客戶端的軟硬件水平加強(qiáng),本系統(tǒng)主要對(duì)智能手機(jī)終端應(yīng)用進(jìn)行研究,所以客戶端也能夠有同步引擎并且能夠自己解決沖突。
(三)系統(tǒng)數(shù)據(jù)同步實(shí)現(xiàn)方式
SyncML協(xié)議總共有7種同步類型,用于服務(wù)器與客戶端不同同步情況以及沖突處理策略,下面重點(diǎn)介紹系統(tǒng)實(shí)現(xiàn)并且常用的兩種同步的過(guò)程:雙向增量同步以及慢同步。
1.雙向增量同步作為常用的模式,用于客戶端和服務(wù)器相互修改并且進(jìn)行數(shù)據(jù)交換。同步初始化完成后,客戶端首先發(fā)送移動(dòng)終端修改信息到服務(wù)器,并將同步錨和修改過(guò)的終端數(shù)據(jù)的信息發(fā)到服務(wù)器,服務(wù)器在收到客戶端的個(gè)人信息的修改信息之后,根據(jù)客戶端發(fā)送信息處理同步請(qǐng)求,并對(duì)收到的修改信息進(jìn)行分析,最后當(dāng)同步分析結(jié)束之后,將服務(wù)器修改的數(shù)據(jù)信息發(fā)給客戶端,最后客戶端修改并更新其本地?cái)?shù)據(jù)庫(kù),發(fā)送到客戶端的數(shù)據(jù)包括服務(wù)器對(duì)數(shù)據(jù)的分析結(jié)構(gòu)以及服務(wù)器在上次同步結(jié)束到本次同步開(kāi)始這個(gè)時(shí)間段內(nèi)所修改數(shù)據(jù)信息。
2.慢同步是把客戶端和服務(wù)器端的不同數(shù)據(jù)庫(kù)中的數(shù)據(jù)逐條進(jìn)行比較并修改的一種雙向同步,是由客戶端首先發(fā)起的同步方式。實(shí)際中,客戶端把所有的個(gè)人數(shù)據(jù)信息發(fā)到服務(wù)器端,由服務(wù)器端將數(shù)據(jù)信息和服務(wù)器上的數(shù)據(jù)進(jìn)行同步對(duì)比。在同步對(duì)比后,服務(wù)器將客戶端需要進(jìn)行修改的數(shù)據(jù)信息發(fā)回給客戶端??蛻舳诵枰祷厮蟹?wù)器增加記錄的映射信息。客戶端和服務(wù)器端的異常都可能導(dǎo)致進(jìn)行慢同步,比如如客戶端或服務(wù)器丟失信息的改變記錄,產(chǎn)生Guid和Luid的沖突,同步錨丟失等情況。發(fā)生異常后在移動(dòng)終端和服務(wù)器端進(jìn)行慢同步,移動(dòng)終端初始用Alert命令通知服務(wù)器同步類型為Slow Sync。服務(wù)器端也會(huì)在恢復(fù)終端初始化包中會(huì)包含一個(gè)Alert命令。移動(dòng)終端接收到之后重新發(fā)起Slow Sync。如果客戶端或者服務(wù)器端在收到正常同步的Alert命令后仍然需要進(jìn)行慢同步,并同時(shí)發(fā)送Slow Sync的Alert命令。