C 言語を使用した Oracle Tuxedo アプリケーションのプログラミング

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

Oracle Tuxedo プログラミングの概要

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

 


Oracle Tuxedo 分散アプリケーションのプログラミング

分散アプリケーションは、複数のハードウェア システム上にあるソフトウェア モジュールから構成され、これらのモジュールが互いに通信してアプリケーションのタスクが実行されます。たとえば、次の図に示すリモート オンライン銀行業務システムの分散アプリケーションは、顧客のホーム コンピュータで実行されるソフトウェア モジュールと、すべての口座レコードを管理する銀行のコンピュータ システムから構成されています。

図 1-1 分散アプリケーションの例 - オンライン銀行業務システム

分散アプリケーションの例 - オンライン銀行業務システム

たとえば、ログオンしてメニューからオプションを選択するだけで、残高を照会できます。この処理では、ローカル ソフトウェア モジュールが特別なアプリケーション プログラミング インタフェース (API) 関数を使用して、リモート ソフトウェア モジュールと通信しています。

Oracle Tuxedo 分散アプリケーション プログラミング環境では、分散ソフトウェア モジュール間で安全かつ信頼性の高い通信を行うために必要な API 関数が提供されています。Oracle Tuxedo API は、アプリケーション トランザクション モニタ インタフェース (ATMI) と呼ばれます。

ATMI を使用すると、以下の操作を行うことができます。

 


コミュニケーション パラダイム

次の表は、アプリケーション開発者が利用できる Oracle Tuxedo のコミュニケーション パラダイムを示しています。

表 1-1 コミュニケーション パラダイム
パラダイム
説明
要求/応答型通信では、あるソフトウェア モジュールが 2 番目のソフトウェア モジュールに要求を送り、その応答を受け取ります。要求元が応答を受け取るまで処理が行われずに待機する同期通信、または要求元が応答を待機する間も処理が継続される非同期通信の 2 種類があります。
このモードは、クライアント/サーバ相互作用とも呼ばれます。最初のソフトウェア モジュールがクライアント、2 番目のソフトウェア モジュールがサーバになります。
このパラダイムの詳細については、「クライアントおよびサーバへの要求/応答のコーディング」を参照してください。
会話型通信は要求/応答型通信に似ていますが、「会話」が終了する前に複数の要求や応答が発生します。会話型通信では、会話が切断されるまでクライアントとサーバで状態の情報が保持されます。クライアントとサーバ間でメッセージをやり取りする方法は、使用するアプリケーション プロトコルによって決定されます。
通常、会話型通信はサーバからクライアントへの長い応答のバッファとして使用されます。
このパラダイムの詳細については、「会話型クライアントおよびサーバのコーディング」を参照してください。
アプリケーション キュー ベースの通信
アプリケーション キュー ベースの通信では、遅延通信、つまり時間に依存しない通信が行われます。この通信では、クライアントとサーバがアプリケーション キューを使用して通信します。Oracle Tuxedo/Q 機能を使用すると、メッセージを永続的な記憶装置 (ディスク) や一時的な記憶装置 (メモリ) のキューに入れることができ、後で処理したり取り出すことができます。
アプリケーション キュー ベースの通信は、たとえば、メンテナンスのためにシステムをオフラインにしたときに要求をキューに登録する場合や、クライアントとサーバの処理速度が異なる場合に通信をバッファに格納する場合に使用します。
/Q 機能の詳細については、『Tuxedo /Q コンポーネント』を参照してください。
イベント ベースの通信では、特別な状況 (イベント) が発生した場合に、クライアントやサーバがそれをクライアントに通知します。
イベントの通知には、次の 2 つの方法があります。
  • 非請求イベント。クライアントやサーバからクライアントに直接通知される予測不能な状況です。
  • ブローカ イベント。予測不能な状況、または発生は予測できても発生時間を予測できない状況です。イベントは、メッセージの受信と転送を行う「無名ブローカ」プログラムによって、サーバからクライアントに間接的に通知されます。
イベント ベースの通信は、Oracle Tuxedo のイベント ブローカ機能に基づいています。
このパラダイムの詳細については、「イベント ベースのクライアントおよびサーバのコーディング」を参照してください。

 


Oracle Tuxedo クライアント

