解惑

解己之惑,解人之惑

标签:GAE

GAE+ ZK没有那么成熟

开始的感觉都还不错,把原来为公司做POC的一个项目拷贝过来修改修改就可以跑了,在本地基本可以用,但是有些问题:

  • 添加修改数据的窗口不能用Modal窗口,错误消息是:Event processing thread is disabled(这个是因为ZK+GAE本来就需要把事件线程disable掉,因为GAE里面不能开线程)
  • 把Modal窗口修改成Popup窗口,本地是好的,但是上传到GWT没有反应也没有报错。

经验也会帮倒忙

本来打算那个Notes-all用Google的全套解决方案的,就是用GWT + Google App Engine,看了下GWT的Sample,发现还是比较麻烦,但是感觉思路和ZK还是很像的,就打算比较下GWT和ZK,结果发现有人说可以把ZK成功发布到Google App Engine,试了下,果然是可以的,有兴趣的可以试试(在ZK网站可以下载zk-gae的sample,基于这个很容易建立自己的工程)。
基于我玩过一段时间的ZK,当然用ZK更方便了。
今天把原来的东西复制过去了,在做国际化的时候,用Eclipse编辑properties文件,里面有中文,不能保存,只能保存ISO-8859-1编码的内容。后来想着应该装个插件,下载了,好使,但是运行起来发现并没有把转码的内容显示为正确的中文,很奇怪。后来怀疑ZK读取properties文件的时候和Java读取国际化文件不一样,把properties文件的编码修改为UTF-8,然后直接用文本编辑器输入中文内容,运行测试,正常!
这个就是一般的国际化处理的经验造成的问题。
最后说一下,对ZK的这个违反Java惯例的方式赞一下,因为我一直对Java的这个需要把properties国际化文件用native2ascii转换的过程很鄙视,不知道谁这么设计的。ZK是以UTF-8读取properties文件的,不做任何转换。

更新:
可以修改Eclipse,让它对properties文件不强制使用ISO-8859-1编码保存:
eclipse –> window –> Preferences –> General –> Content Types –> Text –> 单击 Java Properties File,把底部的Default edcodng从ISO-8859-1改成utf-8,然后update。

GAE的严重问题

在你动手开发GAE应用之前,最好先考虑下你的应用是否真的可以跑在GAE上,如果不仔细看它的开发手册,你很可能会漏掉一个严重的问题:

Inequality Filters Are Allowed On One Property Only

A query may only use inequality filters (<, <=, >=, >) on one property across all of its filters.

For example, this query is allowed:

select from Person where birthYear >= minBirthYearParam
&& birthYear <= maxBirthYearParam

However, this query is not allowed, because it uses inequality filters on two different properties in the same query:

select from Person where birthYear >= minBirthYearParam
&& height >= minHeightParam // ERROR

Filters can combine equal (==) comparisons for different properties in the same query, including queries with one or more inequality conditions on a property. This is allowed:

select from Person where lastName == lastNameParam
&& city == cityParam
&& birthYear >= minBirthYearParam

The query mechanism relies on all results for a query to be adjacent to one another in the index table, to avoid having to scan the entire table for results. A single index table cannot represent multiple inequality filters on multiple properties while maintaining that all results are consecutive in the table.

这个限制很直接,就是非等于的过滤条件只能应用到一个字段(属性)上,原来在关系型数据库上很简单的一些查询,到了GAE上就变得不可行了。

在开始开发GAE应用前,先考虑清楚你的应用是否会不可避免的碰到这个问题,或者是否可以放弃很多功能,看来便宜不是那么好占的。

SaaS和PaaS

昨天和Bruce聊天谈到这个,其实这两个概念并不神秘,SaaS就是Software As A Service,而PaaS就是Platform As A Service,这两个概念目前做得最成功的就是salesforce了,因为salesforce的成功,他们把salesforce背后的硬件基础设施和通用的软件基础设施抽取出来,变成了force.com,也就是PaaS。当然,在这两个概念之下又有人搞出了很多aaS:
XaaS
如果一个公司想推PaaS,那么如果他自己没有一个成功的SaaS产品是不可能的,因为没有可信度,就像Google推广GAE很有底气,Salesforce推广force.com一样,他们有自己成功的platform,而且已经被自己证明是真实可行的。
现在也已推出的PaaS平台,除了force.com和GAE外,还有一个比较有名的就是Amazon的EC2,但是个人觉得EC2只能算是HaaS,因为没有强有力的软件平台以及公共基础设施,还是停留在硬件虚拟化的层面。
推荐另外两篇文章:
当今云计算平台之肤浅比较(EC2, GAE, GoGrid)
Cloud versus cloud: A guided tour of Amazon, Google, AppNexus, and GoGrid

GAE支持Java了

今天同事发的邮件知道了这件事情,确信不是愚人节节目了。
http://code.google.com/intl/zh-CN/appengine/docs/java/gettingstarted/
http://code.google.com/intl/zh-CN/appengine/docs/java/overview.html
http://code.google.com/appengine/docs/java/tools/eclipse.html

看来我的my-scrum得迁移语言了,虽然Python是很好的尝试,但是还是更加熟悉Java一些。

© 2020 解惑

本主题由Anders Noren提供向上 ↑