天天看點

GAE開發注意事項總結

GAE(Google App Engine)是目前最受歡迎的雲計算平台之一。特别是其對JAVA的支援,更是讓許多人為之振奮。GAE的文檔還算是比較豐富,不過仍然有一些讓人迷惑的地方,本文将這些地方一一作出總結和說明,希望對GAE開發者有所幫助。

GAE支援JAVA和Python(以後或許支援更多的)。這裡僅讨論JAVA。

JSP方面:

GAE支援JSP頁面,但是預設并不啟用JSTL和EL表達式,很多開發者嵌入EL後發現出現奇怪的結果。若要啟用JSTL,則需要做下面幾個工作:

1,每個JSP頂部,加入以下語句

<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8"isELIgnored="false"%> 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

2,将web.xml檔案頭部修改為以下形式,這一步也很重要, 網上現在有很多文章隻說明了第一步,事實上還需要這一步。

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/javaee" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd"> 

這兩步完成以後即可使用JSTL了。

Web方面:

1,預設情況下GAE并不啟用Session。若要使用之,則需修改/Web-INF/appengine-web.xml檔案,在根元素下加入這樣的語句

  <application> 

    <sessions-enabled>true</sessions-enabled> 

  </application> 

另外一個需要注意的就是,盡量不要在Session中儲存資料量較大的資料,這樣做很可能會導緻資料不同步的情況(這種現象很難調試)。一般來說僅僅在Session中放入一個标志(Key)即可,主體的資料應持久化或者放入memcache。不過有時memcache會因為某種原因比如伺服器負載太高而失效,是以若這種現象是不可忍受的,則還是進行持久化比較保險。

2,每次請求時間必須控制在30sec以内,若超過這個時間GAE會自動終止該次請求。最消耗CPU時間的是資料庫操作。

資料持久化方面:

GAE使用JDO或者JPA來進行資料持久化。和傳統的關系型資料庫相比,這種儲存方法似乎更适合于網際網路應用。一般來說,JDO的使用非常簡單,不過這裡仍然存在大量的陷阱,同樣也是難以調試發現的。

1,每個欲持久化的類均必須有一個主鍵。主鍵不能是基本類型,隻能裝箱使用。最常見的就是Long(不要寫成long)。

2,類之間盡量不要耦合 ,如Employee類中含有一個對Profile類的引用,這樣也會導緻持久化失敗。雖然GAE文檔中有說明可以通過某種方式來支援,不過我試驗的結果表明還是難以使用。因而如果要耦合,則應使用一個普通的字段儲存被耦合類的主鍵即可。查詢的時候根據這個主鍵再作一次查詢。為了提高性能,可以将查詢出來的資料放入memcache中,這樣可以減少查詢次數。

3,由于查詢操作比較消耗CPU,是以應盡量減少查詢次數。為此可以使用DTO(Data Transfer Object)模式 ,将多個領域對象組裝為一個DTO對象進行持久化;查詢的時候一次性查出所需的資料,然後再分解DTO。

4,GAE不支援對 Map類型的集合類進行持久化 。

5,在本地進行GAE項目調試的時候,預設的資料庫位置是/WEB-INF/appengine-generated/local_db.bin。特别需要注意的是每次重新啟動伺服器并不會自動删除資料庫中已有的内容。可以手動删除之以達到資料清空的目的。

本文轉自 kevx 51CTO部落格,原文連結:http://blog.51cto.com/spinlock/487213,如需轉載請自行聯系原作者