|
分散アプリケーションは、複数のハードウェア システム上にあるソフトウェア モジュールから構成され、これらのモジュールが互いに通信してアプリケーションのタスクが実行されます。たとえば、次の図に示すリモート オンライン銀行業務システムの分散アプリケーションは、顧客のホーム コンピュータで実行されるソフトウェア モジュールと、すべての口座レコードを管理する銀行のコンピュータ システムから構成されています。
たとえば、ログオンしてメニューからオプションを選択するだけで、残高を照会できます。この処理では、ローカル ソフトウェア モジュールが特別なアプリケーション プログラミング インタフェース (API) 関数を使用して、リモート ソフトウェア モジュールと通信しています。
Oracle Tuxedo 分散アプリケーション プログラミング環境では、分散ソフトウェア モジュール間で安全かつ信頼性の高い通信を行うために必要な API 関数が提供されています。Oracle Tuxedo API は、アプリケーション トランザクション モニタ インタフェース (ATMI) と呼ばれます。
次の表は、アプリケーション開発者が利用できる Oracle Tuxedo のコミュニケーション パラダイムを示しています。
|
Oracle Tuxedo クライアントとは、ユーザの要求を収集し、その要求に対するサービスを提供するサーバにその要求を転送するソフトウェア モジュールです。ほとんどのソフトウェア モジュールは、Oracle Tuxedo クライアントとして動作できます。その場合、ATMI クライアント初期化ルーチンを呼び出して、Oracle Tuxedo アプリケーションに「参加」します。クライアントになると、メッセージ バッファを割り当てて、サーバと情報を交換できるようになります。
クライアントは、ATMI 終了ルーチンを呼び出してアプリケーションから「分離」し、Oracle Tuxedo システムにクライアントを追跡する必要がなくなったことを通知します。これにより、ほかの操作で Oracle Tuxedo アプリケーションのリソースを使用できるようになります。
次は、基本的なクライアント プロセスの処理を示す擬似コードです。
main()
{
TPINIT バッファを割り当て
バッファに初期クライアント ID を配置
BEA Tuxedo アプリケーションのクライアントとして登録
バッファを割り当て
do while true {
ユーザ入力データをバッファに格納
サービス要求を送信
応答を受信
ユーザに応答を返信 }
アプリケーションを終了
}
この擬似コードに示したほとんどの処理は、ATMI 関数で実装されます。ただし、ユーザ入力をバッファに格納する処理と、ユーザに応答を返す処理には、C 言語の関数を使用します。
バッファの割り当てでは、クライアント プログラムによって型付きバッファと呼ばれるメモリ領域が Oracle Tuxedo ランタイム システムから割り当てられます。型付きバッファとは、C 構造体などの形式が指定されたメモリ バッファです。
クライアントは、アプリケーションから分離する前に、サービス要求をいくつでも送受信できます。クライアントは、これらの要求を一連の要求/応答型呼び出しとして送信することができます。また、ある呼び出しから別の呼び出しに状態の情報を渡す必要がある場合は、会話型サーバに接続して要求を送ることもできます。どちらの方法でもクライアント プログラムのロジックは同じですが、使用する ATMI 関数は異なります。
クライアントを実行するには、buildclient コマンドを実行してクライアントをコンパイルし、Oracle Tuxedo ATMI および必要なライブラリとリンクします。buildclient
コマンドの詳細については、「クライアントのコーディング」を参照してください。
Oracle Tuxedo サーバとは、クライアントに対して 1 つ以上のサービスを提供するプロセスです。サービスとは、クライアントが処理を要求する特定のビジネス タスクです。サーバは、クライアントから要求を受け取り、それらを適切なサービス サブルーチンにディスパッチします。
サーバのビルドでは、サービス サブルーチンと、Oracle Tuxedo システムで提供される main()
プロセスとがアプリケーションによって組み合わされます。この main()
関数はシステムによって提供され、定義済みの関数から構成されています。この関数は、サーバの初期化と終了を行ったり、バッファを割り当てて、要求を受信してサービス ルーチンへのディスパッチを行ったりします。このすべての処理は、アプリケーションに透過的です。
次の図は、サーバとサービス ルーチン間の相互作用を示す疑似コードです。
初期化後、サーバはバッファの割り当てを行い、要求メッセージがメッセージ キューに登録されるまで待機し、その要求をキューから取り出してサービス サブルーチンに送り、要求を処理します。応答が必要な場合は、その応答は要求処理の一部と見なされます。
会話型パラダイムは、次の図の疑似コードで示すように、要求/応答型パラダイムとは多少異なります。
Oracle Tuxedo システム提供の main()
プロセスには、プロセスをサーバとして登録し、サービスを宣言し、バッファを割り当て、キューから要求メッセージを取り出すために必要なコードが記述されています。ATMI 関数は、要求を処理するサービス サブルーチンで使用されます。サービス サブルーチンのコンパイルとテストを行う準備ができたら、これらをサーバの main()
とリンクして、実行可能サーバを生成します。その場合、buildserver コマンドを実行します。
クライアントが複数のサービスや同じサービスを複数回要求する場合、サービスのサブセットを別のサーバに転送して実行することができます。その場合、サーバはクライアント、つまりサービスの要求元として動作します。つまり、クライアントとサーバの両方が要求元になることができます。ただし、クライアントは要求元にしかなれません。このようなモデルは、Oracle Tuxedo の ATMI 関数を使用すると簡単にコーディングできます。
注意: | 要求/応答型サーバも、要求を別のサーバに転送できます。その場合、サーバはクライアント (要求元) としては動作しません。応答を必要としているのは、要求を転送したサーバではなく、元のクライアントだからです。 |
アプリケーションのロジックを記述する C 言語のほかに、アプリケーション トランザクション モニタ インタフェース (ATMI) を使用する必要があります。この ATMI は、アプリケーションと Oracle Tuxedo システム間のインタフェースになります。ATMI 関数は、オペレーティング システム コールに類似した C 言語の関数です。これらの関数により、必要なすべてのリソースも含め、Oracle Tuxedo システムのトランザクション モニタの下で動作するアプリケーション モジュール間の通信が実装されます。
ATMI は、リソースのオープンとクローズ、トランザクションの開始と終了、バッファの割り当てと解放、およびクライアントとサーバ間の通信のサポートなどの処理に使用されるコンパクトな関数セットです。次の表は、ATMI 関数をまとめたものです。各関数については、『Oracle Tuxedo C リファレンス』を参照してください。