自己總結了一些在部署Java版的BAE中,得到的經驗。
1. 邀請碼申請
不做詳述,最好描述一下團隊組員情況
2. 環境搭建問題
前提是你知道SVN插件的安裝以及BAE插件安裝。無誤後,按照以下步驟進行:
2.1. checkout相應工程的版本號
下圖所示的爲某個工程的版本號1
2.2轉化成BAE工程
checkout出來的工程,爲一個普通的工程, 因此需要轉化成BAE工程。同時,Checkout出來的工程是有編譯錯誤的,只有轉化爲BAE,才能將IDE的環境搭建好。編譯無問題。
2.3 規範化項目名稱,方便管理
1. 修改.project文件, 將工程名修改爲自己需要的工程名稱, 如下圖所示
2. 同時在工程名稱上按F2, 重命名爲修改的工程名,並提交修改
3. 編譯問題
3.1 靜態變量無法常駐內存
每次Servlet的調用,都會重新開啓一個ClassLoader,因此,你無需寫單例模式了。即使是同一個客戶端調用,BAE也會重新加載一個Servlet. 所以,變量是無法維繫的。
具體使用的方式是:
BaeMemcachedClient a = new BaeMemcachedClient();
Object obj = a.get("XXX");
if (obj == null)
{
//注意, mgrIndtance 需要是可序列化的實例,即其本身以及內部的對象都實現Serialiable接口
boolean value = a.add("XXX", mgrIndtance);
//返回true,則表示增加進去了,如果非序列化對象則會返回爲false
}
但這個會帶來新問題:
重新發布版本,不會讓Cache清空, 這個時候,建議寫一個獨立的Clean Servlet, 系統調用的時候, 將這些cache delete掉,這個是我暫時能想到的方法.
boolean delResult = cache.delete(ConstantConf.KEY_CACHE_CONF_MGR);
當然這個Servlet會獨立調用, 最好傳入用戶名和密碼進行身份驗證,避免不必要的清空(我的應用就是這這麼做的)。
1. 需要更新時, 不要以爲從 MemCache中獲取對象的引用, 更改完後能保存到MemCache中, 這樣做是無效的, 正確的做法: 用set方法, 將這個引用重新設置, 才能保存!
2. MemCache中存在的對象, 都需要採用序列化接口
3.2 Jar包統一放入lib文件夾,無需寫配置
由於本地環境配置了com.baidu.bdt.bae.java.SDK_CONTAINER,所以,很多jar包都在本地編譯和運行無誤,但是部署到BAE服務器將報錯。
典型的例子:
1. JSON解析
2. xml 解析
建議將IDE環境下用到的包,全部Copy到工程路徑的lib目錄下,IDE環境下包的位置爲:
Eclipse根目錄plugins\com.baidu.bdt.bae.java.sdkbundle_1.5.0.201210091104\sdk\
com.baidu.bae.api.lib
3.3 亂碼導致BAE服務端發佈失敗
一旦BAE發佈不成功,並且查看日誌,出現下面的亂碼, 需要修改編碼方式:
2012-10-2210:50:350 [javac] /*??????????*/
BAE服務端默認的編碼爲UTF-8, 因此我們建議統一編碼爲UTF-8,修改方式如下圖所示:
修改的時候,文本文件中中文部分將變成亂碼,注意修改這些亂碼。