GAE开发注意事项总结-阿里云开发者社区

开发者社区> 余二五> 正文

GAE开发注意事项总结

简介:
+关注继续查看
GAE(Google App Engine)是目前最受欢迎的云计算平台之一。特别是其对JAVA的支持,更是让许多人为之振奋。GAE的文档还算是比较丰富,不过仍然有一些让人迷惑的地方,本文将这些地方一一作出总结和说明,希望对GAE开发者有所帮助。
GAE支持JAVAPython(以后或许支持更多的)。这里仅讨论JAVA

JSP方面:
GAE支持JSP页面,但是默认并不启用JSTLEL表达式,很多开发者嵌入EL后发现出现奇怪的结果。若要启用JSTL,则需要做下面几个工作:
1,每个JSP顶部,加入以下语句
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8"isELIgnored="false"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

2,将web.xml文件头部修改为以下形式,这一步也很重要, 网上现在有很多文章只说明了第一步,事实上还需要这一步。
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd"> 
这两步完成以后即可使用JSTL了。

Web方面:
1,默认情况下GAE并不启用Session。若要使用之,则需修改/Web-INF/appengine-web.xml文件,在根元素下加入这样的语句
  <application> 
    <sessions-enabled>true</sessions-enabled> 
  </application> 

另外一个需要注意的就是,尽量不要在Session中储存数据量较大的数据,这样做很可能会导致数据不同步的情况(这种现象很难调试)。一般来说仅仅在Session中放入一个标志(Key)即可,主体的数据应持久化或者放入memcache。不过有时memcache会因为某种原因比如服务器负载太高而失效,所以若这种现象是不可忍受的,则还是进行持久化比较保险。
2,每次请求时间必须控制在30sec以内,若超过这个时间GAE会自动终止该次请求。最消耗CPU时间的是数据库操作。

 


数据持久化方面:
GAE使用JDO或者JPA来进行数据持久化。和传统的关系型数据库相比,这种储存方法似乎更适合于互联网应用。一般来说,JDO的使用非常简单,不过这里仍然存在大量的陷阱,同样也是难以调试发现的。
1,每个欲持久化的类均必须有一个主键。主键不能是基本类型,只能装箱使用。最常见的就是Long(不要写成long)。

2,类之间尽量不要耦合 ,如Employee类中含有一个对Profile类的引用,这样也会导致持久化失败。虽然GAE文档中有说明可以通过某种方式来支持,不过我试验的结果表明还是难以使用。因而如果要耦合,则应使用一个普通的字段储存被耦合类的主键即可。查询的时候根据这个主键再作一次查询。为了提高性能,可以将查询出来的数据放入memcache中,这样可以减少查询次数。

3,由于查询操作比较消耗CPU,所以应尽量减少查询次数。为此可以使用DTOData Transfer Object)模式 ,将多个领域对象组装为一个DTO对象进行持久化;查询的时候一次性查出所需的数据,然后再分解DTO
4GAE不支持对 Map类型的集合类进行持久化 

5,在本地进行GAE项目调试的时候,默认的数据库位置是/WEB-INF/appengine-generated/local_db.bin。特别需要注意的是每次重新启动服务器并不会自动删除数据库中已有的内容。可以手动删除之以达到数据清空的目的。









本文转自 kevx 51CTO博客,原文链接:http://blog.51cto.com/spinlock/487213,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
双11特刊 | 一文揭秘云数据库RDS如何顺滑应对流量洪峰
从绿色低碳到硬核科技,看RDS如何用绿色科技助力2021“双11”?
3 0
高频面试题-请聊一下JVM的内存结构!
凡是三年以上开发经验的人,都会在简历上写上这么一句话,了解/熟悉JVM(内存结构),对垃圾回收机制有一定的理解。 但是往往大部分人是一问三不知的,或者是没准备充分,又或者是根本就是瞎编,最起码背一下概念,说不准面试官也不会呢。 接下来的文章会围绕着JVM、JMM、垃圾回收算法、垃圾回收器、如何调优几个方面的知识来聊一下。
5 0
Java 16 正式发布,新特性一一解析
3 月 16 日,甲骨文正式发布 Java 16。甲骨文表示,现在为所有开发人员和企业提供 Java 16。
6 0
关于 SAP 产品 UI 的搜索引擎优化 SEO - Search Engine Optimization
关于 SAP 产品 UI 的搜索引擎优化 SEO - Search Engine Optimization
3 0
java 自定义表单 挂靠流程 模块设计方案
java 自定义表单 挂靠流程 模块设计方案
3 0
解构腾讯产业互联网独门心法:「让火车与坦克接轨」
作为全球最大的互联网公司之一,腾讯的产业互联网之路,必然是要符合当下市场底层逻辑和基因优势的。 梳理出这条路子,不仅对于腾讯自身至关重要,也能够让外围看清时代潮水的流向,深刻理解互联网下半场的机会窗口。以及更重要的,意识到五到十年后变化所带来的价值。
4 0
Redis教程10(事务)
redis是NOSQL数据库,所以也存在事务,只是此事务和关系型数据库的事务是有区别的。
3 0
使用开源微前端框架 Luigi 创建一个基于微前端架构的工程
使用开源微前端框架 Luigi 创建一个基于微前端架构的工程
4 0
+关注
12613
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载