bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

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

 Previous Next Contents View as PDF  

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

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

 


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

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

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


 

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

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

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

 


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

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

表 1-1 コミュニケーション・パラダイム

パラダイム

説明

要求/応答型通信

要求/応答型通信では、あるソフトウェア・モジュールが 2 番目のソフトウェア・モジュールに要求を送り、その応答を受け取ります。要求元が応答を受け取るまで処理が行われずに待機する同期通信、または要求元が応答を待機する間も処理が継続される非同期通信の 2 種類があります。

このモードは、クライアント/サーバ相互作用とも呼ばれます。最初のソフトウェア・モジュールがクライアント、2 番目のソフトウェア・モジュールがサーバになります。

このパラダイムの詳細については、クライアントおよびサーバへの要求/応答のコーディングを参照してください。

会話型通信

会話型通信は要求/応答型通信に似ていますが、「会話」が終了する前に複数の要求や応答が発生します。会話型通信では、会話が切断されるまでクライアントとサーバで状態の情報が保持されます。クライアントとサーバ間でメッセージをやり取りする方法は、使用するアプリケーション・プロトコルによって決定されます。

通常、会話型通信はサーバからクライアントへの長い応答のバッファとして使用されます。

このパラダイムの詳細については、会話型クライアントおよびサーバのコーディングを参照してください。

アプリケーション・キュー・ベースの通信

アプリケーション・キュー・ベースの通信では、遅延通信、つまり時間に依存しない通信が行われます。この通信では、クライアントとサーバがアプリケーション・キューを使用して通信します。BEA Tuxedo/Q 機能を使用すると、メッセージを永続的な記憶装置 (ディスク) や一時的な記憶装置 (メモリ) のキューに入れることができ、後で処理したり取り出すことができます。

アプリケーション・キュー・ベースの通信は、たとえば、メンテナンスのためにシステムをオフラインにしたときに要求をキューに登録する場合や、クライアントとサーバの処理速度が異なる場合に通信をバッファに格納する場合に使用します。

/Q 機能の詳細については、『BEA Tuxedo /Q コンポーネント』を参照してください。

イベント・ベースの通信

イベント・ベースの通信では、特別な状況 (イベント) が発生した場合に、クライアントやサーバがそれをクライアントに通知します。

イベントの通知には、次の 2 つの方法があります。

イベント・ベースの通信は、BEA Tuxedo のイベント・ブローカ機能に基づいています。

このパラダイムの詳細については、イベント・ベースのクライアントおよびサーバのコーディングを参照してください。

 


BEA Tuxedo クライアント

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

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

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

コード リスト 1-1 要求/応答型クライアントの擬似コード

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

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

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

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

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

 


BEA Tuxedo サーバ

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

サーバの基本的な動作

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

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

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


 

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

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

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


 

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

要求元としてのサーバ

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

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

 


BEA Tuxedo API:ATMI

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

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

表 1-2 ATMI 関数

タスク
. .

C 関数 . .

処理内容 . .

参照先
. .

バッファ管理

tpalloc()

メッセージ・バッファを作成します。

型付きバッファの管理

tprealloc()

メッセージ・バッファのサイズを変更します。

tptypes()

メッセージのタイプとサブタイプを取得します。

tpfree()

メッセージ・バッファを解放します。

クライアントのメンバーシップ

tpchkauth()

認証が必要かどうかを確認します。

クライアントのコーディング

tpinit()

アプリケーションに参加します。

tpterm()

アプリケーションから分離します。

複数のアプリケーション・コンテキストの管理

tpgetctxt(3c)

現在のスレッドのコンテキストの識別子を取得します。

マルチスレッドおよびマルチコンテキスト・アプリケーションのプログラミング

tpsetctxt(3c)

マルチコンテキスト・プロセスに現在のスレッドのコンテキストを設定します。

サービスの登録と応答

tpsvrinit()

サーバを初期化します。

tpsvrdone()

サーバを終了します。

tpsvrthrinit()

個々のサーバ・スレッドを初期化します。

tpsvrthrdone()

個々のサーバ・スレッドの終了コードです。

tpreturn()

サービス関数を終了します。

tpforward()

要求を転送します。

動的な宣言

tpadvertise()

サービス名を宣言します。

サーバのコーディング

tpunadvertise()

サービス名の宣言を取り消します。

メッセージの優先順位

tpgprio()

最後の要求の優先順位を取得します。

サーバのコーディング

tpsprio()

次の要求の優先順位を設定します。

要求/応答型通信

tpcall()

サービスへの同期要求/応答を開始します。

tpacall()

非同期要求を開始します。

tpgetrply()

非同期応答を受け取ります。

tpcancel()

非同期要求を取り消します。

会話型通信

tpconnect()

サービスとの会話を開始します。

会話型クライアントおよびサーバのコーディング

tpdiscon()

会話を異常終了します。

tpsend()

会話中にメッセージを送信します。

tprecv()

会話中にメッセージを受信します。

高信頼性キュー

tpenqueue(3c)

メッセージをメッセージ・キューに登録します。

『BEA Tuxedo /Q コンポーネント』

tpdequeue(3c)

メッセージをメッセージ・キューから取り出します。

イベント・ベースの通信

tpnotify()

クライアントに任意通知型メッセージを送信します。

イベント・ベースのクライアントおよびサーバのコーディング

tpbroadcast()

複数のクライアントにメッセージを送信します。

tpsetunsol()

任意通知型メッセージのコールバックを設定します。

tpchkunsol()

任意通知型メッセージの到着を確認します。

tppost()

イベント・メッセージをポストします。

tpsubscribe()

イベント・メッセージをサブスクライブします。

tpunsubscribe()

イベント・メッセージのサブスクリプションを削除します。

トランザクション管理

tpbegin()

トランザクションを開始します。

グローバル・トランザクションのコーディング

tpcommit()

現在のトランザクションをコミットします。

tpabort()

現在のトランザクションをロールバックします。

tpgetlev()

トランザクション・モードであるかどうかを確認します。

tpsuspend()

現在のトランザクションを一時停止します。

tpresume()

トランザクションを再開します。

リソース管理

tpopen(3c)

リソース・マネージャをオープンします。

『BEA Tuxedo アプリケーションの設定』

tpclose(3c)

リソース・マネージャをクローズします。

セキュリティ

tpkey_open(3c)

デジタル署名の生成、メッセージの暗号化/暗号解読のためのキー・ハンドルをオープンします。

『BEA Tuxedo CORBA アプリケーションのセキュリティ機能』

tpkey_getinfo(3c)

キー・ハンドルに対応付けられた情報を取得します。

tpkey_setinfo(3c)

キー・ハンドルに対応付けられた属性 (省略可能) を設定します。

tpkey_close(3c)

既にオープンされているハンドルをクローズします。

tpsign(3c)

デジタル署名を生成するための型付きメッセージ・バッファをマークします。

tpseal(3c)

暗号化エンベロープを生成するための型付きメッセージ・バッファをマークします。

tpenvelope(3c)

型付きメッセージ・バッファに対応付けられたデジタル署名と受信側の情報にアクセスします。

tpexport(3c)

型付きメッセージ・バッファをエクスポート可能でマシンに依存しない (外部化された) 文字列表現に変換します。

tpimport(3c)

外部化された文字列表現を型付きメッセージ・バッファに変換します。

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy