自己总结了一些在部署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,修改方式如下图所示:
修改的时候,文本文件中中文部分将变成乱码,注意修改这些乱码。