神刀安全网

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A…

简介

关于本系列

本系列由两部分组成,将介绍如何使用 DB2 Adapter for z/OS Connect 和 IBM MobileFirst Developer Edition 构建一个 DB2 for z/OS 移动应用程序。第 1 部分 介绍了如何使用 DB2 Adapter for z/OS Connect 公开 DB2 for z/OS 功能。第 2 部分将演示如何通过使用您在第 1 部分中创建的 DB2 Adapter 服务,使用 IBM MobileFirst Developer Edition 构建一个移动应用程序。

为了创建有效的企业级移动应用程序,您需要让后端数据变得更容易使用。IBM DB2 Adapter for z/OS 中的 API 向应用程序公开了 DB2 for z/OS 功能。在本系列的第 2 部分中,将学习如何通过使用 DB2 Adapter 服务,使用 IBM MobileFirst Developer Edition 构建一个移动应用程序。

以下各节将介绍如何:

  • 执行客户端开发
  • 创建和测试 HTTP 适配器
  • 使用来自服务端的结果
  • 使用 MobileFirst Console 进行构建、部署和测试
  • 运行 Android 模拟器(可选)

软件要求和前提条件

要理解本文中的示例,您需要满足以下软件要求:

  • 一个名为 GetXMLString 的 DB2 适配器服务。要创建该服务,请按照第 1 部分 中的说明进行操作。
  • IBM MobileFirst Developer Edition V7.0 和可选的 Android SDK。请参阅 使用 IBM MobileFirst 构建 DB2 for z/OS 移动应用程序 的 “安装和配置” 部分
  • 一个针对 DB2 Adapter 服务的 SSL 证书,且具有正确的常用名 (CN)(而不是 localhost)

IBM MobileFirst Platform 概述

IBM MobileFirst Platform 为移动应用程序提供了一个集成的开发和测试环境。该开发环境将多组工具、框架和代码库组合到单个开发环境中,为用户提供了单一的代码库来开发和维护。MobileFirst Platform 提供了一个基于 Eclipse 的 studio 和命令行接口 (CLI),用于:

  • 实现针对 iOS、Android、Windows Phone 8 和 Windows 8 的原生应用程序开发
  • 混合开发(组合了原生应用程序与 Web 应用程序开发)
  • 服务器端开发(适配器),包括 SQL 适配器、HTTP 适配器、Java 适配器等
  • 使用移动控制台浏览器进行测试和调试

架构

本文中的场景使用一个正则 SQL 语句从 SYSIBM.SYSXMLSTRINGS 表中的字符串 ID 检索一个字符串。 SYSIBM.SYSXMLSTRINGS 是一个目录表,包含 XML 存储中使用的字符串与字符串 ID 之间的映射。

图 1 是我们将要实现的移动解决方案的简化架构。该移动应用程序将会访问 MobileFirst 中的 HTTP 适配器,该适配器通过 RESTful URL 和 JSON 有效负载调用一个 REST API(由 DB2 Adapter for z/OS Connect 公开),在 DB2 for z/OS 中执行 SELECT。

图 1. 移动应用程序架构

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

客户端开发

启动安装了 MobileFirst Developer Studio 的 Eclipse。

要创建一个新 MobileFirst 项目,请执行以下操作:

  1. 单击 File>New>MobileFirst Project
  2. 输入 Hello3 作为项目名称。
  3. 选择 Hybrid Application
  4. 单击 Next
  5. 输入 Hello3 作为应用程序名称。
  6. 单击 Finish

图 2 演示了一个新创建的项目的文件布局。前端显示在 Hello3>apps>Hello3>common 下的 index.html 中定义。

图 2. 一个新创建的项目的文件布局

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

清单 1 展示了如何在 index.html 内定义一个文本字段,供用户输入一个字符串 ID 值。

清单 1. 嵌入一个图像文件

<div data-role="content" style="padding: 15px">   <!--application UI goes here-->   <img src="images/db2v11Image5.png"/>   <br/>

