馬 花,畢 利
基于GAE平臺與GWT框架的Android技術(shù)應(yīng)用研究
馬花,畢利
(寧夏大學(xué)數(shù)學(xué)計算機(jī)學(xué)院,銀川750021)
Google云計算作為一種新型發(fā)展起來的基于互聯(lián)網(wǎng)的商業(yè)計算模式,其核心是Web應(yīng)用,而當(dāng)前值得研究的應(yīng)用服務(wù)尚處在開發(fā)階段中的雛形。運(yùn)用開源手機(jī)操作系統(tǒng)(Google Android)和云計算服務(wù)平臺(Google App Engine,GAE)提出研究論題,同時編程實現(xiàn)基于GWT框架的簡單應(yīng)用,即手機(jī)通訊錄同步云服務(wù)應(yīng)用系統(tǒng),實現(xiàn)了海量數(shù)據(jù)的備份。實驗結(jié)果表明,相比于傳統(tǒng)的Web展示層框架開發(fā),GWT作為一種新的技術(shù)發(fā)展趨勢,憑借其諸多的優(yōu)勢而得到大量使用,有著廣泛的應(yīng)用前景。
Google App Engine(GAE);GWT框架;Android
國家自然科學(xué)基金資助項目(No.61440046)、國家科技支撐計劃項目(No.2013BAF02B05)
Google作為當(dāng)今最大的云計算使用者,它的云計算平臺GAE(Google App Engine)無疑是引領(lǐng)云計算開發(fā)平臺技術(shù)潮流的生力軍之一[1];作為Google研發(fā)的AJAX應(yīng)用框架[2]GWT(Google Web Toolkit)主要用于Web應(yīng)用程序的開發(fā),Java-to-JavaScript編譯器是GWT提供的最明顯的特征。這個編譯器可以將Java語言開發(fā)應(yīng)用程序的Web接口轉(zhuǎn)換成JavaScript。另外,Java 1.4版本庫中的一個子集被GWT使用,因此任何Web服務(wù)器(例如Apache)都可以支持GWT應(yīng)用程序而不需要服務(wù)器端直接處理。而據(jù)統(tǒng)計,Android平臺手機(jī)的全世界市場份額在2013年的第四季度已達(dá)到78.1%;在2014第一季度,Android平臺已占所有移動廣告流量來源的42.8%,首度超越iOS[3]。本文利用了Google公司的云計算平臺GAE,GWT框架,在Android環(huán)境下實現(xiàn)了手機(jī)通訊錄同步云服務(wù)應(yīng)用系統(tǒng),分析了此應(yīng)用系統(tǒng)的架構(gòu),從而進(jìn)一步說明GWT框架在應(yīng)用開發(fā)中的優(yōu)勢。
云計算平臺層使用現(xiàn)有軟硬件基礎(chǔ)設(shè)施構(gòu)建云環(huán)境,從而為上一級的Browser層提供云計算相關(guān)的基礎(chǔ)服務(wù),其中包括分布式數(shù)據(jù)存儲、海量數(shù)據(jù)處理服務(wù)、分布式數(shù)據(jù)庫技術(shù)等。Browser層不僅提供了與云計算平臺層的通信接口,同時保證接口的高度可移植性,以便能夠適用于不同的云計算環(huán)境,最后處理來自手機(jī)端的請求并反饋結(jié)果。
手機(jī)通訊錄同步云服務(wù)應(yīng)用系統(tǒng)主要包括三個部分,分別為Server、Browser、Phone;其中Phone手機(jī)端基于Android操作系統(tǒng),Browser瀏覽器端基于GWT和GAE,界面使用GWT編寫,代碼由GAE托管;Server端的數(shù)據(jù)庫,接口等功能都是在GAE上實現(xiàn)的。整個應(yīng)用系統(tǒng)完全按照TCP/IP協(xié)議進(jìn)行通信。此應(yīng)用系統(tǒng)的總體架構(gòu)為(如圖1所示)。
在該平臺的架構(gòu)中,利用了云計算環(huán)境的快速數(shù)據(jù)處理和存儲能力,Browser端應(yīng)用模塊被構(gòu)建在其中,以此降低對手機(jī)端的依賴。同時,云計算平臺層中存儲了通訊錄中的所有信息,而為了保證數(shù)據(jù)的可恢復(fù)性使用了云安全機(jī)制將數(shù)據(jù)備份。Phone手機(jī)端并不執(zhí)行實際的計算操作處理,主要用于查看下載由Browser層存儲到服務(wù)器中的信息,為用戶呈現(xiàn)數(shù)據(jù)及服務(wù)界面。
圖1 手機(jī)通訊錄同步云服務(wù)應(yīng)用系統(tǒng)總體架構(gòu)
2.1云端平臺技術(shù)
GAE目前主要支持Java和Python兩種語言,為我們提供了分布式軟件開發(fā)、測試和部署環(huán)境等功能。開發(fā)人員在無需考慮網(wǎng)絡(luò)帶寬、主機(jī)和存儲空間等因素的基礎(chǔ)之上,使用其API實現(xiàn)互聯(lián)網(wǎng)應(yīng)用。GAE平臺的特點:①資源動態(tài)可擴(kuò)展、提供Sandbox應(yīng)用程序安全保證機(jī)制、充足的API、SDK、GQL數(shù)據(jù)庫查詢語言等;②免費(fèi)帳戶無需承擔(dān)任何費(fèi)用和責(zé)任,能夠使用500MB的存儲空間和每月500萬次的頁面瀏覽流量;③GAE可以綁定任意頂級域名,同時為用戶的每個應(yīng)用提供基于appspot.com上的域名。
GAE的基本架構(gòu)[4]主要由前端、Datastore和服務(wù)群這幾個部分組成。(1)前端分別為Front End,Static Files, App Server,App Master;(2)Datastore作為GAE中的核心模塊,是基于BigTable技術(shù)的分布式數(shù)據(jù)庫;(3)服務(wù)群中Memcache、Graphics、users、URL snatch和Task Queues等眾多服務(wù)供App Server調(diào)用。
圖2 GAE的基本架構(gòu)
2.2GWT技術(shù)
首先GWT[5](Google Web Toolkit)為Java語言編寫AJAX前端提供了平臺,其次GWT內(nèi)部會交叉編譯到優(yōu)化的JavaScript中使得源程序可以在瀏覽器上運(yùn)行。也就是說,GWT使得程序員無需研究Java到JavaScript和HTML的轉(zhuǎn)換過程,從而降低了開發(fā)過程中的難度,同時程序員有更多的時間用于項目的界面以及交互上,尤其是與Eclipse Google插件結(jié)合使用時,優(yōu)勢更明顯。
GWT,一種胖客戶端UI技術(shù)。隨著并行操作用戶數(shù)目不斷增多,胖客戶端技術(shù)使服務(wù)器端具有較少的加載量。GWT的這一優(yōu)點特別適合于應(yīng)用程序簡單且數(shù)據(jù)存儲相對有限的場所。
GWT的技術(shù)特點:第一,GWT編譯器。作為Java到JavaScript的編譯器能夠翻譯Java語言的大部分特性。GWT的這種優(yōu)勢為開發(fā)者提供了諸多好處,例如增強(qiáng)了代碼的可讀性,程序開發(fā)過程使用傳統(tǒng)方法及時調(diào)試和檢查代碼,減少了軟件開發(fā)周期等。第二,UI組件與跨平臺。GWT中的組件庫可以開發(fā)出漂亮的UI,允許開發(fā)者反復(fù)調(diào)用;同時經(jīng)過GWT編譯的AJAX代碼支持大部分的瀏覽器和操作系統(tǒng),為跨平臺提供了可能。第三,異步RPC調(diào)用。GWT通過使用RPC風(fēng)格異步調(diào)用可以方便實現(xiàn)客戶端和服務(wù)器端的通信,同時GWT將參數(shù)傳遞過程中的Java對象進(jìn)行序列化與反序列化。第四,穩(wěn)定的系統(tǒng)界面。GWT提供的管理瀏覽器歷史的編程接口防止了編程過程中后退行為的功能導(dǎo)致的系統(tǒng)界面混亂的可能,為軟件的穩(wěn)定運(yùn)行提供了保證。
2.3應(yīng)用系統(tǒng)與云端的數(shù)據(jù)存儲接口
一個PaaS[6](Platform-as-a-Service)最重要的就是數(shù)據(jù)存儲處理與傳輸功能。在存取業(yè)務(wù)數(shù)據(jù)或執(zhí)行業(yè)務(wù)過程中,服務(wù)端Servlet被GWT用戶接口在瀏覽器端發(fā)出遠(yuǎn)程過程調(diào)用(RPC)。因此,GWT提供了一種機(jī)制可以使開發(fā)者很容易地發(fā)出RPC調(diào)用,從而允許開發(fā)者使用普通Java對象(POJO)構(gòu)建應(yīng)用程序。而提供RPC的應(yīng)用程序都是分布式應(yīng)用程序—即使RPC對于開發(fā)者而言是透明實現(xiàn)的。所以,商業(yè)和企業(yè)中的分布式應(yīng)用程序通常會考慮安全方面的因素,同理,服務(wù)于GWT客戶端的遠(yuǎn)程對象的設(shè)計也必須考慮安全因素以防止來自于模仿性或敵對客戶端應(yīng)用程序的攻擊。
從存儲的角度來看,GAE使用Datastore存儲服務(wù)對數(shù)據(jù)進(jìn)行持久化并實現(xiàn)查詢和事務(wù)功能,并基于Google著名的BigTable技術(shù)。GAE數(shù)據(jù)存儲區(qū)有別于我們常見的關(guān)系型數(shù)據(jù)庫;數(shù)據(jù)存儲區(qū)實體“沒有架構(gòu)”;數(shù)據(jù)存儲區(qū)保持高度一致并使用開放式并發(fā)性控制;數(shù)據(jù)存儲區(qū)在其分布式網(wǎng)絡(luò)中使用“實體組”實現(xiàn)事務(wù)。同時,GAE提供了JPA&JDO訪問接口,但是值得注意的是它不支持關(guān)系型數(shù)據(jù)庫部分的功能,JPA&JDO的對象建模與持久化實現(xiàn)是構(gòu)建在數(shù)據(jù)存儲區(qū)的低級API上。本研究采用了JDO數(shù)據(jù)訪問接口,數(shù)據(jù)訪問過程如下:①拷貝appengine-java-sdk的JAR包;②配置文件設(shè)置;③設(shè)置數(shù)據(jù)庫讀取策略和database調(diào)用期限。App Engine提供兩種策略:strong consistency和eventual consistency,其默認(rèn)策略是strong consistency;④增強(qiáng)數(shù)據(jù)類。JDO使用一種后置編譯處理的增強(qiáng)步驟來實現(xiàn)數(shù)據(jù)類與JDO之間的關(guān)聯(lián);⑤由PersistenceManagerFactory加載JDO配置文件得到實體管理工廠實例;⑥由實體管理工廠實例構(gòu)建PersistenceManager實例;⑦使用實體管理器實例的方法處理數(shù)據(jù)對象以及執(zhí)行事務(wù),其中包括添加刪查等操作;⑧關(guān)閉實體管理器。上述過程可用圖3表示。
2.4實體設(shè)計與實現(xiàn)
數(shù)據(jù)保存到App Engine中,基本的操作有:定義數(shù)據(jù)類型,獲得交互接口,最后調(diào)用交互接口把數(shù)據(jù)類型的實例保存到數(shù)據(jù)庫中。JDO在Java類上使用批注說明類實例怎樣作為實體存儲在數(shù)據(jù)存儲服務(wù)區(qū)中以及在數(shù)據(jù)存儲區(qū)中的索引方式。。以下是App Engine標(biāo)準(zhǔn)數(shù)據(jù)類型定義的一個示例:其中有Long類型的id作為該數(shù)據(jù)類型的主鍵,而主要的數(shù)據(jù)類型有通訊人的Email和password,以及通訊人列表List〈Contact〉。
圖3 JDO實現(xiàn)數(shù)據(jù)訪問的步驟
@PersistenceCa pable(identityType=IdentityType.APPLICATION)
public class User{
@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String email;
@Persistent
private String password;
@Persistent
private List〈Contact〉contacts;
public User(String phonenumber,String password){
this.password=password;
this.email=phonenumber;
this.contacts=new ArrayList〈Contact〉();
}
public Long getID(){
return this.id;
}
public String getEmail(){
return this.email;
}
public String getPassword(){
return this.password;
}
public void setPassword(String password){
this.password=password;
}
public List〈Contact〉getContactst(){
return contacts;
}
public void addContact(Contact c){
contacts.add(c);
}}
App Engine數(shù)據(jù)存儲區(qū)中的實體都是經(jīng)過JDO保存的對象。類的簡單名稱派生出實體的類型。如果我們要成功地聲明一個類,字段批注是必須的,而實體的屬性則由類的持久字段決定(屬性的名稱與字段的名稱相同)。其中,使用@PersistenceCapable批注聲明Java類能夠通過JDO在數(shù)據(jù)存儲區(qū)中存儲或檢索;@PrimaryKey批注聲明主鍵key;@Persistent批注聲明要存儲到數(shù)據(jù)存儲區(qū)中的數(shù)據(jù)類的字段。
3.1Swever端的實現(xiàn)技術(shù)
為了提供一個唯一的操作接口,首先創(chuàng)建App Engine數(shù)據(jù)庫,其次創(chuàng)建一個靜態(tài)使用方法以保證操作接口的唯一性。這里我們創(chuàng)建的靜態(tài)方法為server包里的PMF類,代碼如下所示:
public class PMF{
private static final PersistenceManagerFactory pmfIn stance= JDOHelper.getPersistenceManagerFactory("transactions-optional");
private PMF(){
}
public static PersistenceManagerFactory getInstance(){
return pmfInstance;
}
}
作為App Engine數(shù)據(jù)庫的調(diào)用接口,靜態(tài)方法PMF是GAE的標(biāo)準(zhǔn)格式。為了能夠提供唯一的數(shù)據(jù)庫接口,PMF使用了單一設(shè)計模式。
然后是實現(xiàn)主要功能類Provider。步驟為:在server包里創(chuàng)建一個與數(shù)據(jù)庫交互的封裝類,基本功能就是實現(xiàn)Server端所有的數(shù)據(jù)功能,其中包括添加刪除用戶信息、用戶登錄注冊、修改用戶使用密碼。
最后一個類就是與Servlet進(jìn)行交互的類,通過協(xié)議的方式實現(xiàn),由doGet和doPost構(gòu)成,主要功能是服務(wù)端將處理后的結(jié)果返回給請求端。
3.2Browser端的實現(xiàn)
相比于傳統(tǒng)的HTML,CSS創(chuàng)建網(wǎng)頁的方法,此應(yīng)用系統(tǒng)使用GWT框架編寫了Browser端。在本系統(tǒng)中它的優(yōu)勢主要有:①使用面向?qū)ο蟮腏ava代替JavaScript,大幅度提高了開發(fā)效率;②GWT提供的友好界面減少了Web應(yīng)用程序的美化工作;③易于上手和掌握。Browser端運(yùn)行效果圖如圖4所示。
圖4 Browser端實現(xiàn)效果圖
3.3Phone端的實現(xiàn)
手機(jī)通訊錄同步云服務(wù)系統(tǒng)手機(jī)端的開發(fā)平臺為Android 2.2。為了提高系統(tǒng)的可維護(hù)性與代碼的可重用性,本應(yīng)用系統(tǒng)采用了MVC設(shè)計模式.手機(jī)端運(yùn)行效果圖如圖5所示。
圖5 Phone端實現(xiàn)效果圖
本文提出了基于GAE平臺與GWT框架的An-droid移動應(yīng)用,并在本研究中實現(xiàn)應(yīng)用系統(tǒng)。通過本研究凸顯了GWT框架與Eclipse Google插件結(jié)合使用編碼時的高效快捷的優(yōu)勢,同時研究了其廣泛的應(yīng)用價值,為Google各種應(yīng)用平臺的推廣提供了有力的保障。
[1]沈琦,湯艷.Google云計算平臺服務(wù)框架研究[J].電子商務(wù),2013(6):54-55+63
[2]石洪超.基于GWT的網(wǎng)上商店的設(shè)計與實現(xiàn)[D].吉林:吉林大學(xué),2010
[3]Android_百度百科.2014-07-12.http://baike.baidu.com/subview/1241829/9322617.htm?fr=aladdin.
[4]Google App Engine技術(shù)架構(gòu)資料大盤點.2012-6-19.http://www.uml.org.cn/zjjs/201206193.asp.
[5]用GWT實現(xiàn)基于Ajax的Web開發(fā).2012-09-26.http://itindex.net/detail/39870-gwt-ajax-web.
[6]宋偉杰.Web2.0與云計算技術(shù)支持的協(xié)作學(xué)習(xí)研究[D].南京:南京郵電大學(xué),2013
[7]冀汶莉,李向軍,陳夏玉.基于云計算SaaS應(yīng)用軟件開發(fā)模式研究[J].微電子學(xué)與計算機(jī),2014(7):137-141+146
[8]陶大鵬.基于云計算的電子商務(wù)交易平臺架構(gòu)研究[D].安徽:合肥工業(yè)大學(xué),2012
[9]Jun Han,Huibin Yin,Jing Liu,et al.Design and Research of Android Mobile Learning System With the Support of GAE[A].Proceedings of 2010 2nd International Conference on Information and Multimedia Technology(ICIMT 2010)[C].2010:6
Google App Engine(GAE);GWT Framework;Android
Research on Android Technology Based on GAE Platform and GWT Framework
MA Hua,BI Li
(Department of Mathematics and Computer Science,Ningxia University,Yinchuan 750021)
Google cloud computing as a new type of developed commercial calculation model based on Internet,its core is the Web application,and the current worth research prototype of application service is still in development stage.Uses the open source mobile operating system (Google Android)and cloud computing service platform(Google App Engine,GAE)to put forward the research topic,at the same time programming realized simple application based on GWT framework,the mobile phone address book synchronization cloud service application system,realizes the huge amounts of data backup.Experimental results show that compared to the traditional Web display layer framework development,as a technology development trend,GWT are widely used with its advantages.It has broad application prospects.
1007-1423(2015)12-0071-05
10.3969/j.issn.1007-1423.2015.12.016
馬花(1989-),女,碩士研究生,研究方向為信息系統(tǒng)、移動云計算應(yīng)用
畢利(1968-),女,教授,研究方向為信息工程、數(shù)據(jù)挖掘
2015-03-10
2015-04-07