目次 前 次 PDF


Oracle TMA TCP for IMSのプログラミング

Oracle TMA TCP for IMSのプログラミング
Oracle Tuxedo Mainframe Adapter for TCP (IMS)(以後TMA TCP for IMSと呼ぶ)では、リモート・システムから受信されたリクエスト(サーバー・リクエスト)に対するサービスの提供と、リモート・システムが提供するサービスに対するリクエスト(クライアント・リクエスト)の開始を行うIMSアプリケーション・トランザクションをユーザーが作成できます。
次のトピックでプログラミングに関する留意事項について説明します。
アプリケーションのプログラミング
IMSクライアントとサーバーのトランザクションは通常のIMSメッセージ処理プログラム(MPP)であり、OTMAと連携するときには、サーバー・トランザクションはFastPathプログラムにもなります。これらのプログラムは、IMSでサポートされている任意のプログラミング言語で記述できます。COBOLはこの目的で使用されている従来からの言語であるため、このドキュメントの例はCOBOLで記載します。しかし、各例は、Cなどサポートされている他の言語に容易に移行できます。
プログラミング・インタフェース
TMA TCP for IMS製品とユーザー作成のIMSクライアントおよびサーバー・トランザクションは、標準のIMSメッセージを(IMSメッセージ・キューを直接使用するか、OTMAを介して)交換することによって通信します。
IMSサーバー・リクエスト
IMSサーバー・トランザクションは、リモート・システムからのリクエストに対してサービスを提供するトランザクションです。リクエスト・メッセージは、1つのセグメントとして、IMSメッセージ・キューに直接挿入されるか、またはOTMAを介して間接的に挿入されます。IMSサーバー・トランザクションは、必要に応じて、IMSメッセージ・キューからリクエスト・メッセージを取得し、リクエストを処理します。
メッセージ・フォーマット
TMA TCP GatewayをOTMAクライアントとして実行する場合、リクエストまたはレスポンスのメッセージは標準のIMSメッセージ・フォーマットになります。次のメッセージは、OTMAを使用する場合のサンプルです。
リスト6-1 OTMAを使用する場合のメッセージのサンプル
01 BEA-SERVER-REQUEST-RESPONSE-MESSAGE.
05 BEA-SERVER-HEADER
10 LL PIC 9(4) COMP VALUE 0.
10 ZZ PIC 9(4) COMP VALUE 0.
10 TRAN-CODE PIC X(8) VALUE SPACES.
REQUEST-DATA.
 
フィールドの説明
リクエスト・メッセージ内のフィールドは次のとおりです。
 
ヘッダー・ファイルとコピーブック
INCLUDE配布ライブラリには、IMSサーバー・トランザクションで使用することを目的とした次のヘッダー・ファイルとコピーブックが収録されています。
 
