转载

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

简介

手机是一种无处不在的工具,大部分人几乎总是将它带在身边。要在当今市场上保持竞争力,您的公司需要利用移动技术。在本系列中,学习如何使用 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 功能。

关于本系列

这个由两部分组成的文章系列将介绍如何使用 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 构建一个移动应用程序。

关于这些产品

DB2 for z/OS 常用于存储关键事务数据。银行、零售、保险和政府行业的大量数据交易都发生在 DB2 for z/OS 上,这离不开它的服务质量、高可用性、安全性和性能。

IBM MobileFirst Platform 为移动应用程序提供了一个集成的开发和测试环境。该开发环境将多组工具、框架和代码库组合到单个开发环境中,为用户提供了单一的代码库进行开发和维护。

z/OS Connect 提供了一种通用方法,使用 REST 和 JSON 技术与所有 z/OS 业务和基础架构资产进行交互。它使前端不需要知道访问后端系统所需的任何数据转换。与此同时,它还使后端系统不需要知道 RESTful URI 和 JSON。

图 1 是我们将要实现的移动解决方案的简化架构。该移动应用程序访问 MobileFirst 中的 HTTP Adapter,它调用一个 REST API(由 DB2 Adapter for z/OS Connect 公开)在 DB2 for z/OS 中执行 SELECT。

图 1. 移动解决方案的简化架构

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

本文中的场景使用一个正则 SQL 语句从 SYSIBM.SYSXMLSTRINGS 表中的字符串 ID 检索一个字符串。SYSIBM.SYSXMLSTRINGS 是一个目录表,包含 XML 存储中使用的字符串与字符串 ID 之间的映射。清单 1 是 SYSIBM.SYSXMLSTRINGS 目录表的示例输出(您可能在自己的 DB2 系统中看到不同的值)。

清单 1. SYSXMLSTRINGS 目录表的示例输出

SELECT STRINGID, SUBSTR(STRING,1, 35) AS STRING FROM SYSIBM.SYSXMLSTRINGS STRINGID       STRING  1001           product  1002           description  1003           name  1004           detail 1005           http://www.w3.org/2000/xmlns/  1006           space  1007           http://posample.org  1008           pid  1009           details  1010           price  1011           weight

DB2 Adapter for z/OS Connect 简介

图 2 演示了 z/OS Connect 的架构和一个对 z/OS Connect 的请求的工作流(修改自IBM 知识中心 中的一个图)。

图 2. z/OS Connect 的架构

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

图 2. z/OS Connect 的架构

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

简言之,z/OS Connect 是 WebSphere® Liberty 配置文件内的一个 servlet。它接受包含 JSON 有效负载的 RESTful URI,为后端系统(在本例中为 DB2 for z/OS)转换该数据,向 DB2 发送请求,然后将结果发送回客户端。它还提供了两项重要的服务:

  • 拦截器服务 提供了一种执行调用前和调用后的工作的方法,例如使用 System Authorization Facility (SAF) 执行访问控制,使用 System Management Facility (SMF) 执行审计。
  • 发现服务 允许用户查询某个已配置服务列表,还允许查询给定的已配置服务的详细信息。

DB2 Adapter for z/OS Connect 在 z/OS Connect 和 DB2 for z/OS 之间提供这些服务。它允许开发人员访问 DB2 for z/OS 来调用 SQI 语句和存储过程。

软件要求

要运行此场景,您需要安装以下软件:

  • DB2 10 for z/OS 或更高版本
  • DB2 Adapter for z/OS Connect(捆绑在 DB2 Accessories Suites V3.3 中)。了解更多信息。
  • IBM Data Studio 客户端 4.1.2 或更高版本
  • 针对您的浏览器的 REST 客户端(可选操作,但推荐安装)

验证 DB2 Adapter for z/OS Connect 的安装

假设您已经使用 db2AdapterServer 模板在 WLP_USER_DIR(=/tmp/usr) 下创建了一个名为 test 的服务器。/tmp 目录是临时的,会在一次初始程序加载 (IPL) 后删除,但它对开发和单元测试用途很有用。如果您希望创建和配置一个持久性的 WebSphere Liberty Profile (WLP) 服务器,那么您可能希望使用以下类似设置:WLP_USER_DIR=/u/db2wlp/usr。

以下命令使用 db2AdapterServer 创建了一个名为 test 的新 Liberty 配置文件服务器。

server create test --template=db2zAdapterServer

在此场景中,我们使用

  • sampleBasicSSLUsingDefaultCert.xml 作为 sslServerCertificate.xml
  • sampleBasicZOSConnectAuthentication.xml 作为 zosConnectAuthentication.xml(更新合适的用户名和密码)
  • sampleBasicZOSConnectAuthorization.xml 作为 zosConnectAuthorization.xml(更新授权的用户名)

为了简便起见,我们使用用户 ID、密码列表和 Liberty 配置文件生成的一个服务器证书来实现 SSL 加密,以便完成身份验证。这里没有使用 SAF。

下面是 db2zAdapterDataSources.xml 内的 DB2 信息:

清单 2. db2zAdapterDataSources.xml 内的 DB2 信息

<db2zadapter_db2zAdapterDataSource id="db2zAdapterDataSource" databaseName="STLEC1" serverName="dtec207.vmec.svl.ibm.com" portNumber="446" driverType="4"  user="sysadm" password="mypassword" trustedContext="false" maxPoolSize="40" maxStatements="0" accountingInterval="COMMIT" />

成功启动服务器后,您会在 /tmp/usr/servers/test/logs/console.log 中看到以下类似信息:

[AUDIT   ] CWWKT0016I: Web application available (default_host): http://dtec207.vmec.svl.ibm.com:9180/

如果使用浏览器访问 http://dtec207.vmec.svl.ibm.com:9180/zosConnect/services,那么您可能看到以下类似信息。这是默认部署服务。记下部署服务 HTTPS 端口(在本例中为 9443),因为您将需要此信息来使用 IBM Data Studio Client 配置 Web 服务。

清单 3. 默认部署信息

