为什么要学习Google Wave?如果你已经试过使用它,或者至少是已经看过介绍它的视频的话,那么你可能会只是把它当作另一个类似Gmail的富客户端Web应用而放过不提,这种看法并不完全正确,除此之外,Wave还是一个跨平台的开发和发布平台。
了解到创建有用的内容和服务的代价是多么昂贵和耗时,我们这些开发者当然希望通过把这些创造发布到多个平台上,这样就会使得我们的努力能够得到更多的回报,Wave平台刚好能够让你做到这一点(参见图1)。
图1. 整体框架:在多个客户端平台上重用数据和web service(全部托管在App Engine上)
Google Wave是一个协作平台,解决了在使用电子邮件协作时会存在的一些问题,通过允许多个合作者编辑某个位置上的同一个文档,使得保持整个文档(或者“wave”)完好变得更简单,而且文档更易于阅读。如果需要查看别人已经做了哪些改动的话,那么Wave观看器(Wave viewer)提供了一个滑动控制轴来按时间顺序回滚文档(wave),撤销所做的修改。如同在Wave演示视频中展示的那样,如果两个或多个人同时编辑一个wave的话,那么你几乎能够实时看到其他人的改动。
在创建了一个wave后,你可以邀请其他人读取和编辑该wave,本文解释了如何还能够邀请被称为Wave机器人(Wave Robot)的软件代理来读取和编辑wave,根据你对Wave机器人的配置情况,这些机器人会接收到其被邀请加入的wave的不同类型的事件通知。作为例子,你可以配置一个机器人来观察有人在编辑文档时每几次击键触发情况,或者是编辑者进行保存操作时的块修改触发情况。
如果你正在从事的项目需要支持多个面向用户的平台的话,那么花费一些额外的功夫来支持Wave将会非常有意义。(如果这不是学习Wave API和实际编写一些自己的Wave机器人的足够的理由的话,传闻在不久的将来Google会开一家Google Wave和Gadget的应用程序商店。)现在动心了吗?本文会帮助你走出第一步。
通过开发一个演示版的Wave机器人,本文展示了如何:
- 安装用Java开发的Wave机器人
- 编写一个Wave机器人应用
- 把Wave机器人当作web service的代理来使用,部署在其他平台上
- 在托管在Google App Engine(你部署Wave机器人的平台)上的现有的web应用上添加一个Wave机器人
作为服务代理的机器人
如果你现在没有在Google App Engine上做开发,没有现有的托管在自己的服务器(或者是Amazon、RackSpace、虚拟私有服务器(VPS)、Engine Yard、Heroku等)上的web service和web应用的话,你可能会想尝试一下图2中展示的架构,其使用了App Engine作为托管在其之上的web service代理可替换掉(App Engine)的部署平台。
图2. 以现有的web service/应用来进行App Engine开发:使用App Engine的机器人作为部署在另一个平台上的web service的代理
图2反映了本文中的Wave演示机器人的用例,尽管其使用了托管在常见的服务器上的现有的web应用。当演示机器人被邀请加入一个Wave时,它使用Wave的标题作为cookingspace.com的web service的搜索串,cookingspace.com是托管在我自己的服务器上的一个门户网站。CookingSpace提供了一个web service API:给出一个查询串,它会返回一个食谱列表,列表中的每一项都带有营养资料的注解。机器人处理从web service返回的JSON数据,并把零个或多个食谱插入到wave中。(注:在本文中,当我提到Wave平台时,我大写Wave的首字母,而当我指的是单个文档时,我使用小写的wave。)
作者注:Google Gadget(用HTML和JavaScript编写的Wave UI组件)的开发超出了本文的范围。 |
因为演示机器人充当另一个web service代理的角色,所以它不需要数据存储,可参考我之前的这篇关于App Engine的文章“在Google的Java版App Engine上实现文档存储和搜索”,以了解使用App Engine数据存储的例子。如果你在AppEngine上实现了一个完整的机器人的话,那么什么是最有可能出现的情形呢?你可能想要保持Wave的一些持久数据——这不太可能,不过你可能会需要在服务器端维持一些状态信息。尽管如此,但机器人通常是无状态的,他们从Wave平台上接收事件通知消息,再从事件通知消息中获取所有他们需要处理的信息。
安装开发环境
按照以下这些建议来最大限度地利用本文中的演示:
1.至少花费几分钟的时间来阅读一下Gooogle的文档“安装编写Java机器人所需的软件”,这些指南告诉你如何从头开始设置一个工程。
2.使用安装了Google App Engine插件的Eclipse。(不是必须的,但就真正的机器人开发和一般的Java AppEngine开发而言,我强烈建议这样做。)
3.下载演示机器人的代码和配置的压缩文件。
4.参阅RobotMessageBundle接口的API文档,在开发Wave机器人时这是值得添加到书签中的一页,因为你所需要的大部分API或者在这一页面中,或者能通过该页面中的链接访问到。
图3展示了如何使用Eclipse中的Google插件来创建一个工程。
图3. 使用Goolge插件创建一个新的App Engine工程:这是一个使用Eclipse的Google插件来创建新的App Engine工程的屏幕截图。
在设置自己的工程时——即使是使用Eclipse的Google插件——一开始需要从Google的Robot Java Client Libraries上下载wave-robot-api.jar、jsonrpc.jar、和json.jar的文件拷贝,并把他们复制到你的工程目录下的war/WEB-INF/lib目录中。图4展示了Eclipse中的工程目录树,这是在创建了一个新的App Engine工程和拷贝了三个JAR文件到war/WEB-INF/lib目录之后的情况。(可以注意到wave-robot-api.jar的文件名中包含了一个日期戳:wave-robot-api-20090916.jar。)
图4. Eclipse IDE中的App Engine工程:这是在创建了一个新的App Engine工程和复制了所需的JAR文件到war/WEB-INF/lib目录后Eclipse中的工程目录树。
[译文]使用Java编写你的第一个Google Wave机器人(下)
图2. 以现有的web service/应用来进行App Engine开发:使用App Engine的机器人作为部署在另一个平台上的web service的代理