レスポンスの送信
レスポンスが要求されている場合は、サーバー・トランザクションがクライアント・レスポンス・メッセージをフォーマットします。
OTMAクライアント・ゲートウェイ
サーバー・トランザクションに渡されるリクエスト・メッセージには、I/O PCBのLTERMフィールド内にあるトランザクション・パイプ(tpipe)の名前が格納されます。セキュリティ機能を使用している場合は、I/O PCBのUSERIDフィールドとGROUPIDフィールドにも、それに関連するデータが格納されます。
レスポンスが要求されている場合は、レスポンス・メッセージがIMSメッセージ・キューに挿入され、OTMAからゲートウェイに戻されます。レスポンス・メッセージは1つのセグメントまたは複数のセグメントとして挿入されます。TMA TCP for IMSゲートウェイはどちらのフォーマットでも処理できます。
IMSクライアント・リクエスト
IMSクライアント・トランザクションは、リモート・システムが提供するサービスに対するリクエストを発行するトランザクションです。IMSクライアント・トランザクションとOTMAクライアント・ゲートウェイを使用する前に、DFSYPRX0およびDFSYDRU0 IMSユーザー・イグジットをインストールする必要があります。これらのユーザー・イグジットに関する詳細は、IBM社のドキュメント『Open Transaction Manager Access Guide』を参照してください。これらのイグジットの基本的なサンプルは、「JCLおよびユーザー・イグジットのサンプル」の項を参照してください。
メッセージ・フォーマット
TMA TCP for IMSのクライアント・リクエストまたはレスポンスのメッセージは、次の連続する3つのセクションで構成されます。
TMA TCP for IMSクライアントのリクエストまたはレスポンスのメッセージは次のフォーマットになっています。
リスト6-2 クライアント・リクエスト/レスポンスのメッセージのフォーマット
01 BEA-CLIENT-REQUEST-RESPONSE-MESSAGE.
05 BEA-CLIENT-HEADER.
10 LL PIC 9(04) COMP VALUE 0.
10 ZZ PIC 9(04) COMP VALUE 0.
10 TRAN-CODE PIC X(08) VALUE SPACES.
10 FILL-CHAR PIC X VALUE SPACES.
10 BEA-RESERVED-1 PIC X(03) VALUE LOW-VALUES.
10 HEADER-LENGTH PIC 9(08) COMP VALUE 0. .
10 CONTEXT-LENGTH PIC 9(08) COMP VALUE 0.
10 DATA-LENGTH PIC 9(08) COMP VALUE 0.
10 MAX-RESPONSE-LENGTH PIC 9(08) COMP VALUE 0.
10 REQUEST-TYPE PIC 9(08) COMP VALUE 0.
88 REQUEST-RESPONSE-REQUIRED VALUE 1.
88 REQUEST-NO-RESPONSE VALUE 2.
10 RESPONSE-FORMAT PIC 9(08) COMP VALUE 0.
88 RESPONSE-SINGLE-SEGMENT VALUE 0.
88 RESPONSE-MULTI-SEGMENT VALUE 1.
10 ERROR-CODE PIC S9(08) COMP VALUE +0.
88 ERR_NO_ERROR VALUE +0.
88 ERR_RESPONSE_TRUNCATED VALUE +4.
88 ERR_HOST_NOT_AVAILABLE VALUE +8.
88 ERR_HOST_BUSY VALUE 12.
88 ERR_TIMEOUT VALUE 16.
88 ERR_SERVICE_NAME VALUE 20.
88 ERR_NO_STORAGE VALUE 24.
88 ERR_REQUEST_FORMAT VALUE 28.
88 ERR_HOST_ERROR VALUE 32.
88 ERR_TP_ERROR VALUE 36.
88 ERR_INTERNAL_ERROR VALUE 40.
10 REASON-CODE PIC S9(08) COMP VALUE +0.
88 RSN_NO_REASON VALUE 0.
88 RSN_HEADER_LENGTH VALUE 4.
88 RSN_HEADER_LENGTHS VALUE 8.
88 RSN_REQUEST_TYPE VALUE 12.
88 RSN_NO_RESPONSE_TRAN VALUE 16.
88 RSN_CONTEXT_LENGTH VALUE 20.
88 RSN_DATA_LENGTH VALUE 24.
88 RSN_MAX_DATA_LENGTH VALUE 28.
88 RSN_NO_SERVICE_NAME VALUE 32.
88 RSN_SERVICE_NAME_UNDEFINED VALUE 36.
10 SERVICE-NAME PIC X(16) VALUE SPACES.
10 RESPONSE-TRAN PIC X(08) VALUE SPACES.
10 ORIGIN-TERMINAL PIC X(08) VALUE SPACES.
10 BEA-RESERVED-2 PIC X(16) VALUE LOW-VALUES.
05 USER-CONTEXT-DATA.
10 (
user-defined...)|
05 USER-REQUEST-DATA.
10 (user-defined...)
05 USER-RESPONSE-DATA REDEFINES USER-REQUEST-DATA.
10 (user-defined...)
 
フィールドの説明
クライアント・リクエストまたはレスポンスのメッセージのフィールドは次のとおりです。
 
このリクエストに関連付けられている端末の名前(IMS LTERM)。たとえば、端末メッセージを処理するトランザクションからリクエストが発行される場合、この名前は、関連付けられている端末の名前になります。
ヘッダー・ファイルとコピーブック
INCLUDE配布ライブラリには、IMSクライアント・トランザクションで使用することを目的とした次のヘッダー・ファイルとコピーブックが収録されています。
 
