Java 开发 2.0: 您也可以租用 EC2 之一

Java 开发 2.0: 您也可以租用 EC2



在本期  Java 开发 2.0 中,Andrew Glover 介绍如何针对 Amazon Elastic Compute Cloud (EC2) 进行开发和部署。了解 EC2 与 Google App Engine 的差异,以及如何使用 Eclipse 插件和简洁的 Groovy 语言在 EC2 上快速地建立和运行简单的 Web 应用程序。
云计算空间

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

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

您可能听说过 Standish Chaos Report,这份每年一次的报告研究成功和失败的 IT 项目(见 参考资料)。 这份报告常常包含大量坏消息。(如果都是好消息,它就不应该称为 Chaos Report 了,对吗?)2009 年的报告指出,百分之 44 的 IT 项目由于各种原因出了问题。原因之一是项目超出预算。很容易想到导致项目超出预算的几个原因。例如,程序员的薪酬并不低。基础设施也是影响成本的因素之 一。

正如本系列第一篇文章(“使用 Google App Engine”) 中指出的,Java™ 开发 2.0 的关键方面之一是,软件生产者现在可以不必维护高成本的内部基础设施,而是采用另一种替代方法。几年前,几家明智的公司开始利用硬件(及相关软件)的 “商品化”,它们构建了由大量廉价机器组成的系统,在这样的系统中即使某些机器出现故障,整个基础设施仍然可以继续运转。这些公司(比如 Google 和 Amazon 等)拥有庞大的基础设施,可以借给你我这样的人(同时保持其核心业务运行顺畅)。因此,云计算的概念现在变成了现实。如果您正在为 IT 项目制订预算,那么为了自己(和公司的利益)着想,应该研究一下从 Google 或 Amazon 租借基础设施是否比自己购买硬件便宜。

关于本系列

自 Java 技术出现伊始,Java 开发领域发生了巨大的变化。得益于成熟的开放源码框架和可靠的可租借部署基础设施,现在我们能够以很低的成本快速组装、测试、运行和维护 Java 应用程序。在这个文章系列中,Andrew Glover 探讨使这种新的 Java 开发范型成为可能的技术和工具。

EC2 的不同之处

Google 和 Amazon 的租借基础设施很不一样。正如在 前一篇文章 中看到的,Google App Engine 更像是用于开发 Java Web 应用程序的平台。无法使用 Java 领域中可用的任意工具和框架,比如 Hibernate。例如,只能使用 Google 的 Big Table。但好处是可以把驻留的解决方案扩展到您需要的任何规模。(请记住,当您的 Google App Engine 网站达到带宽或空间上限之后,Google 就会向您收费)。

Amazon EC2 提供的不像是开发平台,更像是通用的基础设施服务,它提供虚拟机器(可以是基于 Linux®、OpenSolaris 或 Windows® 的),可以在这些虚拟机器上运行任何程序。EC2 不是免费的,但是它比 Google App Engine 灵活得多。只要可以创建或租借虚拟机器,就可以运行任何 Java 应用程序(包括使用 Hibernate 的 Java 应用程序)。(Amazon 和它的社区提供完整的预配置虚拟机器目录,这种虚拟机器称为映像)。与 Google App Engine 一样,可以非常高效地把应用程序扩展到面向全球用户,但是部署应用程序的位置和扩展方式主要由 Amazon 控制。(Amazon 也允许选择几个地理区域来部署应用程序)。

Amazon 提供了相关的 Eclipse 插件,帮助创建可以使用这个平台的应用程序。与使用 Google App Engine 插件时的情况相反,EC2 的灵活性很容易导致情况复杂化。例如,通过使用 Amazon 的 EC2 Eclipse 插件,很容易把 Apache Tomcat Web 应用程序(不包括数据库)部署到使用 EC2 的可配置集群上。但是,如果要实现这种基本用例之外的其他解决方案,比如使用 EC2 上已经部署的 MySQL 实例或使用 Amazon 的 SimpleDB,就需要多费些精力了。

在本文中,我将讲解如何快速简便地创建一个简单的应用程序,它通过 Eclipse 在 Amazon 基础设施上使用 Groovlet。除了开发用的机器之外,您不需要任何硬件,也不需要为将使用的任何软件支付许可证费用。(必须为在 Amazon 的基础设施上驻留代码支付很少一部分费用)。


EC2 入门

EC2 是廉价的

使用 “小实例” — 用于运行简单应用程序的映像,它们并不使用大量空间或内存 — 每小时收费 10 美分。带宽费用为收发的每 1GB 数据大约 30 美分。还可以 “租借” IP 地址,每小时收费 1 美分(但是会保留它大约两天)。部署和测试本文的应用程序大约花了我 60 美分。应该说这很便宜,我今天喝咖啡就花了 3.50 美元。

要想 使用 EC2,必须创建一个 Amazon Web Services (AWS) 账户。如果您还不是注册的 Amazon 客户,就需要提供信用卡号码 — EC2 不是免费的(但注册是免费的)。注册之后,您会收到一个 Access Key ID 和 Secret Access Key,这是安全地使用 EC2 所必需的。

对于使用 AWS for Eclipse 插件,Amazon 建议使用 Eclipse 3.5;否则,需要先安装一些组件,这些组件在这个最新 Eclipse 版本中是默认的。因为您要创建和部署 Web 应用程序,我建议使用 Eclipse IDE for Java EE Developers,它包含一个漂亮的 Java EE 透视图,支持构建 Web 应用程序。

安装 AWS 插件套件

