首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

CICS 與 DB2 pureXML 整合應用:高效存儲與檢索 XML 數據的實戰指南

     編輯:DB2 教學

概述

隨著 XML 在企業應用中扮演越來越重要的角色,CICS 應用程式對原生存儲和查詢 XML 數據的需求日益增長。本文詳細介紹如何結合 CICS Web 服務支援與 DB2 pureXML 技術,實現兩大核心場景:無需解析即可直接將入站 XML Web 服務消息存入 DB2,以及從 DB2 檢索 XML 數據並透過 Web 服務對外輸出。文章提供完整的配置步驟、COBOL 範例代碼與測試方法,幫助開發人員快速構建高效、可擴展的 XML 處理解決方案。

技術背景

CICS Web 服務支援

自 CICS TS V3.1 起,CICS 內建 Web 服務功能,使應用程式能同時扮演服務請求者與提供者,支援 HTTP 或 WebSphere MQ 傳輸。Web 服務消息通常採用 SOAP 格式(即帶有 SOAP 標頭的 XML),本文統稱之為 SOAP 消息。

DB2 pureXML 原生 XML 支援

DB2 9.1 for z/OS 引入 XML 資料類型(pureXML),允許原生存儲、索引與查詢 XML。XML 在寫入時即被解析,配合 XPath 與 SQL/XML 查詢可實現高效訪問;DB2 10.1 更支援透過 XPath 直接更新 XML 內容。

兩大應用場景

本文採用同一 CICS 區域(CICS TS 4.1)與 DB2 9.1 表(單一 XML 列)演示:

CREATE TABLE REDBOOK.PUREXML (SOAP XML) CCSID EBCDIC IN DATABASE REDBOOK;

完整建表腳本(含 STOGROUP、TABLESPACE)可從文末下載區獲取。

場景一:直接存儲入站 Web 服務 XML 消息

此場景示範 COBOL 程式 WEBINST(兼具管道處理程式與服務提供者角色)如何繞過 CICS 內建 XML 解析器,將完整 SOAP 訊息直接寫入 DB2 pureXML 列,顯著提升效能。

步驟 1:建立 CICS 管道配置檔

將以下內容存為 /u/user/config/insert_pipeline.XML 至 USS,指定 WEBINST 為終端處理程式:

<?XML version="1.0" encoding="EBCDIC-CP-US"?>
<provider_pipeline XMLns="https://www.ibm.com/software/htp/cics/pipeline">
 <service>
 <terminal_handler>
 <handler>
 <program>WEBINST</program>
 <handler_parameter_list/>
 </handler>
 </terminal_handler>
 </service>
</provider_pipeline>

步驟 2:定義並安裝 CICS 資源

PIPELINE(WEBINST) CONFIGFILE(/u/user/config/insert_pipeline.XML) SHELF(/u/user/shelf)
URIMAP(WEBINST) USAGE(PIPELINE) PIPELINE(WEBINST) HOST(*) PATH(/pureXML/insert)
PROGRAM(WEBINST) DATALOCATION(ANY)
TCPIPSERVICE(PUREXML) PORT(xxxxx) PROTOCOL(HTTP)
DB2ENTRY(PUREXML) ACCOUNTREC(TXid) AUTHTYPE(Userid) DRollback(Yes) PLAN(PUREXML)
DB2TRAN(PUREXML) ENTRY(PUREXML) TRANSID(CPIH)

步驟 3:COBOL 程式核心邏輯

EXEC CICS GET CONTAINER('DFHREQUEST') INTO(XMLDATA) FLENGTH(WSFLENGTH) RESP(WSRESP) RESP2(WSRESP2) END-EXEC.
EXEC SQL INSERT INTO REDBOOK.PUREXML (SOAP) VALUES (:XMLDATA) END-EXEC.
EXEC CICS DELETE CONTAINER('DFHREQUEST') END-EXEC.
EXEC CICS PUT CONTAINER('DFHRESPONSE') FROM(XMLDATA) RESP(WSRESP) RESP2(WSRESP2) END-EXEC.

程式從 DFHREQUEST 容器讀取 SOAP 訊息,直接插入 DB2,再將原訊息作為回應返回。

步驟 4:使用 Rational Developer for System z 測試

匯入範例 SWITCH.wsdl,啟動 Web Services Explorer,指向 CICS TCP/IP 服務 URI,輸入測試資料送出。CICS 將 SOAP 交給 WEBINST 寫入 DB2,並回傳原始 SOAP 訊息。

Test with Web Services Explorer
添加新的 Endpoint
輸入測試數據以產生 SOAP 消息
請求和響應 SOAP 消息

步驟 5:驗證資料落庫

執行 SELECT * FROM REDBOOK.PUREXML,可見 XML 宣告顯示編碼為 IBM285 (UK EBCDIC),證明資料已原樣存入。

場景二:查詢 pureXML 並透過 Web 服務返回

此場景示範 COBOL 程式 WEBSLCT 從 DB2 讀取 XML 並作為 Web 服務回應輸出。

關鍵差異:使用 XMLSERIALIZE 避免編碼衝突

EXEC SQL SELECT XMLSERIALIZE(SOAP AS CLOB) INTO :XMLDATA FROM REDBOOK.PUREXML END-EXEC.

若不使用 XMLSERIALIZE,DB2 會在 XML 前加上宣告編碼為本地 EBCDIC 碼頁,導致部分用戶端拒絕接收。序列化為 CLOB 可移除該宣告,確保跨平台相容。

管道配置與資源定義

類似場景一,僅將程式名改為 WEBSLCT,路徑設為 /pureXML/select,其餘 DB2 相關資源可共用。

瀏覽器驗證

直接在瀏覽器訪問 https://host:port/pureXML/select,即可看到場景一存入的完整 SOAP 訊息。

WEBINST 程序插入的 SOAP 消息

擴展應用與安全性

  • 利用 SQL XML 更新修改已存 XML(如變更地址)
  • 存儲前用 XMLTABLE 刪除敏感節點
  • 將 XML 轉關聯表儲存,支援多樣化查詢
  • 配合 CICS Web 服務安全機制保護資料傳輸

結語

本文實證了 CICS COBOL 應用程式可零解析地與 DB2 pureXML 雙向交換 XML,極大簡化開發並提升效能。此架構易於擴展為大型分散式應用(如 XML 表單、訊息總線)的核心組件,pureXML 更可作為可查詢的審計日誌。完整範例代碼請見文末下載區。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved