内容


在 iPhone 解决方案中集成 WebSphere CloudBurst 功能,第 1 部分

一个简单 Web 2.0 应用程序的架构、决策模型和工具

系列内容:

此内容是该系列 # 部分中的第 # 部分: 在 iPhone 解决方案中集成 WebSphere CloudBurst 功能,第 1 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:在 iPhone 解决方案中集成 WebSphere CloudBurst 功能,第 1 部分

敬请期待该系列的后续内容。

简介

IBM WebSphere CloudBurst Appliance 是一个自服务式云计算管理设备,可以立即产生投资回报,方法是降低 IT 操作成本和增加硬件使用。它是一类新硬件设备,位于数据中心并将 WebSphere Application Server 拓扑分配到一个虚拟硬件的外部池(云)中。WebSphere CloudBurst 使用提供的大量基于 REST 的 API 为 Web 2.0 环境提供多个整合机会。

一种 WebSphere CloudBurst 集成可能性是使用 Apple iPhone。使用一个 iPhone 进行 web 浏览比较容易,但是要获得最佳用户体验,一个完全客户端应用程序更可取。您可以从设备中检索信息,然后将其格式化作为设备上的一个用户接口。

本系列文章引导您为一个 iPhone 设备创建一个完全客户端应用程序,该设备使用 REST API 与 WebSphere CloudBurst 协作。为此,第 1 部分对涉及的各个块和架构组成进行一个高级别的说明,帮助您准备您的开发环境。

本系列文章假设读者对 Web 2.0 技术比较熟悉,例如 Rest、ATOM、JSON 和 Objective-C。文中介绍的样例应用程序是用 Objective-C 实现的,使用要在 iPhone(或 iPod Touch)设备(有一个 3.x 固件)上运行的 Apple iPhone SDK 3.x。为了执行文本的步骤以及运行示例,您的计算机上需要安装 Apple SDK 3.0 或更高版本,运行 Mac OS 的一个兼容版。您还需要访问在您的环境中运行的 WebSphere CloudBurst Appliance。

WebSphere CloudBurst 概述

IBM WebSphere CloudBurst Appliance 帮助您在一个私有云环境中创建、部署和管理 WebSphere 虚拟系统。设备附带有 IBM WebSphere Application Server Hypervisor Edition,根据 Open Virtualization Format (OVF) 标准,它是 IBM WebSphere Application Server 程序包的一个虚拟镜像。这个包中含操作系统、WebSphere Application Server 配置文件和库,以及 IBM HTTP Server。所有这些都是预先安装的,并且随时可以部署到管理程序。

WebSphere CloudBurst 可以被私有或预置云计算环境使用 — 也可以被提供托管公共云和软件即服务环境的服务提供商使用 — 来简化和标准化重复的部署。它是一个功能强大且全面的云计算和虚拟解决方案集合的一部分,用于部署和管理 SOA 应用程序、服务和环境来实现更为智能的业务成果。图 1 是 WebSphere CloudBurst 大图像。

图 1. WebSphere CloudBurst Appliance 大图像
图 1. WebSphere CloudBurst Appliance 大图像
图 1. WebSphere CloudBurst Appliance 大图像

WebSphere CloudBurst 为数据中心自动化和自动化的资源供应解决方案的集成既提供一个命令行接口也提供 REST API。例如,WebSphere CloudBurst 可以自动部署到服务管理自动化解决方案中,比如 IBM Tivoli® Service Automation Manager,来提供附加的进程自动化并控制端到端的供应流程。

本文将这些概念用于为 iPhone 客户端和 WebSphere CloudBurst Appliance 创建一种协作。特别是,客户端将可能发出一个 API 请求,请求显示 WebSphere CloudBurst 管理的云环境列表。对于每一个可用的云环境,您都可以检索以下信息:

  • 云环境描述
  • 云环境名
  • 云环境状态
  • 云环境启动时间。

对这类应用程序,WebSphere CloudBurst 管理员只使用他的智能手机就可以查看这些云环境的状态。图 2 说明该解决方案架构的概述。

图 2. 架构概述图
图 2. 架构概述图示
图 2. 架构概述图示

