ユーザーズ・ガイド

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを取得 - 新規ウィンドウ
コンテンツはここから始まります

トランザクションおよびバッファの管理

この項では、以下の内容について説明します。

 


トランザクション管理

トランザクション管理では、トランザクションの成否に関係なく、トランザクション完了の調整が可能です。トランザクション内では、アプリケーション・プログラマによるリモート・サービス実行のリクエスト、またはリモート・ドメインのユーザーによるローカル・サービス実行のリクエストが可能です。Domainsトランザクション管理では、リモート・トランザクションのローカル・トランザクションへのマッピング、およびこれらのトランザクションの正常終了(コミットまたはロールバック)が調整されます。

Oracle Tuxedoシステムでは、トランザクション・ツリーは2レベルで構成されており、ルートはグローバル・トランザクションを調整するグループであり、ブランチはトランザクションに関連するその他のマシン上のグループです。各グループは他のグループからは独立してグローバル・トランザクションの一部を実行します。したがって、各グループは暗黙的にトランザクション・ブランチを定義します。このOracle Tuxedoトランザクション・ブランチがTMA OSI TPドメインによって制御される場合、実際のOSI TPトランザクション・ブランチが複数含まれる場合があります。TMA OSI TPゲートウェイでは単一のOracle Tuxedoトランザクション・ルートおよび多数のOSI TPトランザクション・ブランチが制御されます。Oracle Tuxedoシステムでは、トランザクション・マネージャ・サーバー(TMS)を使用してグローバル・トランザクションの完了を調整し、各ブランチが完了したことを確認します。

Domainsでのトランザクション管理は、次のようにまとめることができます。

密結合トランザクションおよび疎結合トランザクション

Open Group DTPモデルのトランザクション・マネージャ(TM)は、リソース・マネージャ(RM)との密結合または疎結合関係を定義してトランザクション・ツリーを構築できます。関係の結合は、DMCONFIGファイルでのローカル・サービスの定義方法によって決定されます。

密結合関係では、1つのグローバル・トランザクションに参加し、1つのRMにアクセスするすべてのプロセスで同じトランザクション識別子(XID)が使用されます。この関係によってプロセス間のデータを最大限に共有できます。つまり、XA準拠のRMでは、同じXIDのプロセスによって使用されるリソースがロックを共有するとみなされます。

Oracle Tuxedoシステムでは、グループ・コンセプトによる密結合関係、つまり、同一トランザクション・ブランチに属する特定のグローバル・トランザクションのかわりに、グループによる処理を実現します。すべてのプロセスには同一のXIDが付与されます。疎結合関係では、TMはグローバル・トランザクションに参加する各作業に対してトランザクション・ブランチを生成します。RMは各トランザクション・ブランチを別々に処理します。トランザクション・ブランチ間ではデータやロックは共有されません。トランザクション・ブランチ間でデッドロックが発生する場合があり、そのためグローバル・トランザクションがロールバックされます。Oracle Tuxedoシステムでは、1つのグローバル・トランザクションに様々なグループが参加している場合、グループごとにトランザクション・ブランチが定義され、疎結合関係が確立されます。TMA OSI TPインスタンスはユーザーが構成可能であり、疎結合関係を確立することによって、2つのドメイン間の相互操作で必要なトランザクション・ブランチを最小限にし、デッドロック問題を解決できます。

次の図では、疎結合および密結合の統合を示し、これについて説明します。

図2-1 密結合の統合の例

密結合の統合の例

