JAVA BAE 问题总结

本文分享了在部署Java版BAE过程中积累的经验,包括环境搭建、编译问题解决、缓存服务使用、Jar包管理和乱码问题处理等关键内容。

自己总结了一些在部署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. 所以,变量是无法维系的。

陈葵<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);

当然这个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,修改方式如下图所示:

 

 

修改的时候,文本文件中中文部分将变成乱码,注意修改这些乱码。


3.4  添加用户日志


Log4j.properties文件放在WEB-INFO根目录下

选择对应版本查看日志, 已经发布的版本,查看线上版本。 这个非常有用, 因为BAE服务端的环境跟客户端的环境完全不同, 服务端定位问题,不能靠Debug,只能用打印日志的方式。

另外,对于BAE提供的功能, 做充分的测试之后再使用, 比如利用其中一个配额的工程,专门做测试。 不轻易使用产品库做实验。 这样避免带来资源的浪费,以及管理的不便。

4. 发布环境

提交代码即可发布,不过要等待的时间非常久. 不需要Deploy to BAE


评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值