只要有需求,就可以检索 iPhone 客户端数据。数据使用一个 REST 调用来检索;REST 调用是完全基于一个 HTTP GET 请求的。(REST 协议可以管理另一个 HTTP 协作协议,比如 POST、DELETE 等等,但是在此例中,客户端仅用于查询。)请求将被 WebSphere CloudBurst 捕获,一个包含请求的云状态 JSON 响应文件必须返回到设备。或者,您可以选择使用一个在 iPhone 环境中集成的本地 SQLite 数据库存储 iPhone 检索的数据。

iPhone 客户端:胖客户端还是瘦客户端

一个瘦客户端的示例是普通 Web 浏览器。从编码的角度来看瘦客户端是轻便的,而且从界面功能的角度来看也是轻便的。当然,PHP 及相关的技术可以增加 Web 浏览器 GUI 的能力。如果您想从您的用户界面获得最大效益,那么您需要一个基于胖客户端的解决方案。

一个胖客户端本质上是在客户端运行的应用程序。如果,可移植性是您最为关注的,那么这可能不是最好的解决方案。然而,在这种情况下,由于应用程序是为智能手机构建的,那么按理说,GUI 功能比可移植性更重要。从编码角度来看胖客户端是健壮的,但是瘦客户端可能会被应用到数据应用程序中。

记住,因为您的客户端不是一个 PC 机,您实际上不能将您的所有数据存储在客户端,所以应用程序数据将被按需检索。数据将会使用一个基于 HTTP 请求的 REST 调用来检索。请求将被后端接收到,然后回送一个 JSON 响应文件,其中含有设备请求的数据。要在 iPhone 上存储重要文件,您可以使用 iPhone 环境中集成的本地 SQLite 数据库。

REST API 概述

每个 WebSphere CloudBurst Appliance 公开一个 REST API;要启动或禁用这个接口,不需要进行特别的配置设置。REST API 在同一个 IP 地址或者主机(您用来访问设备 GUI 和命令行接口(CLI)的)上可用。REST API 仅在端口 443 上通过 HTTPS 协议支持。该设备用一个自签名证书进行它的 SSL 会话。GUI、CLI 和 REST API 会话都使用同一个证书。REST API 支持 UTF-8 编码数据发送和接收。

本文介绍的样例应用程序使用 REST API 来管理您的虚拟系统信息 — 表 1 中显示的数据。REST API 以 JSON 格式返回数据。第一列中的所有 HTTP GET 请求的 URI 模式将以 “/resources/” 为前缀(例如,/resources/virtualSystems)。

表 1. 虚拟系统云环境信息的 REST API
URI 模式成功代码错误代码
/virtualSystems200:返回客户可见的虚拟系统列表。403:请求程序没有分配云计算管理角色。
500:处理请求时 CloudBurst Appliance 的内部错误。
/virtualSystems/{id}200:返回与给定 ID 相关的虚拟系统。403:请求程序不能访问请求的虚拟系统。
404:请求的虚拟系统没有定义。
500:处理请求时 CloudBurst Appliance 的内部错误。

一个虚拟系统有以下这些属性:

  • created:虚拟系统的创建时间,用自 1970 年 1 月 1 日午夜起的毫秒数表示。该值是数值型的,由设备自动生成。
  • currentmessage:和虚拟系统的当前状态相关的消息。
  • currentmessage_text: currentmessage 的文本表示。
  • currentstatus:虚拟系统当前状态的字符串表示。
  • currentstatus_text: currentstatus 的文本表示。
  • id:虚拟系统的 ID。数值是由设备自动生成的。
  • name:显示与这个虚拟系统相关的名称。
  • owner:拥有该虚拟系统的用户的 URI。
  • updated:虚拟系统最后一次更新的时间,用自 1970 年 1 月 1 日午夜起的毫秒数表示。该值是数值型的,由设备自动生成。

JSON 响应数据模型

清单 1 是 /resources/clouds 请求的一个 REST 响应示例,返回设备管理的云环境列表。

