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

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

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

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

 


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

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

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

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

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

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

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

 


通信パラダイム

表1-1は、アプリケーション開発者が利用できるOracle Tuxedo ATMIの通信パラダイムを示しています。

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

 


Oracle Tuxedoクライアント

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

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

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

リスト1-1 リクエスト/レスポンス型クライアントの擬似コード
main()
 {
       allocate a TPINIT buffer
       place initial client identification in buffer
       enroll as a client of the BEA Tuxedo application
       allocate buffer
       do while true {
             place user input in buffer
             send service request
             receive reply
             pass reply to the user }
       leave application
 }

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

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

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

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

 


Oracle Tuxedoサーバー

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

サーバーの基本的な動作

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

図1-2は、サーバーとサービス・サブルーチン間の相互作用を示す疑似コードを示しています。

図1-2リクエスト/レスポンス型サーバーとサービス・サブルーチンの擬似コード

リクエスト/レスポンス型サーバーとサービス・サブルーチンの擬似コード

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

会話型パラダイムは、図1-3の疑似コードで示すように、リクエスト/レスポンス型パラダイムとは多少異なります。

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

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


  先頭に戻る       前  次