Google App Engine开始支持Java+初步感觉

标签:Google App Engine, Java

中午看到了这则消息,然后就立即登录Google App Engine,发现页面上方有个Java的试用链接。
进去后点accept按钮,然后收到一封邮件,通知我的GAE开通Java支持了。
还没开通的就抓紧时间吧,只有10000个试用名额哦~

不过由于工作很忙,也就没空看细节了,而是留到回家再看。
首先是GAE官方博客的这篇《Google App Engine Blog: Seriously this time, the new language on App Engine: Java》
注意其用词:Please welcome the Java runtime!
是Java运行环境,而非单指Java。也就是说,JVM上能跑的,GAE都能跑。例如文中列出的Groovy、Scala和JRuby。你可能注意到没列出Jython,实际上肯定也是支持的,不过你为何不干脆使用Python呢~

Google除了准备GAE的SDK for Java,还弄了个GAE的eclipse插件(支持eclipse 3.3和3.4),毕竟它是最受推崇的Java IDE。
不过要注意,如果你在中国,下载SDK会转到中文页面,而中文页面已经几个月没更新了,上面是没有Java的SDK的。你需要切换到英文界面(在右上角可以切换)。
还有一点要吐槽的是,Java的SDK是Python的SDK的7倍大(原因是示例程序很庞大)。

顺便简要介绍一下(怎么写完后感觉是在抨击Java):

这次开放的JVM是Java 6,这也是个非常成熟的版本了,并同时支持Java 6和Java 5(因为基本上向下兼容)。使用的东西也是熟悉的servlet和JSP,还有XML配置文件。

数据库提供了2套接口:标准API和低级API,而标准API又分为 Java Data Objects (JDO) 2.3和Java Persistence API (JPA) 1.0,却没有常见的JDBC。
稍微看了看JDO,Java程序员真命苦啊,Python写7、8行的代码,Java得写2个文件,一大堆的配置、import和带有annotation的实体定义,加起来怕是有50行…数据类型也少了不少,只有一些基本类型。
数据库访问也要自己定义一个PersistenceManagerFactory,存储数据时还得用它来makePersistent一下,而且还有个丑陋的try,比Python要麻烦多了(Python是直接创建模型对象,再调用其put方法即可存储)!
JPA和JDO实际上也差不多,语法非常接近,也就意味着同样麻烦…
至于低级API,我甚至没觉得比标准API麻烦,可见标准API的封装是多么无语…

使用用户服务时,Java需要3行的import代码,并调用2个函数(方法)来获取当前用户;而Python只是1行import+1个获取函数,可见其复杂性。
使用记录(log)服务时,Python只需import便可使用,而Java却还得配置appengine-web.xml和logging.properties这2个文件,是不是很吐血?(2者的log都是标准模块/类库,不能怪GAE的API了。)
配置应用程序时,Java需要web.xml和appengine-web.xml2个文件,配置也比Python的app.yaml麻烦很多,需要多2倍以上的代码量(而且每行代码都比app.yaml长2倍左右),且不支持*通配符(准确来说,静态文件支持,不过那只是一一映射,完全没有技术含量)。
由于Java是静态的,一旦启动服务,更改url配置也不会再有影响,这点也不如Python方便;不过有点要赞一下,启动速度比Python快很多(大概只有Python的1/4的时间)。
有空我去做个数据库性能测试,看看使用Java和Python有多大差异。希望能打击到Java控们,哇哈哈~

顺便提下JSP,如果只装了JRE,则JSP的应用是无法运行的。如果出现有关javac的错误提示,就去安装JDK吧。(不过Java开发者应该都装了的吧…)

此外粗略看了下限制,多线程给禁止了,并且有个新的总文件大小限制(150MB),单个数据库实体限制为1MB(以前好像是每个属性1MB),单次put和delete的批操作也被限制到500个实体内了…顺便吐槽下,Java里不是用put,而是一个很麻烦的makePersistent方法,你可以看到有很多处Java文档居然都是直接抄袭Python。
顺便还给出了index的限制:在一个index里,每个实体最多有1000个值(不使用list属性时一般不会超过)。

11条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?