清单 1. GET /resources/virtualSystems 示例
[
	{
		"created": 1245041940730,
		"currentmessage": null,
		"currentmessage_text": null,
		"currentstatus": "RM01036",
		"currentstatus_text": "Queued",
		"desiredstatus": "",
		"desiredstatus_text": null,
		"id": 6,
		"name": "futurevs",
		"owner": "/resources/users/1",
		"pattern": "/resources/patterns/1",
		"updated": 1245041940730
	},
	{
		"created": 1245356439153,
		"currentmessage": "RM07045",
		"currentmessage_text":
		"The virtual system has been deployed and is ready to use",
		"currentstatus": "RM01006",
		"currentstatus_text": "Started",
		"desiredstatus": "",
		"desiredstatus_text": null,
		"id": 9,
		"name": "test virtual system",
		"owner": "/resources/users/1",
		"pattern": "/resources/patterns/6",
		"updated": 1245357249316
	}
	]

响应数据是 JSON 格式的,JSON 在 Ajax (Asynchronous JavaScript™ and XML) 社区中是很流行的,因为在 PHP 程序中管理这类数据格式很简单。JSON 对象是由一个 “键:值” 对格式构成的,对象的元素由逗号隔开,每个对象包含在一对大括号 {} 中。对象数组包含在方括号 []中。这是将数据库中的一系列行转换成对象组数的一个常用方法,其中每个数组元素相当于数据库的一行,对象的每个属性代表一列数据。

在您的客户端,您将使用 C 管理该数据格式。转换这类数据的一个简单方法是创建一个通用解析器代码,该代码可以将 JSON 数据转换成一个 Objective-C 应用程序数据对象。数组通常存储在一个 Array 本地数据对象中,任何 OO 语言都支持(在 Objective-C 中,NSMutableArray 类声明对象接口管理一个可更改的数组),键:值对数据通常存储在一个字典中(在 Objective-C 中,NSMutableDictionary 类声明接口管理一个和任意键相关的普通数据对象)。解析器代码接收一个 JSON 对象作为输入并返回一个数据字典(或一个数组),包含 JSON 文件中介绍的所有对象。

如果您自己不喜欢编写这样一个解析器,有很多开源项目可用,不管您决定以哪种方式管理 JDON 来进行 Objective-C 数据交换,您必须将这组类包含在您的项目中。在本文中,假设 JSON 转换不包含在这里介绍的步骤中。

SQLite 概述

如果您想使用一个快捷方便的方法存储一组简单的数据,SQLite 是一个好的选择。您可以将所有必要应用程序数据存储在一个 SQL 数据库中,生成一个易于维护的文件。iPhone 为 SQLite 提供本地支持,一个简单但完整的数据库引擎,不需要进行特别配置,而且可以将所有数据库数据存储在单个文件中。SQLite 在 Mac OS X 上本地模式下可用,在 iPhone和 iPod 上无需附加库。

要为您的新应用程序创建一个 SQLite 数据库:

  1. 打开一个命令窗口,然后创建一个新文件夹来存储数据库,使用清单 2 所示的命令。
    清单 2. 创建 SQLite 数据库:MyDataBase.sql
    cd /Users/<myUser>/Documents
    mkdir SQLiteTutorial
    cd SQLiteTutorial
    sqlite3 MyDataBase.sql
  2. 在 SQLite 命令行提示栏,输入清单 3 中的 SQL 命令,为应用程序变量创建一个数据库表:
    • 表名:configValueTable
    • 字段:key、tag、value、description。
    清单 3. 创建 configValueTable 表
    CREATE TABLE configValueTable 
               ( key INTEGER PRIMARY KEY, 
                 tag VARCHAR(50), 
                 value VARCHAR(255), 
                 description TEXT );
    INSERT INTO 
          configValueTable (tag, value, descrption) 
          VALUES ('tag', 'value', 'description');
  3. 输入命令 SELECT * FROM configValueTable,确认表已经创建;应该返回创建的表以及字段。如果您确定数据库已经正确配置了,输入 quit 退出命令窗口。

关于使用 SQLite 的详细信息不在本文范围之内。更多详细信息见 参考资料

iPhone 应用程序开发

Apple SDK (软件开发人员工具箱)是一套工具和 API,使您可以为 Apple 设备开发本地应用程序,比如,iPhone。开始之前,您需要一些关于 Cocoa (Objective-C) 的知识。尽管本文不深入挖掘编程语言,但是下面提供一些 Objective-C 基础知识。如果您对 C/C++/Java™ 比较熟悉,您会发现一些熟悉的概念,关于类、方法和基础表达式。SDK 也提供工具,比如,Xcode、Interface Builder、iPhone 模拟器,等等。

要安装 SDK:

  1. 将 .dmg SDK 文件(见 参考资料)下载到您正在运行 Mac OS 的计算机上。
  2. User > Downloads 文件夹双击已下载的文件来打开磁盘镜像。
  3. 在磁盘镜像内双击安装程序包。包装程序包启动,这样您就可以安装 SDK 了。根据屏幕上的指令安装。记着,SDK 安装需要的磁盘空间多达 3GB。
  4. 当装完成后,一个新 Developer 文件夹将出现在目录结构的顶层。该目录包含您创建 iPhone 应用程序所需的主要工具和库。

开发之前,您应该了解在开发 iPhone 应用程序时将要使用的基本设计模式:

  • Delegation:一个模式,其中,一个对象定期发送消息到另一个被指定作为其代理的对象。
  • Model View Controller:一个范例,将一个应用程序分为 3 部分:用户与视图相互作用,控制程序处理从视图中输入的事件,控制程序通知用户行动模型。
  • Target-Action:该机制支持视图对象呈现一个控制,响应一个用户事件;例如,单击发送活动消息到目标对象。

创建一个 iPhone 对象

现在,您已经准备好了使用 Xcode 创建您的第一个 iPhone 项目:

  1. 在您的 Mac OS 机器上,启动 Xcode(默认位于 /Developer/Application 下)。
  2. 选择 File > New Project,确保 iPhone 被选中作为 Product(图 3)。
  3. 选择 View-based Application。该模板为使用一个新图标的应用程序提供一个起点。然后单击 Choose(图 3)。
    图 3. 创建新项目
    图 3.创建新项目
    图 3.创建新项目
  4. 将您的项目命名为 HelloWorld 并单击 Save。工具将为您的应用程序创建所有必须类,每个类在一个扩展名为 .m 的文件中,包含一个扩展名为 .h 的头文件(图 4):
    • main.m:主文件。
    • HelloWordAppDelegate.m:应用程序代理类。
    • HelloWordAppDelegate.h:应用程序代理头文件,包含在 .m 文件中。
    • MainWindow.xib:定义您的主窗口应用程序的对象。
    • Other files:其他对象配置文件。
    图 4. 应用程序文件
    图 4. 应用程序文件
    图 4. 应用程序文件
  5. 选择 Build and Go 图标。该工具在 iPhone Simulator 中编译和安装您的应用程序,这可以自动启动您的应用程序。在这里,您只能看到一个简单的白色界面。在结尾处,您就可以看到图 5 所示的项目类。
    图 5. 应用程序项目类
    图 5. 应用程序项目类
    图 5. 应用程序项目类

添加 SQLite 框架

要从应用程序管理 SQLite 访问,您需要将 SQLite 库包含在工具中。完成以下操作:

  1. 在左面板右键单击 Frameworks 文件夹,然后选择 Add > Existing Frameworks...(图 6)。
    图 6. 添加 SQLite 框架
    图 6. 添加 SQLite 框架
    图 6. 添加 SQLite 框架
  2. 从主系统根目录导航到 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/lib/。双击 libsqlite3.0.dylib 文件。
  3. 在对话框单击 Add,库将被添加到您的项目中。

现在,当您在左边面板中选择 Frameworks 文件夹时,您将看到在 iPhone SDK 中包含这个框架(图 7)。

图 7. 包含的框架
图 7. 包含的框架
图 7. 包含的框架

Objective-C 基础

让我们使用 Objective-C 检验一个简单的 Hello World 程序。这不是一个 iPhone 特定的示例,只是一个小代码片段,用来说明 Objective-C 和 C++ 的相似程度。如果您对 C++ 的原理很熟悉,这个示例将是很有用的。