図2-1に示す密結合の統合のトランザクション・ツリーでは、2つのドメイン間の相互操作に必要なトランザクション・ブランチ数を最小限にし、トランザクション間のデッドロックの可能性を排除します。アプリケーションAは3つのリクエスト(r1、r2、r3)をリモート・ドメインBに対して作成します。OSI TPは同じOSI TPトランザクション(T1)にマップされた3つのリクエストすべてを送信します。ドメインBでは、TMA OSI TPゲートウェイがリモート・サービスについてCOUPLINGフラグをチェックし、サービスBがCOUPLING=TIGHTであることを検出します。この場合、サービスBに対するすべてのリクエストは同一のOracle Tuxedoシステム・トランザクションに属しています。サービスBに対するそれぞれのリクエストは前述のリクエストに追加され、すべて同一のOracle Tuxedo XID(T2)が付与されます。グループG1のリソースは切り離されず、このトランザクションのためのサービスBのインスタンスに対する変更が他のグループに対して表示されます。リクエストr4はドメインBの識別子T2にマップされますが、Tuxedoドメインによって、このトランザクション・ツリー(r4: BからA')に対して新規ブランチが生成されます。これはドメインAの新規トランザクション・ブランチであるため、ゲートウェイによって新規マッピングT3が新規Oracle Tuxedoシステム・トランザクションに対して生成されます。ドメインAのゲートウェイ・グループでもグループG4が調整され、ドメイン間接続の階層構造はこのマッピングで完全に有効になります。グループG4はグループG1の後にコミットされます。

図2-2 疎結合の統合の例

疎結合の統合の例

図2-2に示す疎結合の統合のトランザクション・ツリーでは、クライアントが開始したグローバル・トランザクションを調整するドメインAのグループG0を示しています。この場合、アプリケーションAは3つのリクエスト(r1、r2、r3)をリモート・ドメインBに送信します。密結合の場合と同様に、3つのブランチはすべて、OSI TPトランザクションT1に表示されます。ドメインBでは、TMA OSI TPゲートウェイでリモート・サービスのCOUPLINGフラグをチェックし、サービスBがCOUPLING=LOOSEであることを確認します。この場合、TMA OSI TPゲートウェイでは3つのOracle Tuxedoシステム・トランザクションT2、T3およびT4が生成されます。G1に対する変更は独立しています。たとえば、サービスBによる変更は、サービスB'には表示されません。BがA'をコールバックすると、新規トランザクションT5が生成されます。

Domainsをまたがるグローバル・トランザクション

単一のOracle Tuxedoアプリケーション内のグローバル・トランザクションは2レベル・トランザクション・ツリーに従いますが、ドメイン間のグローバル・トランザクションはより複雑なトランザクション・ツリーに従います。この理由は2つあります。

ドメイン間のコミット・プロトコルは、複雑なトランザクション・ツリー構造を処理できるように階層的である必要があります。たとえば、ループバック・サービス・リクエストはあるドメイン(ドメインA)から別のドメイン(ドメインB)に対して送信され、元のドメインでの処理用に戻されます。ドメインBのサービスは、ドメインAの別のサービスをリクエストします。トランザクション・ツリーには、ネットワーク・レベルの2つのブランチがあります。つまり、AからBへのブランチb1、およびBからAへのブランチb2です。ドメインAは、Bからコミットの指示を受けるまで、ブランチb2での作業完了をコミットできません。

TMA OSI TPのインスタンスは、オプションで密結合関係を実現することにより、GTRIDマッピングを最適化します。TMA OSI TPでは、同じグローバル・トランザクションから発行されたサービス・リクエストは、同じネットワーク・トランザクション・ブランチにマップされます。したがって、受信したサービス・リクエストは、1つのOracle Tuxedトランザクションにマップされます。ただし、ドメイン間通信の階層構造とドメイン間トランザクション・ツリーは保持される必要があります。密結合関係の例については、図2-1を参照してください。

TMA OSI TPによる最適化処理は、単一のドメインに対してのみ適用されます。トランザクションに複数のドメインが関係する場合、ネットワーク・トランザクション・ツリーには、ドメイン間の通信ごとに少なくとも1つのブランチが必要です。したがって、ドメインにまたがるネットワーク・トランザクション・ツリーは疎結合のままになります。トランザクション・ブランチの数は、トランザクション内のドメインの数になります。これは、すべてのブランチが同じリソース・マネージャ・インスタンスにアクセスしている場合も同じです。Domainsゲートウェイ・グループは、ドメイン間トランザクションについては異なるトランザクション・ブランチを生成するため、疎結合関係を実現します。

疎結合関係の例については、図2-2を参照してください。ここでも、ゲートウェイでは、Oracle Tuxedoトランザクションとネットワーク・トランザクションの間のマッピングを実行する必要があり、ドメイン間通信の階層構造も維持されている必要があります。図2-2では、リクエストr1、r2およびr3が1つのTMA OSI TPトランザクション・ブランチにマップされています。このため、ドメインBで生成される必要があるものは、1つのOracle Tuxedoトランザクションのみです。リクエストr4はドメインBの識別子にマップされますが、TMA OSI TPはそのトランザクション・ツリー(r4: BからA')に新規ブランチを生成します。これはドメインAの新規ブランチであるため、ゲートウェイは新規Oracle Tuxedoトランザクションに対する新規マッピングを生成します。グラフでは、ドメインAのゲートウェイ・グループGWが、グループG4も調整する様子を示します。このため、ドメイン間通信の階層構造はこのマッピングによって強化されます。グループG4はグループG1より先にコミットすることはできません。

トランザクション・リカバリ

OSI TPは2フェーズ・コミット・プロセスの第2フェーズでエラーが発生した場合に、個々のダイアログのトランザクション全体をリカバリすることができます。コミットの第2フェーズの前に発生したエラーについては、トランザクションは自動的にロールバックされます。コミットの第2フェーズの開始後に発生するエラーのタイプは3種類あります。このようなエラーのタイプについては、次のトランザクション・リカバリ・サービスのアクションが実行されます。

表2-1 エラーに対するトランザクション・リカバリ・アクション
エラー・タイプ
トランザクション・リカバリ・アクション
通信エラー
TMA OSI TPにより、通信が自動的に再確立され、トランザクションを完了できます。
ソフトウェア・エラー
TMA OSI TPは、アプリケーションがリストアされるまでトランザクションに関連する他のホストとの通信を保持します。アプリケーションがリストアされると、OSI TPは完了する必要のあるアクティブ・トランザクションのアプリケーション、および各トランザクションの状態を通知します。アプリケーションはOSI TPを送信し、各トランザクションをコミットまたはロールバックする必要があります。
システム・エラー
アプリケーションからTMA OSI TPに、完了する必要があるアクティブ・トランザクション、および保護されたデータ・ログによる各トランザクションの状態が通知されます。次にTMA OSI TPが関連する他のホストとの通信を確立し、トランザクションを完了することができます。

 


バッファおよびデータ変換

TMA OSI TPソフトウェアは型付きバッファを使用してデータを送受信します。次のバッファ・タイプでは、完全なバッファ変換がサポートされています。

注意: Null X_OCTETバッファはサポートされていません

次の項では、TMA OSI TPがデータ・バッファを処理する手順について説明します。

バッファ・タイプのレイアウト変換

XATMI(X/Open Application Transaction Manager Interface)のOSI TPへのマッピングはXATMI ASE(アプリケーション・サービス要素)で定義されています。Oracle TMA OSI TPではこの組合せをサポートしています。TMA OSI TPを使用する相互運用性を実現するには、リモート・システムでXATMI ASEをサポートする必要があります。このため、STRING、VIEW、FMLおよびCARRAYなどのTuxedo固有のバッファ・タイプをXATMI標準タイプに変換する必要が生じます。Oracle TMA OSI TP Gatewaysでは、これらのレイアウト変換を暗黙的に実行します。

ASN.1エンコーディング

Abstract Syntax Notation 1(ASN.1)はバイト順、単語の長さ、文字セットなど、データ表現の違いを扱うための基準となる表現を示す国際規格です。ローカル・ゲートウェイ(GWOSITP)はローカル・クライアント・プログラムからの入力をエンコードします。これによって、リモート・サービスに送信するASN.1エンコード・レコードが作成されます。応答を受信すると、クライアントに戻す前にデコードされます。同様に、ローカル・サービスからのリモート・リクエストをローカル・ゲートウェイが受信すると、ASN.1形式からデコードされます。次に応答がエンコードされ、リモート・クライアントに戻されます。

バッファおよびレコード

次の用語は、入力データおよび出力データの説明に使用されます。

バッファ

ローカルOracle Tuxedoリージョン内にあるものとしてデータを入力または出力します。これには、Oracle Tuxedoソフトウェアがサポートする、Oracle Tuxedo ATMIバッファ・タイプおよびX/Open XATMIバッファ・タイプの両方の、すべてのバッファ・タイプが含まれます。

レコード

異なるOpen/OLTPシステム上で、ローカルのOracle Tuxedoリージョンの外部にあるものとしてデータを入力または出力します。

これらの用語は、TMA OSI TPによる入出力データの処理方法の理解を容易にするものです。

ローカル・プログラムから受信したバッファ

TMA OSI TPゲートウェイでは、次のようにローカル・プログラムからのバッファを処理します。

  1. TMA OSI TPがローカル・プログラムからバッファを受信すると、バッファ・タイプが自動的に判別されます。
  2. TMA OSI TP製品では、ローカル・クライアント・プログラムからリモート・サービスに送信された入力バッファが自動的に「型付き」にされます。

    TMA OSI TP製品では、ローカル・サービスからリモート・クライアント・プログラムに戻された出力バッファが自動的に「型付き」にされます。

  3. TMA OSI TPでバッファ・タイプが判別された後、構成ファイル(DMCONFIG)が参照され、バッファを別の形式に変換する必要があるかどうかが判別されます。
  4. リモート・サービスに送信されたクライアント・リクエストは、これらのサービスで意味のあるレコード形式に変換する必要があります。

    リモート・クライアント・プログラムに戻されたサーバー・レスポンスは、これらのプログラムで意味のあるレコード形式に変換する必要があります。

  5. 変換の必要性が構成に示されている場合、TMA OSI TPにより、バッファは構成で指定されたレコード形式に変換されます。

リモート・プログラムから受信したレコード

TMA OSI TPゲートウェイでは、次のようにリモート・プログラムからのレコードを処理します。

  1. TMA OSI TPでリモート・システムからのレコードを受信すると、ドメイン構成(DMCONFIG)が参照され、レコード・タイプ、およびそのレコードを別の形式に変換する必要があるかどうかが判別されます。
  2. リモート・クライアント・プログラムからのクライアント・リクエストは、ローカル・サービス・ルーチンで受入れ可能なバッファ形式に変換する必要があります。

    リモート・サービスから戻されたサーバー・レスポンスは、ローカル・クライアント・プログラムで受入れ可能なバッファ形式に変換する必要があります。

  3. 変換の必要性が構成に示されている場合、TMA OSI TPにより、レコードは構成で指定されたバッファ形式に変換されます。

 


バッファおよびレコード変換用パラメータの管理

TMA OSI TP製品では、バッファとレコードのマップに使用できる4つの構成パラメータが用意されています。これらのパラメータはオプションです。

次のバッファ構成パラメータは、ドメイン構成ファイル(DMCONFIG)で必要に応じてDM_LOCAL_SERVICESおよび/またはDM_REMOTE_SERVICESセクションで指定されます。

INBUFTYPE

Tuxedoクライアントまたはサーバーから受信したバッファのタイプ、および一部には形式を示します。これにより、このサービスで受け入れられるデータ型のバッファ・タイプのネーミング・スペースが単一のバッファ・タイプに限定されます。

OUTBUFTYPE

Tuxedoクライアントまたはサーバーに送信されるバッファのタイプ、および一部には形式を示します。このパラメータは、受信メッセージを変換するタイプおよび形式の指定に使用します。

INRECTYPE

リモート・ゲートウェイに送信されるレコードのタイプ、および一部には形式を示します。このパラメータは、バッファおよびレコードの変換に使用します。

OUTRECTYPE

リモート・ゲートウェイから受信するレコードのタイプ、および一部には形式を示します。

これらの4つのパラメータの定義は、サービス・リクエスト元がローカルかリモートかによって決まります。次の項では、これらのパラメータのサービス・リクエスト元について説明します。

ローカルによる呼出し用パラメータ

この項では、直接のOracle Tuxedoリージョン内での、ローカルによるサービス呼出しのTMA OSI TPでの処理方法について詳しく説明します。また、ローカル・クライアント・プログラムとリモート・サービスの間のバッファおよびレコード変換の管理における、INBUFTYPE、INRECTYPE、OUTRECTYPEおよびOUTBUFTYPEパラメータの使用方法についても説明します。

次の図では、ローカルOracle Tuxedoクライアント・プログラムがサービス呼出しを発行し、TMA OSI TPゲートウェイがその呼出しをTMA OSI TPを介してリモート・サーバーにルーティングしています。

図2-3 ローカルによる呼出し中のパラメータのマップ方法

このような状況では、図に示す4つのパラメータは次のような意味を持ちます。

入力バッファから入力レコードへのマッピング・ガイドライン

次の項では、ローカルによるサービス呼出し(ローカル・クライアント・プログラムからのリモート・サービスの呼出し)におけるINBUFTYPEおよびINRECTYPEパラメータの使用方法について詳しく説明します。

INBUFTYPE

INBUFTYPEパラメータを使用して、ローカル・クライアント・プログラムがサービス・リクエストを発行する際にローカルTMA OSI TPゲートウェイに渡されるリクエスト・バッファ・タイプを指定します。Tuxedoではこの情報を使用して、ローカル・クライアントからのバッファ・タイプをINBUFTYPEパラメータで定義したタイプに限定します。

INRECTYPE

INRECTYPEパラメータを使用して、特定のリモート・サービスで必要とされるリクエスト・レコードのタイプ、および一部には形式を指定します。TMA OSI TPゲートウェイはこの情報を使用して、Oracle Tuxedoリクエスト・バッファを、リモート・サービスで処理可能なレコードに変換します。
INRECTYPEパラメータは、リクエスト・バッファのタイプと構造がリモート・サービスで想定されるリクエスト・レコードと同じ場合は省略されます。 次の表に示すケースに該当する場合は、INRECTYPEパラメータを指定する必要があります。

ケース
説明
リモート・サービスで、クライアント・プログラムのリクエスト・バッファと異なる構造の入力レコードが使用される場合。
リモート・サービスで、クライアント・プログラムのVIEW、X_C_TYPEまたはX_COMMONバッファとは異なる構造のレコードが使用される場合。たとえば、リモート・サービスでの構造体メンバーの順序が異なると想定される場合です。
リモート・サービスで、タイプと構造の両方がクライアント・プログラムのリクエスト・バッファとは異なるリクエスト・レコードが使用される場合。
クライアント・プログラムがOracle Tuxedo FMLバッファを使用し、リモート・サービスで適切な構造のレコードを想定している場合。

出力レコードから出力バッファへのマッピング・ガイドライン

次の項では、ローカルによるサービス呼出し(ローカル・クライアント・プログラムからのリモート・サービスの呼出しおよびサービスからの出力の受信)におけるOUTRECTYPEおよびOUTBUFTYPEパラメータの使用方法について詳しく説明します。

OUTBUFTYPE

OUTBUFTYPEパラメータを使用して、ローカル・クライアント・プログラムで想定される応答バッファのタイプ、および一部には構造を指定します。TMA OSI TPゲートウェイはこの情報を使用して、リモート・サービスからの応答レコードを、適切な応答バッファにマップします。TMA OSI TPは受信したレコードを、OUTBUFTYPEパラメータで定義したタイプとサブタイプにマップします。

OUTRECTYPE

OUTRECTYPEパラメータを使用して、特定のリモート・サービスがローカルTMA OSI TPゲートウェイに戻す応答レコードのタイプ、および一部には形式を指定します。TMA OSI TPは受信したレコードを、OUTBUFTYPEパラメータで定義したタイプとサブタイプにマップします。
OUTBUFTYPEパラメータは、リモート・サービスから戻される応答レコードのタイプと構造がローカル・クライアント・プログラムで想定される応答バッファと同じ場合は省略されます。 次の表に示すケースに該当する場合は、OUTBUFTYPEパラメータを指定する必要があります。

ケース
説明
リモート・サービスで、ローカル・クライアント・プログラムが想定する応答バッファとな異なる構造の応答レコードが戻される場合。
リモート・サービスで、クライアント・プログラムのVIEW、X_C_TYPEまたはX_COMMONバッファとは異なる構造のレコードが戻される場合。たとえば、出力レコードの構造体メンバーは、出力バッファの構造体メンバーの順序とは異なる場合です。
リモート・サービスで、クライアント・プログラムが想定する応答バッファとは異なるタイプおよび構造の応答レコードが戻される場合。
リモート・サービスで特定のレコードが戻され、ローカル・クライアント・プログラムで該当するOracle Tuxedo FMLバッファを想定している場合。

リモートによる呼出し用パラメータ

この項では、ローカルのOracle Tuxedoリージョン外での、TMA OSI TPによるリモート・コンピュータからのサービス呼出しの処理方法について詳しく説明します。また、リモート・クライアント・プログラムとローカル・サービスの間のバッファおよびレコード変換の管理におけるINRECTYPE、INBUFTYPE、OUTBUFTYPEおよびOUTRECTYPEパラメータの使用方法についても説明します。

次の図では、リモート・クライアント・プログラムがサービス・リクエストを発行し、TMA OSI TPゲートウェイがそのリクエストをローカルTMA OSI TPゲートウェイにルーティングしています。ゲートウェイはネットワークからリクエストを受け取り、それをローカルOracle Tuxedoサーバーに渡します。

図2-4 リモートによる呼出し中のパラメータのマップ方法

リモートによる呼出し中のパラメータのマップ方法

このような状況では、図に示す4つのパラメータは次のような意味を持ちます。

入力レコードから入力バッファへのマッピング・ガイドライン

この項では、リモート・システムからのサービス呼出し(リモート・クライアント・プログラムからのローカル・サービスの呼出し)におけるINRECTYPEおよびINBUFTYPEパラメータの使用方法について詳しく説明します。

INBUFTYPE

INBUFTYPEパラメータを使用して、TMA OSI TPゲートウェイで想定されるローカル・サーバーからの応答バッファのタイプ、および一部には構造を指定します。このパラメータによって、このサービスで受け入れるデータ型のバッファ・タイプのネーミング・スペースが単一のバッファ・タイプに限定されます。ゲートウェイでは、実行時にバッファのタイプが自動的に判別されるため、ここでは概念的な補足としてこのパラメータについて説明します。

INRECTYPE

INRECTYPEパラメータを使用して、ローカルTMA OSI TPゲートウェイがリモート・クライアントに送信する応答レコードのタイプ、および一部には形式を指定します。ローカル・サーバー・プログラムから送信される応答バッファのタイプと構造が、リモート・クライアントで想定される応答レコードと同じ場合は、INRECTYPEパラメータを省略できます。
次の表に示すケースに該当する場合は、INRECTYPEパラメータを指定する必要があります。

ケース
説明
リモート・クライアント・プログラムで、ローカル・サービスから送信される応答バッファとは別の構造の応答レコードが必要とされる場合。
リモート・クライアント・プログラムで、ローカル・サービスのVIEW、X_C_TYPEまたはX_COMMON バッファとは異なる構造のレコードが送信される場合。たとえば、入力レコードの構造体メンバーは、入力バッファの構造体メンバーの順序とは異なる場合です。
リモート・クライアント・プログラムで、ローカル・サービスから送信される応答バッファとな異なるタイプおよび構造の応答レコードが必要とされる場合。
リモート・クライアント・プログラムで特定のレコードが想定され、ローカル・サービスから該当するOracle Tuxedo FMLバッファが送信される場合。

出力バッファから出力レコードへのマッピング・ガイドライン

この項では、リモート・コンピュータよるサービス呼出し(リモート・クライアント・プログラムからのローカル・サービスの呼出しおよびサービスからの出力の受信)におけるOUTBUFTYPEおよびOUTRECTYPEパラメータの使用方法について詳しく説明します。

OUTBUFTYPE

OUTBUFTYPEパラメータはローカルTMA OSI TPゲートウェイからローカル・サーバーに送信されるリクエスト・バッファを指定します。TMA OSI TPゲートウェイはこの情報を使用して、リモート・クライアントからのリクエスト・レコードをローカル・サーバーが処理可能なバッファに変換します。

OUTRECTYPE

OUTRECTYPEパラメータを使用して、特定のリモート・クライアント・プログラムがTMA OSI TPゲートウェイに送信するリクエスト・レコードのタイプ、および一部には形式を指定します。TMA OSI TPは受信したレコードを、OUTRECTYPEパラメータで定義したタイプとサブタイプにマップします。
OUTBUFTYPEパラメータは、ローカル・サービスのリクエスト・バッファのタイプと構造がリモート・クライアント・プログラムから送信されるリクエスト・レコードと同じ場合は省略されます。 次の表に示すケースに該当する場合は、OUTBUFTYPEパラメータを指定する必要があります。

ケース
説明
リモート・クライアント・プログラムで、ローカル・サービスのリクエスト・バッファとは別の構造のリクエスト・レコードが送信される場合。
リモート・クライアント・プログラムから、ローカル・サービスのVIEW、X_C_TYPEまたはX_COMMONバッファとは異なる構造のレコードが送信される場合。たとえば、ローカル・サーバー・プログラムでの構造体メンバーの順序が異なると想定される場合です。
リモート・クライアント・プログラムから、タイプと構造の両方がローカル・サービスのリクエスト・バッファとは異なるリクエスト・レコードが送信される場合。
リモート・クライアントでレコードが出力され、ローカル・サービス・プログラムで該当するOracle Tuxedo FMLバッファを想定している場合。

 


バッファからレコードへのマッピング

次の図に、考えられるすべてのバッファのレコードへのマッピングを示します。TMA OSI TPゲートウェイは、TMA OSI TP構成にある情報に基づいて、バッファからレコードへマップします。このマッピングは、Tuxedoクライアント・リクエストとTuxedoサーバー・レスポンスについて行われます。

図2-5 バッファからレコードへのマッピング

バッファからレコードへのマッピング

次では、上の図に示す、考えられるマッピングおよび推奨のINRECTYPEパラメータについて説明します。INBUFTYPEパラメータは検証にのみ使用されるため、ここでは説明しません。

  1. Oracle Tuxedo CARRAY入力バッファはX_OCTET入力レコードにコピーできます。CARRAYバッファには、変換されないrawデータが含まれます。TMA OSI TPゲートウェイではCARRAY TuxedoバッファがX_OCTETとして自動的にリモート・システムに送信されるため、INRECTYPEパラメータを設定する必要はありません。
  2. Oracle Tuxedo STRING入力バッファはX_OCTET 入力レコードにマップできます。データ変換は行われません。STRINGバッファは左から右に、最初のNULL文字に達する部分までコピーされます。ただし、ゲートウェイではデータを送信する前に終了文字が削除されます。TMA OSI TPゲートウェイでは、STRINGバッファがX_OCTETとして自動的に送信されるため、INRECTYPEパラメータを設定する必要はありません。
  3. Oracle Tuxedo XML入力バッファはX_OCTET入力バッファにマップできます。XMLバッファはX_OCTETバッファにコピーできます。データは変換されません。これは、XMLデータ型をサポートしていないシステムにXMLデータを渡す際に役立ちます。
  4. Oracle Tuxedo VIEW入力バッファはX_COMMONまたはX_C_TYPE入力レコードにマップできます。このVIEW定義に必要なレコード・タイプと名前をINRECTYPEパラメータで定義します。TMA OSI TPゲートウェイはVIEWを正しいX_COMMONまたはX_C_TYPE入力レコードに変換します。
  5. Oracle Tuxedo VIEW、X_COMMON またはX_C_TYPE入力バッファは、X_COMMONまたはX_C_TYPE入力レコードに任意の組合せでマップできます。ただし、この場合はリモート・サービスで想定されるデータ構造(図3-3の考えられるX_COMMON `B'マッピング)は、クライアント・プログラムで使用するデータ構造(図3-3のVIEW `A')とは異なります。このため、次を実行する必要があります。
    1. リモート・サービスで想定されるデータ構造のVIEW定義を作成します。
    2. このVIEW定義で必要なレコード・タイプと名前をINRECTYPEパラメータ内で指定します。
  6. Oracle Tuxedo FML入力バッファをFMLのサポートのないリモート・サービスに送信する場合、X_C_TYPEまたはX_COMMONのいずれかの入力レコード・タイプにマップする必要があります。また、リモート・サービスで想定される入力データ構造のVIEW定義を作成する必要があります。INRECTYPEVIEW:viewnameに設定します。FML変換に関する詳細は、Oracle Tuxedoのオンライン・ドキュメントを参照してください。
  7. 注意: ソースとターゲットのVIEW名が異なる場合、TMA OSI TPで実行するすべてのVIEWからVIEWへの変換に、FMLフィールドを指定する必要があります(たとえば、VIEW=V10.V --> X_C_TYPE=V10.VではFMLマッピング・フィールドは不要です)。つまり、VIEWで使用するVIEWから別のVIEWへ、VIEWからFMLへ、またはFMLからVIEWへの 変換は、適切なFMLフィールドで定義する必要があります(VIEW定義のFNAME列に破線はありません)。FMLフィールドを一致させるには、-nオプションを指定せずにVIEWをコンパイルする必要があります。
  8. TMA OSI TPのNative-Aエンコーディング機能により、Tuxedo VIEWバッファ・タイプがNATIVE A レコード・タイプに変換されます。この機能により、エンコード/デコード処理の大部分がA-SeriesからTuxedoシステムに移行されます。

 


レコードからバッファへのマッピング

次の図に、考えられるすべてのレコードのバッファへのマッピングを示します。TMA OSI TPゲートウェイは、TMA OSI TP構成にある情報に基づいて、レコードからバッファへマップします。このマッピングは、リモート・クライアント・リクエストとリモート・サーバー・レスポンスについて行われます。

図2-5 レコードからバッファへのマッピング

レコードからバッファへのマッピング

次では、上の図に示す、考えられるマッピングおよび推奨の(ローカルからのサービス呼出しの)OUTBUFTYPEパラメータの設定について説明します。この推奨では、データ変換を制御するOUTBUFTYPEパラメータを使用します。

  1. 受信したX_OCTET出力レコードはCARRAYまたはX_OCTET出力バッファにコピーできます。CARRAYバッファには、変換されていないrawデータが含まれます。OUTBUFTYPECARRAYまたはX_OCTETに設定しますが、OUTRECTYPEを設定する必要はありません。
  2. 受信したX_OCTET出力はSTRING出力バッファにもコピーされます。これにより、変換対象にならない文字列が作成されます。X_OCTETからSTRINGへの段階で、Tuxedoアプリケーションの終わりにNULL値が追加されます。その結果、バッファは元のX_OCTETバッファの長さになります。すべての文字がコピーされるため、X_OCTETバッファにNULL文字がある場合は、後でSTRINGとして処理する際にバッファに影響します。OUTBUFTYPESTRINGに設定する必要があります。
  3. 受信したX_OCTET出力レコードはXML出力バッファにマップされます。データは変換されません。これは、XMLバッファ・タイプをサポートしないシステムからXMLデータ型をサポートするTuxedoドメインへ、XMLバッファを渡す際に役立ちます。
  4. 受信した出力レコードは、同じOracle Tuxedo VIEW出力バッファにマップされます。この場合、リモート・サービスから戻されるすデータ構造は、ローカル・クライアント・プログラムで想定されるものと同じです。新規VIEW定義を作成する必要はありません。OUTRECTYPEパラメータをVIEW:viewnameに設定するとより大きなタイプのチェックに使用できますが、これは必須ではありません。
  5. 受信したX_C_TYPEおよびX_COMMON出力レコードは、任意の組合せでVIEW出力バッファにマップできます。ただし、このような状況では、リモート・サービスから戻されるデータ構造(図2-6に示す X_C_TYPE `B')は、クライアント・プログラムで想定されるデータ構造(図2-6VIEW `A')のデータ構造とは異なります。変換プロセスを容易にするには、次のタスクを実行します。
    • リモート・サービスから戻されるデータ構造のVIEW定義を作成します。
    • VIEW定義で指定された名前が、リモート・サービスから戻される名前(ATMIバッファ・サブタイプ)と異なる場合、出力レコード・タイプとX_C_TYPEの名前(またはX_COMMON)`B'をOUTBUFTYPEパラメータで指定します(これによって、TMA OSI TPリクエスタで自動検出された値をオーバーライドします)。
    • OUTBUFTYPEパラメータで指定されている既存ビュー(図のVIEW `A')の出力バッファ・タイプと名前を指定します。
    • 注意: FMLフィールド定義はVIEW 'B'からVIEW 'A'にマップする場合があります。
  6. 受信したX_COMMONまたはX_C_TYPE出力レコードは、FML出力バッファにマップされます。変換プロセスを容易にするには、次のタスクを実行します。
    • リモート・サービスから戻されるデータ構造のVIEW定義を作成します。
    • VIEW定義で指定された名前が、リモート・サービスから戻される名前(ATMIバッファ・サブタイプ)と異なる場合、出力レコード・タイプとVIEW定義の名前をOUTBUFTYPEパラメータで指定します(これによって、TMA OSI TPリクエスタで自動検出された値をオーバーライドします)。
    • FMLバッファの検証が必要な場合は、DMCONFIGファイルでOUTBUFTYPEをFMLまたはFML32を設定し、後にコロン(:)を付けます(例: OUTBUFTYPE=”FML32:”)。
    • 注意: FMLフィールドは、TMA OSI TPで実行するFMLからVIEWへのすべての変換で指定する必要があります。つまり、FMLからVIEWへの変換に使用するVIEWはすべて、適切なFMLフィールドで指定する必要があります(VIEW定義のFBNAME列に破線はありません)。FMLフィールドを一致させるには、-nオプションを指定せずにVIEWをコンパイルする必要があります。
  7. 受信したNATIVE A出力レコードはVIEW出力バッファにマップできます。

 


バッファ変換の特殊ケースおよび例

バッファ変換の特殊ケースおよび例について、次に例を示します。

View32およびFMLへの変換用DMCONFIGの例

次の例では、リクエストをサービスに送信する前の、受信バッファX_COMMON:v10VIEW:v12への変換を示します。

リスト2-1 View32への変換
*DM_REMOTE_SERVICES
TOUPPER12
RDOM=DALNT2
LDOM=DALNT19220
PRIO=66
RNAME=”TOUPPER12”
INBUFTYPE=”X_COMMON:v10”
INRECTYPE=”VIEW:v12”

次の例では、リクエストをローカル・サービスに送信する前の、受信バッファVIEW:v12 のFMLへの変換、応答をリモート・クライアントに戻す前のFMLのX_C_TYPE:v16への変換を示します。

リスト2-2 FMLへの変換
*DM_LOCAL_SERVICES
OUTRECTYPE=”VIEW:v12”
OUTBUFTYPE=”FML:”
INBUFTYPE=”FML:”
INRECTYPE=”X_C_TYPE:v16”

FMLの詳細は、Oracle Tuxedoオンライン・ドキュメント( http://www.oracle.com/bea/support.html)を参照してください。

 


XMLバッファのサポート

Oracle TMA OSI TPではTuxedo XMLバッファ・タイプをサポートしています。XMLバッファはネットワークを介してのみ渡されるため、X_OCTETバッファと同様に扱われます。データは変換されません。

XMLバッファはX_OCTETに変換されなければ、XMLデータ型としてリモート・ドメインに渡されます。リモート・ドメインでXMLデータ型をサポートしていない場合、リモート・ドメインでデコード・エラーが発生します。


  先頭に戻る       前  次