自己总结了一些在部署Java版的BAE中,得到的经验。
不做详述,最好描述一下团队组员情况
前提是你知道SVN插件的安装以及BAE插件安装。无误后,按照以下步骤进行:
下图所示的为某个工程的版本号1
checkout出来的工程,为一个普通的工程, 因此需要转化成BAE工程。同时,Checkout出来的工程是有编译错误的,只有转化为BAE,才能将IDE的环境搭建好。编译无问题。
1. 修改.project文件, 将工程名修改为自己需要的工程名称, 如下图所示
2. 同时在工程名称上按F2, 重命名为修改的工程名,并提交修改
每次Servlet的调用,都会重新开启一个ClassLoader,因此,你无需写单例模式了。即使是同一个客户端调用,BAE也会重新加载一个Servlet. 所以,变量是无法维系的。
陈葵<for_lich> 2012-10-22 20:03:19
回复 ostrichmyself: 请问BAE中,Java的静态成员变量每次都会被释放, 请问有什么替代方案吗? 可以让变量常驻内存 静态成员变量并没有每次被释放
陈葵<for_lich> 2012-10-22 20:04:34
只不过bae java环境是分布式集群环境,你的请求会随机分到某个web server处理。这种情况下你应该将数据保存在云数据库或cache服务当中
ostrichmyself 10:04:20
cache服务 是指什么? 请大牛提供相关资料、
ostrichmyself 10:06:25
java分布式集群环境, 同一个客户端对服务端发起请求, static变量需要重新new, 貌似也不符合规则吧
上吊de鱼<tianice1234> 10:08:47
集群的负载均衡没有黏贴session,session做的复制,当然符合规则了
孟宪森<tjudream> 10:10:06
回复 ostrichmyself: cache服务 是指什么? 请大牛提供相关资料、 http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E4%BA%91%E7%8E%AF%E5%A2%83/JAVA%E6%9C%8D%E5%8A%A1%E5%88%97%E8%A1%A8/Cache
首页>帮助文档首页>云环境>JAVA服务列表>Cache
具体使用的方式是:
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);
1. 需要更新时, 不要以为从 MemCache中获取对象的引用, 更改完后能保存到MemCache中, 这样做是无效的, 正确的做法: 用set方法, 将这个引用重新设置, 才能保存!
2. MemCache中存在的对象, 都需要采用序列化接口
由于本地环境配置了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
一旦BAE发布不成功,并且查看日志,出现下面的乱码, 需要修改编码方式:
2012-10-2210:50:350 [javac] /*??????????*/
BAE服务端默认的编码为UTF-8, 因此我们建议统一编码为UTF-8,修改方式如下图所示:
修改的时候,文本文件中中文部分将变成乱码,注意修改这些乱码。