JAVA BAE 问题总结

自己总结了一些在部署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


  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值