转载

Bluemix 基础:将一个示例 Java 应用程序部署到云中

 

概述

使用 Java™ 开发人员已经熟悉的语言和工具,开始在云中工作。在本教程中,学习如何使用 Java 语言和 IBM Bluemix™ Tools for Eclipse 来运行、修改、测试一个简单 Web 应用程序,并将其部署到云中。在将应用程序部署到 IBM 云开发平台 Bluemix 后,任何人都可以通过网络访问它。

本教程是 developerWorks 上的 “Bluemix 基础” 教程系列中的一篇文章。

 

您将在本教程中完成的任务

 

第 1 步. 下载代码

第 2 步. 将 WAR 文件部署到 Bluemix

第 3 步. 将应用程序导入您的 Eclipse 工作区中

第 4 步 4. 检查代码结构

第 5 步. 使用 Eclipse on Liberty 配置文件运行应用程序

第 6 步. 运行 JUnit 测试

第 7 步. 修改代码并重新运行应用程序

第 8 步. 重新运行 JUnit 测试

第 9 步. 将更改后的代码部署到 Bluemix

测验时间!

结束语

让我们开始吧。

 

IBM Bluemix 是企业开发人员构建、运行、扩展和管理应用程序的地方。准备好开始在 Bluemix 上创建自己的应用程序了吗?本教程将介绍托管一个 Java Web 应用程序的步骤。您首先要提供一个示例 Java Web 应用程序,在本地系统上运行它,修改它的代码,然后将该应用程序部署到 Bluemix,以便任何在线的人都可以使用它。

如果不确定您可能看到的 Bluemix 术语和状态消息的含义,请阅读本教程的 术语表和状态消息 部分。

这里快速概述一下本教程中将如何使用 Bluemix:

Bluemix 基础:将一个示例 Java 应用程序部署到云中

在云中运行您自己的 Liberty 配置文件 服务器实例。在成功部署 Liberty 配置文件后,它会持续运行,但不会与任何人共享。

您在计算机上运行 Eclipse IDE,并通过 Eclipse 项目归档文件加载应用程序的源代码。Liberty 配置文件的一个本地实例在 Eclipse 中运行。使用此设置,可以快速测试和调试应用程序,无需连接网络并在每次执行更改后上传代码。

当您的代码能够在本地服务器上正常运行,而且您觉得已准备好与大家分享它后,将您的服务器打包并发送到云中(图中的实线箭头表示的流程)。然后,您的应用程序可以通过 Bluemix 部署,任何人都可以使用浏览器通过网络访问它。

图中的虚线箭头表示一种将 Web 应用程序部署到 Bluemix 的替代方式。如果拥有包含该应用程序的兼容 Java Enterprise Edition (JEE) 的 WAR 文件,您可以在几分钟内将它直接部署到 Bluemix — 甚至不需要在您计算机上安装 Java(或 Eclipse)。本教程首先将展示这种替代方法。

完成本教程需要掌握的知识

 
  • Java 编程的实用知识,包括 JavaServer Pages (JSP) 技术
  • 客户端/服务器系统基础和术语的一般知识

完成本教程所需的软件

 

阅读:CloudFoundry CLI 文档

第 1 步. 下载示例 Java Web 应用程序

 
  1. 单击此按钮下载示例 Java Web 应用程序 javatutorial1.zip 的代码:

    下载示例 Java Web 应用程序

  2. 将 javatutorial1.zip 保存到您的计算机并解压缩其中的内容,其中包括:
    • lauren.war:一个标准的 Java EE WAR 文件,包含构成应用程序的 servlet、JSP 和 web.xml 文件。
    • lllproject.zip:一个 Eclipse 项目归档文件,包含本教程中的完整的 Eclipse 项目。

第 2 步. 将 WAR 文件部署到 Bluemix

 

可以将 lauren.war 文件直接部署到在您自己的计算机或 Bluemix 云中运行的兼容 JEE 的服务器,比如 Liberty 配置文件服务器。现在将它部署到 Bluemix:

  1. 如果尚未登录 Bluemix,请从命令行终端运行这些 Cloud Foundry 命令来进行登录:

    cf api https://api.ng.bluemix.net/
    cf login

  2. 运行下面这个命令,将 lauren.war 部署到 Bluemix:

    cf push 您的应用程序名称 -p lauren.war

    您为应用程序选择的名称必须在 Bluemix 上是唯一的 — 未被其他任何 Bluemix 用户使用。如果该名称(称为一个路由)已被使用,您会获得一个错误。

    您刚才运行的命令:

    1. 将该 WAR 文件上传到 Bluemix
    2. 在 Bluemix 中运行 Liberty 配置文件 buildpack
    3. 在 Bluemix 中启动您的 Liberty 配置文件服务器实例
    4. 将该应用程序部署到您的 Liberty 配置文件服务器实例中
    5. 将一个路由映射到您正在运行的应用程序,该应用程序可以通过网络使用 URL https://your app name.mybluemix.net/ 进行访问
  3. 在浏览器中打开 https://您的应用程序名称.mybluemix.net/ 来试用该应用程序 — 一个名为 Lauren's Lovely Landscapes 的简单网络商店。该商店目前销售三种印刷品;每种印刷品的页面显示了关联的名称、图像和价格。
  4. 停下来想一想。您刚才已经将一个正在运行的 Web 应用程序部署到云中!您需要的只是 cf 命令行工具和一个 Bluemix 帐户。

在本教程后面的 术语表和状态消息 中,将进一步了解该 buildpack 如何与 Bluemix 一起载入和部署您的应用程序。

从下一步开始,将检查和修改应用程序的代码。Eclipse IDE 使您在开发 Java Web 应用程序时可以轻松地处理代码和导航大型项目目录树。

第 3 步. 将该应用程序导入到您的 Eclipse 工作区中

 
  1. 启动 Eclipse IDE 并选择 File > Import。然后选择 General > Existing Projects into WorkspaceBluemix 基础:将一个示例 Java 应用程序部署到云中

    点击查看大图

  2. 单击 Select archive file 选项。 Bluemix 基础:将一个示例 Java 应用程序部署到云中

    点击查看大图

  3. 找到并选择 lllproject.zip 文件。
  4. 单击 Finish

LaurenLandscapesJava 项目现在已导入到您的工作区中。您可以在左边的 Enterprise Explorer 窗格中看到它的结构。下一步是熟悉该项目和代码。

第 4 步. 检查代码结构

 

在 Eclipse 中打开您的项目,查看左边的 Enterprise Explorer 窗格:

Bluemix 基础:将一个示例 Java 应用程序部署到云中

展开 Java Resources 查看 Java 源代码文件。展开 WebContent 可以看到组成该网站的 4 个 JSP 文件:

下图显示了该应用程序的工作原理:

Bluemix 基础:将一个示例 Java 应用程序部署到云中

针对 Lauren's Lovely Landscapes 商店的某个页面的 Web 请求首先会经过 DispatchServlet,然后转发到一个 JSP 页面。DispatchServletWebsiteTitle POJO(Plain Old Java Object,普通 Java 对象)的一个实例附加到该请求上。该请求被传递到 JSP 页面。JSP 页面使用 WebsiteTitle 将标题设置为 Lauren's Lovely Landscapes

如果检查 DispatchServlet 的源代码,可以看到使用 @WebServlet 注释指定的 servlet 路径映射:

@WebServlet({ "/home", "/antarctica", "/alaska", "/arctic", "/australia"})
public class DispatchServlet extends HttpServlet {
...

在本例中,所有 4 个路径(/home/antarctica/alaska/australia)都映射到 DispatchServlet。Liberty 配置文件将针对这些路径的请求首先传递给 DispatchServlet

DispatchServlet 中,还可以看到附加一个 WebsiteTitle 实例作为请求的属性的代码:

request.setAttribute("myapp", myapp);

如果检查一个 JSP 文件(例如 alaska.jsp),可以看到抓取标题的 Expression Language (EL) 代码:

<head>
	<title> ${myapp.title} </title>
...

第 5 步. 使用 Eclipse 在 Liberty 配置文件上运行应用程序

 

现在,已经准备好在由 Eclipse 托管的一个 Liberty 配置文件实例上本地运行该应用程序:

  1. 在 Enterprise Explorer 中选中该项目,右键单击并选择 RunAs > Run on Server... 打开一个服务器选择对话框。
  2. 展开 localhost 文件夹并选择本地 Liberty 配置文件服务器: Bluemix 基础:将一个示例 Java 应用程序部署到云中

    点击查看大图

  3. 您刚才所做的选择会启动 Liberty 配置文件的本地实例,加载应用程序,在 Eclipse 内部浏览器中访问这个正在运行的应用程序: Bluemix 基础:将一个示例 Java 应用程序部署到云中

    点击查看大图

  4. 试用应用程序的这个实例,看看是否会发现与 Bluemix 托管的应用程序不同的地方。因为您查看的是用相同代码生成的同一个应用程序,所以二者之间应该没有明显的区别。

第 6 步. 运行 JUnit 单元测试

 

为您的类编写单元测试是一种不错的 Java 编码实践。

WebsiteTitle 类包含两个单元测试。要运行这些测试,请按照以下顺序进行操作:

  1. 单击服务器窗格中的红色方形按钮,停止应用程序。
  2. 在 Enterprise Explorer 中选择该项目。
  3. 右键单击并选择 Run As > JUnit Tests

您可以看到两个测试都在运行。绿色的状态表示所有单元测试都成功通过:

Bluemix 基础:将一个示例 Java 应用程序部署到云中

点击查看大图

第 7 步. 修改代码并重新运行应用程序

 

在这一步中,您将修改印刷品的价格,查看它是否会立即在本地运行的网站上获得更新。

  1. 在 Eclipse 中的 Enterprise Explorer 中,单击 antarctica.jsp 文件并在源代码中查找价格。
  2. 将价格从 100.00 更改为 99.99 并保存该文件。更改的代码应类似于:
    <div id="price">99.99</div>
  3. 选择该项目并右键单击 Run as > Run on server,再次在本地 Liberty 配置文件服务器上运行该应用程序。
  4. 使用 Eclipse 中的内置浏览器访问该应用程序。
  5. 选择 Antarctica 印刷品,可以注意到印刷品的价格已更改。

第 8 步. 重新运行 JUnit 测试

 

要确保您的代码更改没有造成任何破坏,请养成每次修改应用程序后运行单元测试的习惯。

要重新运行单元测试:

  1. 确保服务器已停止运行该应用程序。
  2. 在 Enterprise Explorer 中选择该项目。
  3. 右键单击并选择 Run As...> JUnit Tests

您会再次看到绿色状态,这表明所有单元测试都已成功通过。

在团队环境中开发 Java 代码时,您可能希望每次将代码提交(修改并贡献)到团队的存储库时都运行所有单元测试。Bluemix 提供了 DevOps Services,可以通过配置它们在构建项目的工作流中自动运行单元测试。本系列的 下一篇教程 将会更详细地介绍 DevOps Services。

第 9 步. 将更改后的代码部署到 Bluemix

 

如果您喜欢的话,可以通过 WAR 文件将更改后的应用程序部署到 Bluemix。在 Enterprise Explorer 中选择该项目。从菜单中选择 File > Export。选择 Web > WAR File。找到您想要放置 WAR 文件的目标文件夹,并将该文件命名为 lauren.war。单击 Finish 生成 WAR 文件,然后像 第 2 步 中一样部署它。

要让网络上的每个人都知道 Antarctica 印刷品的新价格,需要将更改后的应用程序部署到 Bluemix。在这一步中,您会看到将项目部署到 Bluemix 的另一种方式,它比使用 WAR 文件还要简单 — 也就是说,使用 IBM Eclipse Tools for Bluemix 打包您的 Liberty 配置文件服务器实例并将它部署到 Bluemix 上:

  1. 在 Eclipse 中,单击红色方形按钮停止本地 Liberty 配置文件服务器实例。现在您可以看到与该服务器有关联的已停止状态: Bluemix 基础:将一个示例 Java 应用程序部署到云中

    点击查看大图

  2. 右键单击 Servers 窗格中的 Liberty 配置文件服务器,选择 Utilities > Package Server to IBM Bluemix。您可能需要添加 Bluemix 服务器:单击 Select IBM Bluemix Server 对话框中的 Add Server... 链接,按照说明进行操作。
  3. 在提示时登录到您的 Bluemix 帐户。
  4. 为应用程序提供一个名称。可以重用现有的应用程序名称,或者创建一个新名称: Bluemix 基础:将一个示例 Java 应用程序部署到云中

    点击查看大图

    IBM Eclipse Tools for Bluemix(构建于来自 Pivotal 的通用 Cloud Foundry Integration for Eclipse 之上)经过了大量自定义和调优,以简化在 Eclipse 中部署和管理 Bluemix 上的应用程序的过程。如果出于某种原因,您更喜欢直接使用 Cloud Foundry Integration for Eclipse,那么您可以在 Eclipse Marketplace 上找到它。

  5. 在 Launch deployment 对话框中,如果您愿意的话,可以增加内存限制,但对于此应用程序,512MB 就足够用了: Bluemix 基础:将一个示例 Java 应用程序部署到云中

    点击查看大图

  6. 单击 Finish 开始部署。您会看到一系列状态消息,服务器已部署到 Bluemix 上并已启动。

成功部署后,在 Web 浏览器中访问以下链接来试用该应用程序:

https://您的应用程序名称.mybluemix.net/

术语表和状态消息

 

让我们来看看在使用 Bluemix 时可能遇到的一些术语和状态消息。

术语表

 

请熟悉以下重要术语,在使用 Bluemix 时,常常会在文档和状态消息中看到它们。