エラー処理
どのクライアント・リクエストも所定のレスポンス・トランザクションが関連付けられている必要があります(リクエスト自体にはアプリケーション・レベルのレスポンスが要求されていないとしても)。TMA TCP for IMS製品は、エラーが発生してリクエストを処理できない場合に備えて、レスポンス・トランザクションをスケジュールします(たとえば、リクエストが正しくフォーマットされていない可能性がある場合、指定サービスが使用できない可能性がある場合など)。
レスポンス・トランザクションは常にエラー・コードをチェックし、リクエストが正常に処理されたかどうかを確認する必要があります。
エラー・タイプ
TMA TCP for IMS製品は、クライアント・リクエストの正常な処理を阻害する可能性のある様々なタイプのエラー状態を認識します。これらを大別すると次のようになります。
無効なリクエスト・フォーマット
TMA TCP for IMSゲートウェイは、クライアント・リクエストを処理先のリモート・システムに送信する前に検証します。検証エラーのタイプとしては、無効なサービス名、無効な長さ値などがあります。
リモート・システムを使用できない
必要なリモート・システムがアクセス不可能な状態になっているか、現在別のリクエストを処理していてビジーになっているため、TMA TCP for IMSゲートウェイがリクエストを処理できないことがあります。
リクエスト・タイムアウト
TMA TCP for IMSゲートウェイは、処理先のリモート・システムに送信される各リクエストを監視します。レスポンスが要求されており、規定の時間内に受信されない場合、リクエストはタイムアウトになります。
リモート・システムのエラー
リモート・システムでエラーが発生したため、リクエストが失敗することがあります。たとえば、リクエスト対象のサービスがアプリケーション・レベルのエラー、セキュリティ認証の失敗を検出することもあれば、リモート・ゲートウェイがリクエスト対象のサービスの呼出しに失敗することもあります。
その他のエラー
発生することはごく稀ですが、一時的な記憶域が容量不足になったために、TMA TCP for IMSがリクエストを処理できなくなることもあります。
Oracle TMA TCP Gatewayによるデータ変換の仕組み
リモートのOracle Tuxedoシステム上のクライアント・プログラムが異なるモデルのコンピュータ上のサービス・ルーチンとの間でデータを送受信するときに、データは必要に応じてTMA TCP Gatewayによって自動的に変換されます。変換の処理内容は、次に示すような属性を変更して、そのデータ型本来の表現をそのまま移し替えることです。
Oracle Tuxedoのバッファ・タイプ
次の表にバッファ・タイプの定義を示します。
 
CARRAYは、終端文字を含まない純粋なデータのみのバッファです。配列内のデータは変換の対象にはなりません。したがって、システム間で送信されるデータは変更されません。(CARRAYは、グラフィック関連ファイルの場合によく使用されるバッファのタイプです。)
VIEWバッファは1つのエントリとして扱うことが可能なフィールド定義の集まりです。これは、COBOLのレコード型とCの構造体に相当します。
データ変換のルール
TMA TCP Gatewayは次のデータ変換ルールに従います。
CARRAYフィールドは、そのままのバイトの並びで変換されずに渡されます。
STRINGおよびCHARフィールドは(必要に応じて)ASCIIからEBCDICに変換されます。
SHORTおよびLONGフィールドはそれぞれ、S9(4) COMPS9(9) COMPに変換されます。
FLOATおよびDOUBLEフィールドはそれぞれ、COMP-1とCOMP-2に変換されます。
注意:
Oracle Tuxedo製品には、VIEW内に、10進数値をサポートするdec_t_tという名前のフィールド・タイプがあります。TMA TCP for IMSゲートウェイは、これらのフィールドをマシンに依存しない表現形態であるパック10進数に変換します。たとえば、dec_t(m,n)とすると、S9(2*m-(n+1))V9(n) COMP-3という結果になります。したがって、8,5というサイズの10進数のフィールドはS9(10)V9(5) COMP-3になります。
次の表に、Cのデータ型とIBM/370のデータ型との間の変換ルールをまとめています。
 
 
文字列データと数値データの詳細
この項では、次の情報について説明します。
入出力バッファおよびレコードのVIEW定義の開発に役立つ情報
NULL文字を含む文字列長の計算
IMSアプリケーションによって使用される入出力バッファのVIEW定義を作成する際に、文字列フィールドで使用されるNULL終端文字を含む余分な部分まで指定しないでください。
たとえば、リモートのIMSアプリケーション・プログラム側では入力レコードの文字数が10文字であることを前提としている場合は、そのフィールドには、10+1 (NULL終端文字も含む長さ)ではなく、10と指定してください。
注意:
TMA TCP Gatewayによって実行される文字セットの変換は、X/Openポータビリティ・ガイドに従って、全面的に各国の言語に対応させることができます。ASCIIとEBCDICとの間の変換は、メッセージ・ファイルから読み込むことができます。TMA TCP Gateway製品のデフォルトの動作で、ほとんどの英語版のアプリケーションの要件を満たすはずです。しかし、表のカスタマイズが必要になることもあります。詳細な手順は、Oracle Tuxedo Mainframe Adapter for TCP Gatewayユーザーズ・ガイドを参照してください。
数値データの変換
中間データの型と変換先の型で表現可能な範囲な中に、表現する必要がある最大値が収まるのであれば、数値データを別のデータ型に簡単に変換できます。
たとえば、double型のFMLフィールドをリモートの送信先システム環境のパック10進数フィールドに変換するには、その処理に適したdec_t type VIEW要素を指定します。
また、数値と文字列との間でも変換が可能です。たとえば、FMLバッファをdec_t型に直接変換することはできませんが、10進数値を文字列フィールドに格納し、そのフィールドをVIEW定義のdec_tフィールドにマップすることができます。

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved