最近抽空研究了一下新浪的SAE,光看特性確實非常吸引人,就是模仿GAE做的。對於中小開發人員而言,按資源消耗付費,並且有極其強大的伸縮性,真的是一個絕佳平台。理念很好,但用起來卻有點費勁,可能其Java功能還在公測中,很多東西不完善。
文檔和社區
新的平台首先當然是看文檔和社區。其實文檔寫的還算詳細,對入門而言還是能比較快接受,但是對技術細節說明非常少,很多地方用語也不嚴謹,比如說對java架構有限制,卻不說怎麼限制的,限制到什麼程度。社區這部分也只能說一般,活躍度比較低,提個問題半天沒人解答,官方人員也是挑著問題解答,有些問題直接就沒人管了。但bug反饋回複比較及時,這點比較贊。
Java應用測試
不自己動手自然不能有更深的理解,在做demo測試的時候花了將近一天時間,主要是因為官方文檔交代不詳細只能自己反覆測試,以及一個比較鬱悶的bug給耽誤了。簡單說一下幾點經驗:
1. 特別注意:發布包不能有servlet-api-2.5.jar,web程式肯定會用到這個,本地運行都是正常的,但是發布到sae上有這個jar,程式就會報錯。
2. Java程式本地完全是類比,由於和伺服器上環境還是有不少差異,所以一切只能以線上運行為準,最好部署上去以後還能再跑一邊測試才靠譜。
3. Web容器建議選用jetty7,因為sae上用的是這個。eclipse對應外掛程式的是http://wiki.eclipse.org/Jetty_WTP_Plugin/Jetty_WTP_Install
4. 由於sae是叢集環境,所以必須按叢集方式編寫代碼,需要多個容器共用的變數放到memcache或者資料庫中,當然這是屬於常識範疇。
5. 本地開發環境資料庫使用者名稱和密碼不要使用SaeUserInfo.getAccessKey()和SaeUserInfo.getSecretKey(),在sea-local.jar中是返回一個隨機值,貌似mysql可以設定一個any的使用者,但是這些自己弄太麻煩了,還是最好把這個資訊寫到設定檔裡面,發布的時候進行修改。
6. sae文檔中說對架構有限制,根據測試應該是對某些架構的進階功能有限制,比如需要利用到反射、容器支援之類的進階特性,對於工具類的jar應該沒有限制。我用gson、ibatis、c3p0做簡單測試都可以正常運行。註:串連池建議選用最新版本的dbcp,這個在同時串連讀庫和寫庫的時候比較穩定)
7. mini sae貌似就不是給Java測試用的,因為下載下來直接是個沒有解壓的war包...另外上面的資料庫還不知道使用者名稱對應密碼。
總結
sae這個東西理念和實用價值都是很大,但是目前文檔、樣本、技術公開性都還不夠,希望這個平台能快速發展,日後真正成為一個中小開發人員的活躍地。
DEMO下載
附件是一個在sae上使用了spring2.5 + structs2 + ibatis2.3.4的demo,資料採用了json形式返回。自己在學習過程中花了不少時間,為了協助大家節約sae中java開發的學習成本,並省去建立測試專案的繁瑣工作,所以特別把自己測試工程整理成demo並發布。祝大家使用愉快!如果發現該demo的問題,可以用新浪微博@畢成功passover)給我留言。