使用 DB2 Adapter for z/OS 所提供的 REST API,从该字符串 ID 中找到 DB2 for z/OS XML 字符串。

清单 2. 定义一个文本字段来输入字符串 ID 值并调用 main.js 中的 loadFeeds

<label for="text">String id:</label> <input type="text" name="text" id="stringid"> <input type="button" value="Submit" src="js/main.js"        onclick="loadFeeds(document.getElementById('stringid').value)"> <div id="wrapper"> <ul id="itemsList"></ul> </div>

在清单 2 中,单击 Submit 时,会调用 main.js 中的 loadFeeds 函数,该文件可在 Hello3>apps>Hello3>common>js 文件夹中找到。

清单 3. 调用 main.js 中的 loadFeeds 函数

function loadFeeds(stringid){       WL.Logger.debug("Inside loadFeeds");        busyIndicator.show();       stringidInput = stringid;           // Use HTTP Adapter       WL.Logger.debug("Inside loadFeeds(): using HTTP Adapter");        var invocationData = {                   adapter : 'Hello3HTTPAdapter',                   procedure : 'getXMLString',                   parameters : [stringid]       };           WL.Client.invokeProcedure(invocationData,{             onSuccess : loadFeedsSuccess,             onFailure : loadFeedsFailure       });  }

如清单 3 所示,loadFeeds 内有一个名为 getXMLString 的过程,它位于所调用的 Hello3HTTPAdapter 内。

创建一个 HTTP 适配器

要创建 HTTP 适配器,请执行以下步骤。在 Eclipse 内:

  1. 单击 File > New > MobileFirst Adapter
  2. 选择 Hello3 作为项目名称。
  3. 选择 HTTP Adapter
  4. 输入 Hello3HTTPAdapter 作为适配器名称。
  5. 单击 Finish

创建 HTTP 适配器后,新创建的适配器下包含以下两个文件:Hello3HTTPAdapter.xml 和 Hello3HTTPAdapter-impl.js。图 3 显示了该配置。

图 3. 创建 HTTP 适配器后的文件布局

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

编辑 Hello3HTTPAdapter.xml

  1. 在 <connectionPolicy> 下添加 DB2 Adapter 服务的正确的协议、域或端口
  2. 添加一个名为 getXMLString 的过程

清单 4 显示了具体操作:

清单 4. 编辑 Hello3HTTPAdapter.xml

<connectionPolicy xsi:type="http:HTTPConnectionPolicyType">  <protocol>https</protocol><domain>dtec207.vmec.svl.ibm.com</domain><port>9443</port>  …. </connectionPolicy>  <!-- Below is added by Jane --> <procedure name="getXMLString"/>

编辑 Hello3HTTPAdapter-impl.js 来实现 getXMLString,如清单 5 所示。

清单 5. 实现 getXMLString

function getXMLString(stringid) {         var path = "/zosConnect/services/GetXMLString?action=invoke";         var stringidInt = parseInt(stringid);         var input = {                   method : 'post',                   returnedContentType : 'JSON',                   path : path,                   headers: {             Authorization: "Basic xxxxxxxxxxxxxxxxxxxx"                     },                    body : {                     contentType: 'application/json',             content:  {"1": stringidInt}         }                };         return WL.Server.invokeHttp(input); }

请注意:

  1. xxxxxxxxxxxxxxxxxxxx 是 DB2 Adapter 服务的授权用户名和密码的 base64 编码格式。出于调试目的,您在测试和查询 DB2 Adapter 服务时,可以从浏览器的开发者视图中复制该信息。
  2. 输入中的 body.content 格式应与您的 DB2 Adapter 服务的输入参数相同。

将 SSL 证书添加到 MobileFirst Server

测试您的 HTTP 适配器之前,需要将 DB2 Adapter 服务的 SSL 证书添加到项目 (Hello3) 的服务器中。

因为 HTTP 服务器不太可能与 DB2 Adapter 服务共存于同一个系统中。我们需要 DB2 Adapter 服务的一个包含正确 CN(不是 localhost)的证书。

如果您还没有该证书,请按照第 1 部分 中 生成您自己的 SSL 证书 部分的说明,生成具有正确 CN 的证书。拥有包含正确 CN 的 SSL 证书后,按照以下说明进行操作:

  1. 导出证书。

    假设您的证书在 /tmp/usr/servers/test/resources/security/key.jks 中

    cd /tmp/usr/servers/test/resources/security

    keytool 的格式为: keytool -export -alias backend -keystore key.jks -rfc -file backend.crt

    我使用以下命令将该证书导出到一个名为 dtec207.crt 的文件中:

    keytool -export -alias default -keystore key.jks -rfc -file dtec207.crt

    (在您生成自己的 SSL 证书时)系统会提示您输入密钥库密码,也就是 sescurityUtility 中的密码。

  2. 通过 FTP 将证书文件 (dtec207.crt) 传输到 MobileFirst 项目的 server/conf 目录。在本例中,该目录为 C:/Eclipse/workspace/Hello3/server/conf。
  3. 将导出的证书导入到 MobileFirst 项目的 server/conf 目录的 MobileFirst Server mfp-default.keystore 文件中。格式应该为: keytool -import -alias backend -file backend.crt -storetype JKS -keystore mfp-default.keystore

    在我的例子中,

    清单 6. 将导出的证书导入您的 MobileFirst Server 中

    C:/Eclipse/workspace/Hello3/server/conf>"C:/Program Files/Java/jre7/bin/keytool" -import -alias dtec207 -file dtec207.crt -storetype JKS -keystore mfp-default.keystore

    备注:我们在导入时更改了别名。

    系统可能会提示您输入 mfp-default.keystore 密码,该密码可从 sever/config/worklight.properties <ssl.keystore.password> 字段获取,而且对每个项目是唯一的。

    清单 7. 输入您的 mfp-default.keystore 密码

    Enter keystore password:         ….        Trust this certificate? [no]: yes Certificate was added to keystore
  4. 检查证书是否已正确导入密钥库中。

    格式应该为: keytool -list -keystore mfp-default.keystore

    我使用的命令如下所示:

    清单 8. 检查证书是否已正确导入

    "C:/Program Files/Java/jre7/bin/keytool" -list -keystore mfp-default.keystore

    输出是一个很长的条目列表,但您应能够看到刚导入的条目,如清单 9 所示:

    清单 9. 输出

    dtec207, Dec 19, 2015, trustedCertEntry, Certificate fingerprint (SHA1): 1F:61:D6:15:94:96:83:1D:CB:24:81:7A:9C:53:20:27:8A:FE:03:C7

有关的更多信息,请参阅 使用自签名证书在 MobileFirst 适配器与后端服务器之间配置 SSL

部署和测试 HTTP 适配器

要部署和测试 HTTP 适配器,请执行以下步骤:

  1. 右键单击 Hello3HTTPAdapter > Run As > Deploy MobileFirst Adapter
  2. 右键单击 Hello3THTTPAdapter > Run As > Call MobileFirst Adapter
  3. 在 Call MobileFirst Procedure GUI 中,输入参数的值,然后单击 Run

输出应类似于清单 10。

清单 10. 测试 HTTP 适配器的输出

{     "ResultSet Output": [        {               "STRING": "space                                            "        }     ],     "StatusCode": 200,     "StatusDescription": "Execution Successful",     "isSuccessful": true,     "responseHeaders": { ….     },     "responseTime": 824,     "statusCode": 200,     "statusReason": "OK",     "totalTime": 829 }

使用来自服务器端的结果

客户端开发 部分所示,当 invokeProcedure() 正确运行时,调用了 loadFeedsSuccess。

要采用调用了一个适配器或外部资源后的结果,需要编辑 main.js 并实现 loadFeedsSuccess。清单 11 显示了具体操作:

清单 11. 编辑 main.js 来实现 loadFeedsSuccess

function loadFeedsSuccess(result){       WL.Logger.debug("Feed retrieve success");       busyIndicator.hide();              WL.Logger.debug("status= " + status);        WL.Logger.debug("result.responseJSON.StatusDescription= "         + result.responseJSON.StatusDescription);       WL.Logger.debug("result.responseJSON[ResultSet Output]= "         + result.responseJSON["ResultSet Output"]);                if (result.responseJSON["ResultSet Output"] != null)             displayFeeds(result);       elseif (result.responseJSON["ResultSet Output"] == null)             loadFeedsNotFound();       else             loadFeedsFailure(); }

您可以注意到,来自 HTTP 适配器的结果是一个 result.responseJSON 对象。如果 result.responseJSON["ResultSet Output"] 不是空的,我们可以使用结果对象作为参数来调用 displayFeeds()

在 displayFeeds() 内,我们调用 WL.SimpleDialog.show() 来显示第一个值,如清单 12 所示。

清单 12. 调用 WL.SimpleDialog.show() 来显示第一个值

function displayFeeds(result){       var ul = $('#itemsList');       WL.Logger.debug("Inside displayFeeds, result= "         + JSON.stringify(result));        var ResultSetOutput = result.responseJSON["ResultSet Output"];        var description = ResultSetOutput[0].STRING;        WL.SimpleDialog.show(description , "String id for "         + stringidInput + " is found.",                   [{                         text : 'Reload',                         handler : WL.Client.reloadApp                    }                   ]             );       WL.Logger.debug("Inside Exiting displayFeeds successsfully…"); }

创建新环境

要创建一个新移动环境,可执行以下步骤:

  1. 右键单击该应用程序,在本例中为 Hello3/apps/Hello3。然后单击 >New>Other ,然后选择 MobileFirst Environment 。单击 Next
  2. 选择 iPhone, iPad, Android phones, and tablets 。然后单击 Finish

构建和部署

右键单击您的应用程序,在本例中为 Hello3/apps/Hello3。然后单击 >Run As>Build All Environments

成功构建后,您会看到针对 android、ipad 和 iphone 的文件夹,如图 4 所示。我们还创建了一个名为 Hello3Hello3Android 的项目。备注:第一个 Hello3 是原始项目名称,第二个 Hello3 是原始应用程序名称。

图 4. 构建所有环境后的文件夹

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

使用 MobileFirst Console 执行测试

1. 右键单击项目,在本例中为 Hello3。然后单击 > Open MobileFirst Console

此时将会出现一个类似图 5 的浏览器。

图 5. MobileFirst Console

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

2. 单击 Applications

3. 单击 Hello3 的 Android 按钮,如图 6 所示。

图 6. Hello3 应用程序的控制台

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

图 6. Hello3 应用程序的控制台

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

4. 要查看移动浏览器模拟器,可单击 Preview

图 7. 图 7

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

此时将会出现一个类似图 8 的移动浏览器模拟器,而且您可测试所创建的 Hello3 应用程序。

图 8. Android 模拟器

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

图 8. Android 模拟器

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

运行 Android 模拟器(可选)

如果已安装 Android SDK、ADT Eclipse 插件且定义了一个 Android 虚拟设备,您还可以运行 Android 模拟器。

右键单击 Hello3Hello3Android>Run As>Android Application

图 9 给出了您将在 Android 模拟器上看到的屏幕。根据您机器的 CPU,响应时间可能也会有所不同。

图 9. Android 模拟器

使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A...

结束语

本文探讨了如何使用 DB2 Adapter for z/OS Connect 所公开的 DB2 功能构建一个 DB2 for z/OS 移动应用程序。在第 1 部分中,我们演示了如何创建、部署、查询、启动和测试 DB2 Adapter 服务。在第 2 部分中,我们展示了如何使用 IBM MobileFirst 构建一个移动应用程序来调用这个 REST API。

致谢

感谢 Tom Toomire 和 Xavier Yuen 对本文的评论和帮助。

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 使用 DB2 Adapter for z/OS Connect 构建一个 DB2 for z/OS 移动应用程序,第 2 部分: 使用 DB2 A…

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址