清单 4 是一个用 C++ 编写的普通 Hello World 程序。

清单 4 . Hello world 样例程序
#include <stdio.h>
int main(void)
{
        printf("Hello, World!");
        return ;
}

要使用 Objective-C 创建一个类 “Sample”,您需要创建一个名为 Sample.h 的头文件(清单 5)。

清单 5. 头文件 - Sample.h
#import <Cocoa/Cocoa.h>

@interface Sample : NSObject
{
  int a;
}

- (void) printValue;
@end

这只是类的声明。您正在建立的方法和属性有 Sample 类。该从 Cocoa 基类 NSObject 继承。类声明以 @interface 指令开始,以 @end 指令结束。以下 @interface 是类名,父类的名称,类的实例变量(也称为 ivars)在 {} 。

现在,您可以实现主文件中的类,如清单 6 所示。

清单 6. 实现文件 Sample.m
#import "Sample.h"

@implementation Sample

- (void) printValue{
  NSLog(@"The value of the sample parameter  is: %d\n",a);
}

- init {
  if(![super init]){
    return nil;
  }
  a = 7;
  return self;
}
@end

该类通常有一个 “init” 前缀的构造器。当头文件和实现文件准备好之后,您可以用清单 7 中的代码创建一个实例。

清单 7. 类实例化 main.m
#import "Sample.m"
...
void myFunction(){
  Sample *mySample = [[Sample alloc] init];
  [mySample printValue];
}

您使用 Objective-C 创建一个对象之前,需要创建一个对象实例。然而这样做,您也需要分配内存和创建对象。这是在清单 7 中使用 alloc 参数完成的。

接下来,让我们看看在 Objective-C 中如何使用一个数组。该示例所需的类是 NSMutableArray。在 Objective-C 中,您可以将任何东西放入数组 — 甚至混合和匹配对象。清单 8 显示创建一个数组然后向其中添加 3 个元素的示例。

清单 8. 数组创建
//Array creation
NSMutableArray *arr = [[NSMutableArray alloc] init];

//Add three elements 
[arr addObject:@"Object 1"];
[arr addObject:@"Object 2"];
[arr addObject:@"Object 3"];

清单 9 显示一个在数组中从一个特定元素中检索一个对象的示例。

清单 9. 从一个数组检索对象
//Retrieve an object 
NSLog([arr objectAtIndex:0]); 
NSLog([arr objectAtIndex:4]);

清单 10 展示如何从一个数组中检索最后一个元素。

清单 10. 从一个数组中检索最后一个对象
//Retrieve the last object in an array
NSLog([arr lastObject]);

清单 11 显示如何实现一个 for-each 循环来在数组中的每个对象上重复同一个动作。

清单 11. 数组上的循环
	for (NSString *s in arr) {
		//<actions>
	}

如果不需要数组,那么您必须释放它,如清单 12 所示。

清单 12.释放一个数组
            [arr release];

使用 Objective-C 时需要注意的几点:

  • 正如在 C++ 中,记住头文件仅声明方法和参数;类必须在 .m 文件中实现。
  • 在 Objective-C 中有两类方法。一个实例方法的执行在类的一个特定示例中有效;您在调用该类的方法之前必须创建一个类的实例。相反,类方法不需要您创建一个示例。
  • 前面带有减号(-)的方法是实例方法。冒号表示有参数存在。如果一个方法没有参数,第一个关键字之后的冒号将可以忽略。

结束语

本文介绍了一些基础知识,为您使用 Apple SDK 工作、在 Mac 上创建一个 iPhone 项目以及使用 Objective-C 编码做准备。这些信息为本系列的下一期奠定了基础,下一期将介绍样例应用程序的视图组件和控制器类的类框架。


相关主题

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere, Cloud computing, Web development
ArticleID=618942
ArticleTitle=在 iPhone 解决方案中集成 WebSphere CloudBurst 功能,第 1 部分: 一个简单 Web 2.0 应用程序的架构、决策模型和工具
publish-date=01272011