与安装其他 Eclipse 插件一样,要想安装 Amazon 的 AWS 插件,必须在 Eclipse 中通过 Help > Install New Software 找到插件的最新版本。Install 对话框打开之后,在 Work with 文本框中输入 http://aws.amazon.com/eclipse。文本框下面会出现可用插件列表,见图 1。选择整个 AWS Toolkit for Eclipse 选项,然后单击 OK。接受许可协议之后,Eclipse 安装这个插件。很可能需要重新启动 Eclipse。


图 1. 下载 AWS 插件
Java 开发 2.0: 您也可以租用 EC2 之一_第1张图片 

这个 Eclipse 插件允许指定 Web 应用程序的目标运行时环境。对于本文,将使用 Tomcat 6,所以需要先 下载 并安装 Tomcat 6。尽管将把 Web 应用程序部署到 EC2 上,而 EC2 运行一个 Tomcat 服务器集群,但是仍然希望在本地测试和运行应用程序,因为这是免费的。




   

创建 Groovy Web 应用程序

在开始演示如何配置 EC2 之前,先用我最喜欢的快速开发语言 Groovy 创建一个简单的 Web 应用程序。正如我在 “使用 Google App Engine” 中提到的,Groovy 本质上是 Java 语言,但是语法没那么复杂(见 参考资料)。 例如,典型的 Hello World servlet 大约有 6 到 10 行 Java 代码(取决于是否计算导入语句等)。无论如何计算代码行数,我可以保证用 Groovy 编写的 Hello World servlet(Groovlet)更短;实际上,可以用 Groovy 编写的最简单的 servlet 只有一行代码。

在 Eclipse Java EE 透视图中,在 project explorer 中右键单击并选择 New > Dynamic Web Project。如果您以前没有创建过项目,也不必担心 — Eclipse 可以区分静态的 Web 项目(使用 HTML 页面)和动态项目(有 servlet 等服务器端资源)。

选择 Dynamic Web Project 选项之后,出现一个对话框,可以在其中配置项目的各个方面,比如目标运行时环境和 Servlet 版本。一定要选择 Tomcat 6。(可能还需要告诉 Eclipse 安装 Tomcat 6 的位置)。配置选项保持默认设置。

可以选择保存源代码文件的位置。我通常保持其为 src 目录不变。最后,必须告诉 Eclipse 上下文根 — 也就是将在 Web 应用程序的 URI 中使用的名称。一定要选择一个简单的名称。还需要为 Web 内容文件夹选择名称,这里保存静态文件和 Groovlet。

单击 Finish,插件的安装就完成了。

设置 Groovy 依赖项

要想使用 Groovy,必须做两个修改。首先,在项目的类路径中添加 groovy-all JAR(到编写本文时版本是 1.6.4)。还需要更新 WEB-INF 目录中的 web.xml 文件。这个文件把 Web 请求映射到 Groovlet — 如果您按 Java 开发 2.0:使用 Google App Engine 实践过,应该执行过这个步骤。web.xml 文件应该像清单 1 这样:


清单 1. 支持 Groovlet 的 web.xml 文件

<servlet>
<servlet-name>GroovyServlet</servlet-name>
<servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GroovyServlet</servlet-name>
<url-pattern>*.groovy</url-pattern>

编写 Groovlet

最简单的 Groovlet 只有一行,它使用 println 输出 “Hello World”。我们将用一些 HTML 代码增加一些情趣。Groovy 支持 Builder 的概念,Builder 是用于定义层次化数据结构的逻辑机制(见 参考资料)。 可以使用 Groovy 的 Builder 简便地模仿 XML 和 HTML 等标记语言,甚至是模仿 Swing 等框架的 GUI。可以快速地创建 HTML 标记,而不需要处理 HTML(不需要尖括号!)。最简单的使用 HTML 的 Groovlet 使用 Groovy 的 MarkupBuilder,在这种情况下 Groovlet 以 html 变量的形式存在。例如,清单 2 给出一个使用 HTML 的简单的 Hello World Groovlet:


清单 2. 非常简洁的 Groovlet

html.html {
head {
title("Hello from EC2")
}
body {
p("Hello from EC2!")
}
}

代码就这么多。仅仅几行代码就会生成格式良好的 HTML,其中有一个 <head> 元素,后面是 <title>,然后是 <body> 元素和一个段落,太简单了。创建文件 EC2Groovlet.groovy,在其中输入清单 2 中的代码。把这个文件也保存到 Web 内容目录中。

希望创建 XML?很容易。不想让视图与控制器混在一起?没问题,使用 GroovyServer Page (GSP) 或 JavaServer Page (JSP) 就可以。无论您喜欢哪种方式,用 Groovy 编写 servlet 都非常容易。现在看看在 EC2 上使用 servlet 是多么容易。

作为最后一步,在项目的上下文根中创建一个简单的 index.html 文件。这个文件会给以后提供方便,因为在 Eclipse 中访问 EC2 时,Eclipse 访问的 URL 是上下文根;如果没有找到 index.html 文件,就会收到来自 Tomcat 的错误页面。在 index.html 中创建 Groovlet 的相对链接。

例如,我的 index.html 像清单 3 这样:


清单 3. 指向 Groovlet 的简单 index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert any old title here!</title>
</head>
<body>
<p><a href="EC2Groovlet.groovy">Groovy is slick!</a></p>
</body>
</html>

容易的工作完成了。现在看看 EC2。


</servlet-mapping>

现在,可以用 Groovy 编写一些东西了。

你可能感兴趣的:(java,eclipse,html,servlet,Google,groovy)