Oracle Tuxedo クライアントとは、ユーザの要求を収集し、その要求に対するサービスを提供するサーバにその要求を転送するソフトウェア モジュールです。ほとんどのソフトウェア モジュールは、Oracle Tuxedo クライアントとして動作できます。その場合、ATMI クライアント初期化ルーチンを呼び出して、Oracle Tuxedo アプリケーションに「参加」します。クライアントになると、メッセージ バッファを割り当てて、サーバと情報を交換できるようになります。

クライアントは、ATMI 終了ルーチンを呼び出してアプリケーションから「分離」し、Oracle Tuxedo システムにクライアントを追跡する必要がなくなったことを通知します。これにより、ほかの操作で Oracle Tuxedo アプリケーションのリソースを使用できるようになります。

次は、基本的なクライアント プロセスの処理を示す擬似コードです。

コード リスト 1-1 要求/応答型クライアントの擬似コード
main()
{
TPINIT バッファを割り当て
バッファに初期クライアント ID を配置
BEA Tuxedo アプリケーションのクライアントとして登録
バッファを割り当て
do while true {
ユーザ入力データをバッファに格納
サービス要求を送信
応答を受信
ユーザに応答を返信 }
アプリケーションを終了
}

この擬似コードに示したほとんどの処理は、ATMI 関数で実装されます。ただし、ユーザ入力をバッファに格納する処理と、ユーザに応答を返す処理には、C 言語の関数を使用します。

バッファの割り当てでは、クライアント プログラムによって型付きバッファと呼ばれるメモリ領域が Oracle Tuxedo ランタイム システムから割り当てられます。型付きバッファとは、C 構造体などの形式が指定されたメモリ バッファです。

クライアントは、アプリケーションから分離する前に、サービス要求をいくつでも送受信できます。クライアントは、これらの要求を一連の要求/応答型呼び出しとして送信することができます。また、ある呼び出しから別の呼び出しに状態の情報を渡す必要がある場合は、会話型サーバに接続して要求を送ることもできます。どちらの方法でもクライアント プログラムのロジックは同じですが、使用する ATMI 関数は異なります。

クライアントを実行するには、buildclient コマンドを実行してクライアントをコンパイルし、Oracle Tuxedo ATMI および必要なライブラリとリンクします。buildclient コマンドの詳細については、「クライアントのコーディング」を参照してください。

 


Oracle Tuxedo サーバ

Oracle Tuxedo サーバとは、クライアントに対して 1 つ以上のサービスを提供するプロセスです。サービスとは、クライアントが処理を要求する特定のビジネス タスクです。サーバは、クライアントから要求を受け取り、それらを適切なサービス サブルーチンにディスパッチします。

サーバの基本的な動作

サーバのビルドでは、サービス サブルーチンと、Oracle Tuxedo システムで提供される main() プロセスとがアプリケーションによって組み合わされます。この main() 関数はシステムによって提供され、定義済みの関数から構成されています。この関数は、サーバの初期化と終了を行ったり、バッファを割り当てて、要求を受信してサービス ルーチンへのディスパッチを行ったりします。このすべての処理は、アプリケーションに透過的です。

次の図は、サーバとサービス ルーチン間の相互作用を示す疑似コードです。

図 1-2 要求/応答型サーバとサービス サブルーチンの擬似コード

要求/応答型サーバとサービス サブルーチンの擬似コード

初期化後、サーバはバッファの割り当てを行い、要求メッセージがメッセージ キューに登録されるまで待機し、その要求をキューから取り出してサービス サブルーチンに送り、要求を処理します。応答が必要な場合は、その応答は要求処理の一部と見なされます。

会話型パラダイムは、次の図の疑似コードで示すように、要求/応答型パラダイムとは多少異なります。

図 1-3 会話型サービス サブルーチンの擬似コード

会話型サービス サブルーチンの擬似コード

Oracle Tuxedo システム提供の main() プロセスには、プロセスをサーバとして登録し、サービスを宣言し、バッファを割り当て、キューから要求メッセージを取り出すために必要なコードが記述されています。ATMI 関数は、要求を処理するサービス サブルーチンで使用されます。サービス サブルーチンのコンパイルとテストを行う準備ができたら、これらをサーバの main() とリンクして、実行可能サーバを生成します。その場合、buildserver コマンドを実行します。

要求元としてのサーバ

クライアントが複数のサービスや同じサービスを複数回要求する場合、サービスのサブセットを別のサーバに転送して実行することができます。その場合、サーバはクライアント、つまりサービスの要求元として動作します。つまり、クライアントとサーバの両方が要求元になることができます。ただし、クライアントは要求元にしかなれません。このようなモデルは、Oracle Tuxedo の ATMI 関数を使用すると簡単にコーディングできます。

注意: 要求/応答型サーバも、要求を別のサーバに転送できます。その場合、サーバはクライアント (要求元) としては動作しません。応答を必要としているのは、要求を転送したサーバではなく、元のクライアントだからです。

 


Oracle Tuxedo API: ATMI

アプリケーションのロジックを記述する C 言語のほかに、アプリケーション トランザクション モニタ インタフェース (ATMI) を使用する必要があります。この ATMI は、アプリケーションと Oracle Tuxedo システム間のインタフェースになります。ATMI 関数は、オペレーティング システム コールに類似した C 言語の関数です。これらの関数により、必要なすべてのリソースも含め、Oracle Tuxedo システムのトランザクション モニタの下で動作するアプリケーション モジュール間の通信が実装されます。

ATMI は、リソースのオープンとクローズ、トランザクションの開始と終了、バッファの割り当てと解放、およびクライアントとサーバ間の通信のサポートなどの処理に使用されるコンパクトな関数セットです。次の表は、ATMI 関数をまとめたものです。各関数については、『Oracle Tuxedo C リファレンス』を参照してください。

表 1-2 ATMI 関数の使用
タスク
C 関数
目的
参照先
バッファ管理
メッセージ バッファを作成します。
メッセージ バッファのサイズを変更します。
メッセージのタイプとサブタイプを取得します。
メッセージ バッファを解放します。
クライアントのメンバーシップ
認証が必要かどうかを確認します。
アプリケーションに参加します。
アプリケーションから分離します。
複数のアプリケーション コンテキストの管理
現在のスレッドのコンテキストの識別子を取得します。
マルチコンテキスト プロセスに現在のスレッドのコンテキストを設定します。
サービスの登録と応答
サーバの初期化
サーバの終了
個々のサーバ スレッドを初期化します。
個々のサーバ スレッドの終了コードです。
サービス関数を終了します。
要求を転送します。
動的な宣言
サービス名を宣言します。
サービス名の宣言を取り消します。
メッセージの優先順位
最後の要求の優先順位を取得します。
次の要求の優先順位を設定します。
要求/応答型通信
サービスへの同期要求/応答を開始します。
非同期要求を開始します。
非同期応答を受け取ります。
非同期要求を取り消します。
会話型通信
サービスとの会話を開始します。
会話を異常終了します。
会話中にメッセージを送信します。
会話中にメッセージを受信します。
高信頼性キュー
メッセージをメッセージ キューに登録します。
『Tuxedo /Q コンポーネント』
メッセージをメッセージ キューから取り出します。
イベント ベースの通信
クライアントに非請求メッセージを送信します。
複数のクライアントにメッセージを送信します。
非請求メッセージのコールバックを設定します。
非請求メッセージの到着を確認します。
イベント メッセージをポストします。
イベント メッセージをサブスクライブします。
イベント メッセージのサブスクリプションを削除します。
トランザクション管理
トランザクションを開始します。
現在のトランザクションをコミットします。
現在のトランザクションをロールバックします。
トランザクション モードであるかどうかを確認します。
現在のトランザクションを一時停止します。
トランザクションを再開します。
リソース管理
リソース マネージャをオープンします。
『Oracle Tuxedo アプリケーションの設定』
リソース マネージャをクローズします。
ブロックタイム管理
ブロックタイム値を取得します。
『Oracle Tuxedo C リファレンス』
ブロックタイム値を秒単位で設定します。
セキュリティ
デジタル署名の生成、メッセージの暗号化/暗号解読のためのキー ハンドルをオープンします。
『Tuxedo CORBA アプリケーションのセキュリティ機能』
キー ハンドルに対応付けられた情報を取得します。
キー ハンドルに対応付けられた属性 (省略可能) を設定します。
既にオープンされているハンドルをクローズします。
デジタル署名を生成するための型付きメッセージ バッファをマークします。
暗号化エンベロープを生成するための型付きメッセージ バッファをマークします。
型付きメッセージ バッファに対応付けられたデジタル署名と受信側の情報にアクセスします。
型付きメッセージ バッファをエクスポート可能でマシンに依存しない (外部化された) 文字列表現に変換します。
外部化された文字列表現を型付きメッセージ バッファに変換します。


  ページの先頭       前  次