Google App Engine Java 版上构建电子书分享网站


文档选项
将此页作为电子邮件发送

将此页作为电子邮件发送

样例代码

级别: 初级

张 军, 软件工程师, IBM 中国软件开发中心

2009 年 10 月 27 日

“云计算”是目前热门的技术方向,本文从 Google 的云计算平台 App Engine 入手,简单介绍了 Google 面向 Java 开发人员的云计算平台。从一个实际的电子书分享应用构建出发,讲述了如何在 Google App Engine 平台上构建这个应用程序。

“云计算”基本概念的介绍

云计算空间

您是否希望随时获取最新的云计算消息?是否想得到云计算相关的技术知识?developerWorks 云计算空间就是这样一个云计算信息资源的门户,在这里您可以了解来自 IBM 和业界其他媒体的最新信息,并且得到如何在云环境中使用 IBM 软件的入门知识。

IBM 在 Amazon EC2 云计算环境中提供了 DB2、Informix、Lotus、WebSphere 等方面的 AMI 镜像资源。您只需按使用量支付少量费用,就可以使用到云上的数据、门户、Web 内容管理、情景应用等服务。欢迎您随时访问 云计算空间,获取更多信息。

根据维基百科上的定义,云计算是一种动态易扩展,而且通常是通过互联网提供的虚拟化的资源计算方式, 用户不需要了解云内部的细节,也不必具有云内部的专业知识,或者直接控制基础设施。云计算包括基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)以及其它依赖于互联网满足客户计算需求的技术趋势。云计算服务通常提供通用的通过浏览器访问的在线商业应用,软件和数据存储在服务器上。本文的介绍主要在“平台即服务”这个层次上。在这个层次上,Google 所提供的技术即 Google App Engine 。

Google 的“云计算”平台

Google 作为一个搜索引擎,在其发展过程中不断地追求更高的可伸缩型和性能,逐渐发展出一套以自由技术为基础的良好的解决方案,其中包括 Google File System、BigTable 以及 Map Reduce 等。基于这些技术,Google 发展出了称之为 App Engine 的平台,可以允许开发人员在它之上开发应用,同时也利用上了 Google 所提供的基础设施,在可扩展性等非功能性的需求上获得好处,从而可以更加集中精力地解决业务的需求。

Google App Engine 最早于 2008 年 4 月发布,最初支持的开发语言是 Python 。今年 4 月,Google App Engine 已经宣布了对 Java 语言的支持。下图是 Google App Engine for Java 支持的概览。


图 1. Google App Engine for Java 支持的概览
图 1. Google App Engine for Java 支持的概览

在 Web 应用开发上,Google App Engine 支持 JSP 和 Servlet 技术;在数据存储上,Google App Engine 支持 JDO 和 JPA 两套机制,开发人员在面向对象的层次考虑数据的持久化,不需要考虑关系数据库。此外,Google App Engine 还提供一系列常用的服务,例如邮件收发、图像处理和缓存等。

本文将通过一个简单的实例来展示如何在 Google App Engine for Java 平台上构建 Web 应用。

准备开发环境

Google App Engine 支持两种开发方式:基于集成开发工具 Eclipse 和不基于 Eclipse 。由于 Eclipse 是广大 Java 开发人员使用最多的工具,本文将介绍基于 Eclipse 安装 Google App Engine SDK 并开发部署应用到 Google App Engine 上。下面是简要的过程:

  • 安装 JDK 1.5 或者 1.6

    App Engine 现在支持 Java 1.5 版本以上的 JDK,可以从 这里 下载。

  • 安装 Eclipse 3.3 或者 3.4

    下载 3.3 以上版本的 Eclipse 中的一款即可。

  • 安装 Google App Engine 的 SDK

    运行 Eclipse 之后,在 Help > Software Updates 中获取 Google App Engine 的插件。



    图 2. 安装 Google App Engine Eclipse 插件
    图 2. 安装 Google App Engine Eclipse 插件

    Eclipse 3.3(Europa), 从这里 下载 安装。

    Eclipse 3.4(Ganymede),从这里 下载 安装。

构建一个 Hello World 应用

  1. 安装成功之后,就可以构建一个 Google App Engine 的应用了。选择 File>New>Web Application Project

    图 3. 新建 Web 项目
    图 3. 新建 Web 项目
  2. 输入项目名称 Hello World 。

    图 4. 输入项目名称
    图 4. 输入项目名称
  3. 运行该应用。

    图 5. 运行
    图 5. 运行
  4. 应用运行起来之后,访问 http://localhost:8080 。

    图 6. 运行结果
    图 6. 运行结果
  5. 将应用部署到 Google App Engine 上

    恭喜您,到这里,你已经构建出了第一个 Google App Engine 上的应用,您可以将它部署到 Google 的 App Engine 平台上了。您需要做的就是申请一个帐号。

构建一个电子书分享网站

到这里,读者对 Google App Engine for Java 已经有了直接的印象。下面将通过一个更复杂的例子,讲述利用 Google App Engine 中的编程时的核心概念。

用例介绍

一个电子书分享网站,最基础的需要满足的功能是允许用户上传文件和搜索文件。对于用户的浏览需求,列出最近上传的文件也是一个基本的需求。用例图如下图所示。


图 7. 用例图
图 7. 用例图

存储对象模型

存储模型是一个应用开发的核心之一,在 Google 的 App Engine 的平台,开发人员看不到数据库的概念,不需要创建数据库。 Google 的 App Engine 提供了基于 JPA 和 JDO 的两种技术给开发人员。这里我们利用 JDO 技术来做数据的存取。下面是电子书分享网站的 JDO 的对象模型。


图 8. JDO 对象模型
图 8. JDO 对象模型

示例演示:上传电子书的用例

下面针对用户上传一个文档这个用例,讲述如何实现这个功能。

构建上传文件页面

在工程的 war 目录下,添加一个新的文件 upload.html,在该文件中包含如下的代码。

<form method="post" action="upload" enctype="multipart/form-data">
    <table>
        <tbody>
            <tr><td><strong>*Please select a file</strong></td></tr>
            <tr><td><input name="efile" type="file" id="fileNode"></td></tr>
            <tr><td><strong>*Please set the file's title</strong></td></tr>
            <tr><td><input name="filename" type="text" size=60></td></tr>
            <tr><td><strong>File tags</strong></td></tr>
            <tr><td><input name="tags" type="text" size=60>
			    <label>seperate by whitespace, like 
				    <i><b>Google appengine</b></i>
				</label></td>
			</tr>
            <tr><td><strong>File description</strong></td></tr>
            <tr><td>
			    <textarea name="description" rows="5" cols="50"></textarea>
			</td></tr>
            <tr><td><strong>your name</strong></td></tr>
            <tr><td><input name="username" type="text" size=60></td></tr>
            <tr><td><strong>your email</strong></td></tr>
            <tr><td><input name="useremail" type="text" size=60></td></tr>
        </tbody>
    </table>
    <input type="submit" value="upload">
</form>

构建文件上传处理的 servlet

利用 apache 的 commons 的文件上传的库,该 servlet 将上传的内容解析成 File 对象。


图 9. Servlet 模型
图 9. Servlet 模型

持久化改文件

应为 File 类已经添加了 JDO 需要的注释,如下。

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class File {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private String username;

    @Persistent
    private String useremail;

    @Persistent
    private Date uploadDate;

    @Persistent
    private String filename;		//could be a filename or a url...

    @Persistent
    private String description;	//could be a filename or a url...

    @Persistent
    private String mimeType;	//pdf,ppt, chm etc. 

    @Persistent
    private com.google.appengine.api.datastore.Blob file;

    @Persistent
    private Set<Key> tags = new HashSet<Key>();		// associated tags

利用 JDO 的规范提供的 API,可以持久化该对象到 Google 的 App Engine 的存储设施上。

PersistenceManager pm = PMF.get().getPersistenceManager();
try {
    pm.makePersistent(file);
} finally {
    pm.close();
}

注意,这里需要首先在在项目的 classpath 的 META-INF 目录下有 jdoconfig.xml,其内容如下。

<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">

    <persistence-manager-factory name="transactions-optional">
        <property name="javax.jdo.PersistenceManagerFactoryClass"
            value="org.datanucleus.store.appengine.jdo.
			    DatastoreJDOPersistenceManagerFactory"/>
        <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
        <property name="javax.jdo.option.NontransactionalRead" value="true"/>
        <property name="javax.jdo.option.NontransactionalWrite" value="true"/>
        <property name="javax.jdo.option.RetainValues" value="true"/>
        <property name="datanucleus.appengine.autoCreateDatastoreTxns" 
		    value="true"/>
    </persistence-manager-factory>
</jdoconfig>
 

小结

本文介绍了云计算领域的一个重要厂商 Google 的 Appengine for Java 的开发平台。通过一个实际的例子讲述了如何使用该平台开发 Web 应用。






回页首


下载

描述名字大小下载方法
本文样例代码SampleCode.zip98 KBHTTP
关于下载方法的信息


参考资料

学习

获得产品和技术
  • 本文中的部署在 Google App Engine 上的 样例应用

讨论


关于作者

 

张军,2006 年 7 月毕业于清华大学计算机科学与技术系,获得硕士学位。随后加入 IBM 中国软件开发中心,一直在 Web 2.0 组从事新兴技术研发。



转自:http://www.ibm.com/developerworks/cn/java/j-lo-gap/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值