  • Droplet:已准备好在云中部署的程序包,包含除操作系统外的一切资源(例如一个包含 JVM、Liberty 配置文件服务器和您的应用程序的程序包)。
  • Buildpack:一个可执行程序,它获取您推送的代码或打包的服务器,并将其捆绑到 droplet 中。
  • 清单:一个可以添加到您项目中的可选文件,名为 manifest.yml。清单文件配置会影响部署的服务器的各种参数 — 包括内存大小、在部署期间使用的 buildpack、所需的服务、使用的磁盘空间,等等。对于简单的 Java Web 应用程序,不需要清单文件;系统会自动检测和使用 Liberty 配置文件 buildpack 并应用默认配置。

    阅读:使用应用程序清单文件进行部署

  • 载入(staging):由 buildpack 处理的过程,将您上传的内容与系统组件和依赖项一起捆绑到一个有效的 droplet 中
  • Droplet 执行代理 (DEA):负责重构 droplet 并在云中运行您的应用程序的系统部分
  • Warden:一种确保您的应用程序已经与其他运行的应用程序隔离并受到保护的机制

状态消息

 

在发出 cf push CLI 命令或通过 IBM Tools for Eclipse 部署时,会看到一系列的状态消息。如果仔细查看,就会看到以下相继短语:

  1. Your push successfully uploaded the WAR or packaged server to the staging area.(您的推送已成功将 WAR 或打包的服务器上传到载入区域。)
  2. If an existing instance of your app is already running, it's stopped before staging begins.(如果您应用程序的一个现有实例已在运行,它会在开始载入应用程序之前停止。)
  3. The buildpack starts the staging process, which can include:(buildpack 启动载入过程,这可能包括:)
    1. Downloading and installing various system components(下载并安装各种系统组件)
    2. Downloading and installing compilers (the JVM, for example)(下载并安装编译器(例如 JVM))
    3. Putting your app into place(将您的应用程序放入适当位置)
    4. Setting up the environment(设置环境)
    5. Bundling everything up to create the droplet(捆绑所有资源来创建 droplet)
    为了加速这些步骤,载入过程会使用大量缓存,所以您可能还会在消息组合中看到一些有关从缓存重用的消息。
  4. The DEA tries to start your app from the droplet, running under supervision of a warden (container).(DEA 尝试从 droplet 启动您的应用程序,并在一位管理人的监督下运行(容器)。)

同时,Liberty 专家 Tom Banks 介绍了如何首先在笔记本电脑上的 Liberty 配置文件中开发一个应用程序,然后使用针对 Eclipse 的 WebSphere 开发人员工具在云中进行开发:

观看:在内部和云中开发 Java EE 应用程序的演示

测验

 

测试您在本教程中学到的知识。答案 在下方。

 

  1. 在将 Java Web 应用程序部署到 Bluemix 之前,必须在系统上安装 Eclipse IDE。
  2. 要将一个捆绑到 Java EE 6 WAR 文件中的 Web 应用程序部署到 Bluemix 中,您需要:
    1. Cloud Foundry CLI :cf
    2. IBM Eclipse Tools for Bluemix
    3. Cloud Foundry Integration for Eclipse
    4. 上述所有选项
    5. a) 到 c) 中的任意一项
  3. 您为 Lauren's Lovely Landscape Bluemix 部署选择的应用程序名称必须:
    1. 较长且听起来很重要
    2. 简明扼要
    3. 在您的其他所有应用程序中是唯一的
    4. 在同数据中心中的所有应用程序中是唯一的
    5. 未被全世界的其他任何 Bluemix 用户使用
  4. 在推送应用程序后,Bluemix 创建的适合运行的程序包被称为一个:
    1. Bluemix dropping
    2. Mullet
    3. Droplet
    4. 适合运行的程序包
    5. Bluemix zip 文件

测验的答案

1. b,2. e,3. e,4. c

结束语

 

在本教程中,您:

  • 通过使用 Cloud Foundry CLI 推送一个 WAR 文件,将一个 Java EE 6 Web 应用程序部署到了 Bluemix 中
  • 使用了 Eclipse IDE 对 Web 应用程序进行检查、编码、编译和单元测试
  • 使用了 Eclipse 托管的 Liberty 配置文件服务器在本地运行和测试您的应用程序
  • 使用了 IBM Eclipse Tools for Bluemix 来打包一个本地 Liberty 配置文件服务器实例并将其部署到 Bluemix 中

现在,通过下一篇教程在 developerWorks 上继续学习 “Bluemix 基础”。您将学习如何为 Java 应用程序设置团队协作和自动化部署:

为 Java 应用程序设置 DevOps

更多 Bluemix 资源

 

要获取源源不断的教程和技术资源流来帮助您使用 Bluemix 进行学习、开发和连接,请参阅 developerWorks 上的 Bluemix 页面


    
正文到此结束
Loading...