{"zosConnectServices":[{ "ServiceName":"DB2zAdapterDeploymentService", "ServiceDescription":"Deploy a new DB2 Adapter service or delete an existing DB2 Adapter service", "ServiceProvider":"db2zadapter-1.0", "ServiceURL": "https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/ DB2zAdapterDeploymentService"}]

使用 IBM Data Studio 客户端设置 DB2 Adapter 服务

IBM Data Studio 客户端提供了开发工具来创建、部署或解除部署 DB2 Adapter 服务。Data Studio 4.1.2(和更高版本)支持 DB2 Adapter for z/OS Connect。我在本文中使用了 Data Studio 客户端 4.1.2。

如果您希望使用您的浏览器启动或测试 DB2 Adapter 服务,则需要为您的浏览器安装 REST 客户端。

与 z/OS Connect Server 建立连接

1. 启动 Data Studio 客户端,单击右上角的 Open Perspective 来打开 IBM SQL and Routine Development 透视图。

图 3. 打开透视图

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

2. 单击 Open Perspective GUI 中的 IBM SQL and Routine Development

图 4. Open perspective GUI

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

打开的透视图在 GUI 的左上角包含 Data Project Explorer (DPE) 视图,在 GUI 的左下角包含 Data Source Explorer (DSE) 视图。

3. 在 DSE 中,右键单击 Database Connections 并选择 New

4. 在 New Connection GUI 中,完成以下步骤:

  1. 在 Connection identification 下,选择 Use default naming convention
  2. 在 Local 选项卡下,选择 DB2 for z/OS
  3. 对于 JDBC 驱动程序,选择 IBM Data Server Driver for JDBC and SQLJ (JDBC 4.0) Default
  4. 在 Properties > General 选项卡下,填写与 db2zAdapterDataSources.xml 中指定的信息匹配的数据库信息。

图 5. New connection GUI

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

图 5. New connection GUI

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

5. 单击 Test Connection 按钮。您会看到一个显示 “Connection succeeded” 的弹出窗口。

6. 选择 z/OS Connect Server (位于 New Connection GUI 的底部),然后单击 Next 按钮。

7. 在图 6 中所示的 z/OS Connect Server Parameters GUI 中,完成这些步骤:

  1. 选择 z/OS Connect Server
  2. 填入 Liberty 配置文件服务器的 HTTP 端口号、用户名和密码。
  3. 单击 Finish 按钮。

图 6. z/OS Connect Server 参数

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

8. 在 Data Source Explorer 下,您会看到已经创建了一个新数据库连接(在本例中为 STLEC1)。

图 7. 新数据库连接

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

创建 Web 服务

1. 在 Data Project Explorer 中,选择 Click to create a new data development project ,如下所示。

图 8. 创建新数据开发项目

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

2. 在 New Data Development Project 中,指定一个项目名称 (Project1),然后单击 Next 按钮。

图 9. 新数据库开发项目

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

3. 在 Select Connection Profile 下,指定您刚创建的连接(也就是 STLEC1)。然后单击 Finish 按钮。

图 10. 选择连接配置文件

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

应在 Data Project Explorer 下创建一个名为 Project1 的新项目。

4. 右键单击 Web Services 并选择 New Web Service 来展开 Project1。

5. 在 New Web Service GUI 中,选择一个项目 (Project1) 并指定一个 Web 服务名称 (GetXMLString)。然后单击 Finish

图 11. 定义新的 Web 服务

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

应在 Web Services 文件夹下创建一个名为 GetXMLString 的新 Web 服务。

6. 在 Project1 下,右键单击 SQL Scripts 并选择 New > SQL or XQuery

7. 在 New SQL or XQuery Script 中完成以下步骤:

  1. 输入脚本名称 (GetXMLString)。
  2. 选择 SQL Query builder
  3. 单击 Finish 按钮。

图 12. 新的 SQL 或 XQuery 工具

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

8. 打开编辑器。输入以下 SQL 语句:

SELECT SUBSTR(STRING, 1, 60) as STRING FROM SYSIBM.SYSXMLSTRINGS WHERE STRINGID= ?

9. 要运行此 SQL 语句,请右键单击 GetXMLSting.sql > Run SQL

10. 假设您想找到字符串 ID 等于 1006 的 XML 字符串,在 Specify Host Variable Values 中输入 1006 。单击 Finish

图 13. 指定主机变量值

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

您会在右下侧的 SQL Results 标记下看到结果。在下面的屏幕截图中,字符串 ID 1006 对应的字符串为 “space”。请注意,根据 SYSIBM.SYSXMLSTRINGS 表中的映射,您可能看到不同的结果。

图 14. SQL 结果

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

11. 要将 SQL 脚本与 Web 服务相关联,可将新 SQL 脚本 (GetXMLString.sql) 拖到 GetXMLString* 上(在 Web Services 下)。在执行此操作后,您会在 Web Services>GetXMLString* 下看到 GetXMLString,如图 15 所示。

图 15. 使用 SQL 脚本创建 Web 服务

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

部署一个 Web 服务

要部署新服务,请右键单击 Web Services>GetXMLString* ,然后选择 Deploy on z/OS Connect Server

在成功部署后,您悔看到一个弹出窗口:The service 'GetXMLString' is deployed successfully。

您可能会在 /tmp/usr/servers/test 目录中找到以下条目。

清单 4. /tmp/usr/servers/test 目录中的条目

-rw-r----- 1 SYSADM OMVSGRP  438 Dec 20 10:49 db2zAdapterUserDefinedServices.xml    drwxr-x--- 2 SYSADM OMVSGRP 8192 Dec 20 10:49 db2zAdapterServicesBackup -rw-r--r-- 1 SYSADM OMVSGRP 1349 Dec 20 10:49 GetXMLStringConfig.xml
  • GetXMLStringConfig.xml 是新服务的配置文件。db2zAdapterUserDefinedServices.xml 已更新来包含新的 Web 服务信息。
  • db2zAdapterServicesBackup 是一个包含 db2zAdapterUserDefinedServices.xml 的备份版本的目录。
  • 如果有同名的现有服务,则会将该服务也备份到 db2zAdapterServicesBackup 目录。

测试和查询 DB2 Adapter 服务

DB2 Adapter 使用 z/OS Connect 授权和验证用户执行特定任务的权限。如果使用浏览器或 REST 客户端测试和查询 DB2 Adapter 服务,系统会提示您提供一个用户名和密码。您可能还需要接受来自 DB2 Adapter Service 的 SSL 证书。

1. 在浏览器中访问 https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services。您会看到刚创建和部署的 GetXMLString 服务的信息(已在下方突出显示)。您可能还会看到一个弹出窗口,表明这是一个来自 DB2 Adapter 服务的无法识别的 SSL 证书。

清单 5. 关于 GetXMLString 服务的信息

{ "zosConnectServices": [{ "ServiceName": "DB2zAdapterDeploymentService", "ServiceDescription": "Deploy a new DB2 Adapter service or delete an existing DB2 Adapter service", "ServiceProvider": "db2zadapter-1.0", "ServiceURL": "https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/DB2zAdapterDeploymentService" }, { "ServiceName": "GetXMLString", "ServiceDescription": "Get XML string from string id", "ServiceProvider": "db2zadapter-1.0", "ServiceURL": "https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/GetXMLString" }] }

2. 要检索 GetXMLString 服务的细节,可使用浏览器访问以下 URL:https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/GetXMLString。

您可能看到以下输出(为了方便阅读,我们对部分内容进行了重新格式化)。

  • 在 RequestSchema 下,您会看到输入参数模式,名为 “1”,表示空的或一个整数。
  • 在 ResponseSchema 下,您应找到输出的模式。输出参数是一个称为 Result Output 的数组类型的对象。

清单 6. GetXML String 服务的输出

{"zosConnect":{ "serviceName":"GetXMLString", "serviceDescription":"Get XML string from string id", "serviceProvider":"db2zadapter-1.0", "serviceURL":"https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/GetXMLString", "serviceInvokeURL":"https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/ GetXMLString?action=invoke", "dataXformProvider":"DATA_UNAVAILABLE"}, "GetXMLString":{ "DB2zAdapterServiceName":"GetXMLString", "DB2zAdapterServiceStatus":"Stopped", "DB2zAdapterService":{ "RequestSchema":{ "$schema":"http://json-schema.org/draft-04/schema#", "type":"object", "properties":{ "1":{ "type":["null","integer"], "multipleOf":1, "minimum":-2147483648, "maximum":2147483647, "description":"Nullable INTEGER" } }, "required":["1"], "description":"Service GetXMLString invocation HTTP request body" }, "ResponseSchema":{ "$schema":"http://json-schema.org/draft-04/schema#", "type":"object", "properties":{ "ResultSet Output":{ "type":"array", "items":{ "type":"object", "properties":{ "STRING":{ "type":"string", "description":"CHARACTER" } }, "required":["STRING"], "description":"ResultSet Row" } }, "StatusDescription":{ "type":"string", "description":"Service invocation status description" }, "StatusCode":{ "type":"integer", "multipleOf":1, "minimum":100, "maximum":600, "description":"Service invocation HTTP status code" }, "DiagnosticsCodes":{ "type":"array", "items":{ "type":"integer", "multipleOf":1, "minimum":-99999, "maximum":99999, "uniqueItems":true, "description":"Service invocation diagnostic code" } } }, "required":["ResultSet Output","StatusDescription","StatusCode"], "description":"Service GetXMLString invocation HTTP response body" } } } }

3. 要查询 GetXMLString 服务的状态,可使用浏览器访问以下 URL:https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/GetXMLString?action=status

您可能看到以下输出:

清单 7. 查询 GetXMLString 服务的状态

{ "zosConnect": { "serviceName": "GetXMLString", "serviceDescription": "Get XML string from string id", "serviceProvider": "db2zadapter-1.0", "serviceURL": "https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/GetXMLString", "serviceInvokeURL": "https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/ GetXMLString?action=invoke", "dataXformProvider": "DATA_UNAVAILABLE", "serviceStatus": "Stopped" } }

4. 要启动 GetXMLString 服务,您需要通过 REST 客户端发送一个 POST 请求。

POST https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/GetXMLString?action=start

(请确保您使用了 https 和安全端口 9443,http 和端口 9180 无法启动 DB2 Adapter 服务。)

您可能看到以下输出:

清单 8. 启动 GetXMLString 服务

{ "zosConnect": { "serviceName": "GetXMLString", "serviceDescription": "Get XML string from string id", "serviceProvider": "db2zadapter-1.0", "serviceURL": "https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/GetXMLString", "serviceInvokeURL": "https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/ GetXMLString?action=invoke", "dataXformProvider": "DATA_UNAVAILABLE", "serviceStatus": "Started" } }

5. 要调用 GetXMLString 服务,需要通过 REST 客户端发送一个 POST 请求,如所示。

POST https://dtec207.vmec.svl.ibm.com:9443/zosConnect/services/GetXMLString?action=invoke

指定以下 HTTPS 标头字段:

  • 对于 Accept 字段,键入 application/json
  • 对于 Content-Type 字段,键入 application/json
  • 对于 Accept-Charset 字段,键入 UTF-8

要找到字符串 ID 等于 1006 的 XML 字符串,可在 HTTPS 请求主体中指定该条件,如图 16 所示。

图 16. 使用浏览器 REST 客户端调用 Web 服务

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

您可能看到以下输出(为方便阅读,我们进行了重新格式化)。从以下结果可以看到,字符串 ID 为 1006 的 XML 字符串为 “space”。

清单 9. 字符串 ID 请求的输出

{"ResultSet Output": [{"STRING":"space"}], "StatusDescription":"Execution Successful", "StatusCode":200 }

生成您自己的 SSL 证书

如果您的 SSL 证书的 CN 名称为 localhost,那么您可能希望生成一个包含您的 DB2 服务器的实际主机名的 SSL 证书。可使用 securityUtility 命令完成此任务。

  1. 停止您的服务器(在我的例子中,命令为:server stop test)。
  2. 重命名 /tmp/usr/servers/test/resources/security/key.jks(如果它已存在)。
  3. 发出以下格式的 securityUtility 命令:

清单 10. 生成一个包含您的 DB2 服务器的主机名的 SSL 证书

securityUtility createSSLCertificate --server=<server_name> --password=<password> --validity=365 --subject=CN=<hostname>,O=<company>,C=<country>

在我的示例中,该命令类似于:

清单 11. 生成 SSL 证书的示例

securityUtility createSSLCertificate --server=test --password=mypassword --validity=365 --subject=CN=dtec207.vmec.svl.ibm.com,O=IBM,C=US

您可能看到以下输出:

  • 该证书将使用别名 default 来创建。
  • 密钥算法为 RSA,签名算法为 SHA1withRSA。
  • 为服务器 test 创建的 SSL 证书。
  • 使用 CN=dtec207.vmec.svl.ibm.com,O=IBM,C=US 作为 SubjectDN 来创建证书。

要启用 SSL,请将以下行添加到 server.xml 中。

清单 12. 启用 SSL

<featureManager>    <feature>ssl-1.0</feature>   </featureManager>  <keyStore id="defaultKeyStore" password="{xor}PG87Oiw3MC8=" />

4. 使用新密码更新 /tmp/usr/servers/test/sslServerCertificate.xml(在本例中为 {xor}PG87Oiw3MC8=)

结束语

本文介绍了如何创建、部署、查询、启动和测试 DB2 Adapter 服务。希望您能够理解本文中的内容。在第 2 部分中,我们将介绍如何从移动应用程序调用这个 REST API。

致谢

感谢 Tom Toomire 和 Xavier Yuen 为本文提供的评论和帮助。

原文  http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1602-db2-zos-mobile-application-db2-adapter-part1-trs/index.html?ca=drs-
正文到此结束
Loading...