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

サンプルを使用した Tuxedo アプリケーションの開発方法

 Previous Next Contents View as PDF  

BEA Tuxedo アプリケーションの開発

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

 


BEA Tuxedo アプリケーションを開発する前に

BEA Tuxedo のアプリケーション・トランザクション・モニタ・インターフェイス (ATMI) を開発する場合、まず設計に関連する各種の概念や利用できるツールを確認しておきます。たとえば、クライアント (外部からの入力データが収集されて処理される方法)、およびサーバ (入力データを処理するビジネス・ロジックが定義されたプログラム) について理解しておきます。 また、型付きバッファ (クライアント・プログラムがメモリ領域を割り当て、別のプログラムにデータを送る方法) についても理解しておきます。BEA Tuxedo のメッセージング・パラダイムも重要な概念です。ATMI クライアント・プログラムは、ATMI ライブラリを呼び出すことによって、BEA Tuxedo システムにアクセスします。ATMI ライブラリのほとんどの呼び出しでは、要求/応答型や会話型などの通信方法がサポートされています。これらの通信は、BEA Tuxedo アプリケーションの基本部分です。

アプリケーション・キュー、イベント・ベースの通信、ATMI の使用方法の概念、および利用できるツールの詳細については、『BEA Tuxedo システム入門』の2-2 ページの「BEA Tuxedo ATMI 環境の基本アーキテクチャ」を参照してください。アプリケーションのプログラミングの詳細については、『C 言語を使用した BEA Tuxedo アプリケーションのプログラミング』、およびCOBOL を使用した BEA Tuxedo アプリケーションのプログラミングを参照してください。

 


BEA Tuxedo ATMI クライアントの作成

BEA Tuxedo のクライアントは、C または C++ などのプログラミング言語でプログラムを作成するのと同じように作成できます。BEA Tuxedo システムには、BEA Tuxedo ATMI と呼ばれる C 言語に基づいたプログラミング・インターフェイスが用意されています。ATMI は、BEA Tuxedo のクライアントとサーバの開発をサポートする使いやすいインターフェイスです。

注記 BEA Tuxedo ATMI では、COBOL インターフェイスもサポートされています。図 1-1 は、C/C++ API の例です。

クライアントのタスク

クライアントでは、次のような基本タスクが行われます。

関連項目

 


BEA Tuxedo ATMI サーバの作成

BEA Tuxedo のクライアントとサーバは、ATMI プログラミング・インターフェイスを使用して作成できます。ただし、BEA Tuxedo サーバは完全なプログラム、つまり標準的な main 関数を使ったプログラムとして開発されたものではありません。代わりに、アプリケーション開発者は、サービスと呼ばれる特定のビジネス関数を使用します。この関数は、BEA Tuxedo のバイナリ形式でコンパイルされて、実行可能サーバが生成されます。

BEA Tuxedo サーバが起動すると、シャットダウン・メッセージを受信するまで稼動し続けます。通常、BEA Tuxedo サーバはシャットダウンして再起動するまでに、何千ものサービス呼び出しを行います。

サーバのタスク

関連項目

 


アプリケーションの型付きバッファ

BEA Tuxedo システムでは、すべての通信が型付きバッファを使用して行われます。BEA Tuxedo システムには通信を行うための各種のバッファ型があり、アプリケーション開発者がその型を選択することができます。BEA Tuxedo システムで渡されるすべてのバッファには特殊なヘッダがあり、BEA Tuxedo ATMI (tpalloc()tprealloc()、およびtpfree()) を介してバッファの割り当てや解放が行われます。

図 1-3 各種のバッファ型


 

型付きバッファ機能によって同じバッファ型を共有できるようになり、どの種類のネットワークやプロトコルでも、BEA Tuxedo システムでサポートされるどの種類の CPU アーキテクチャやオペレーティング・システムにも、データを送ることができるようになります。分散型の環境で型付きバッファを使用すると、各種の通信ネットワークを介してリンクされた異種コンピュータ間でデータを転送する場合に、クライアントおよびサーバでデータを準備するための処理が簡略化されます。そのため、プログラマはこのような機能をプログラムに組み込む必要がなくなり、本来のビジネス・ロジックの開発に集中することができます。

関連項目

 


アプリケーションでの BEA Tuxedo メッセージング・パラダイム

BEA Tuxedo ATMI には、アプリケーションで使用できる次のような通信モデルがあります。

 


要求/応答型モデル (同期呼び出し)

同期呼び出しを行う場合、BEA Tuxedo ATMI クライアントは ATMI 関数 tpcall() を使用して、BEA Tuxedo ATMI サーバに要求を送ります。この関数は、BEA Tuxedo サーバを名前で呼び出すのではなく、指定されたサービスを呼び出します。指定されたサービスは、そのサービスを提供できる任意のサーバによって提供されます。クライアントは、送信したサービス要求が処理されるまで待機します。この要求に対する応答を受け取るまで、クライアントはほかの操作を行うことができません。つまり、クライアントでは、応答を受信するまで操作が「ブロック」されます。

図 1-4 同期要求/応答型モデル


 


 

関連項目

 


要求/応答型モデル (非同期呼び出し)

非同期呼び出しを行う場合、クライアントは 2 つの ATMI 関数を呼び出します。つまり、tpacall(3c) 関数を使ってサービスを要求し、tpgetrply(3c) 関数を使って応答を取得します。この方法は、クライアントが要求を送り、その応答を受け取るまでに別の操作を行う場合に使用します。

図 1-5 非同期呼び出し


 

関連項目

 


入れ子になった呼び出し

サービスは、BEA Tuxedo ATMI クライアントとして動作して、別の BEA Tuxedo サービスを呼び出すことができます。つまり、サービスを要求して、そのサービスが別のサービスを要求することができます。たとえば、BEA Tuxedo クライアントがサービス X を呼び出し、その応答を待ちます。その後、サービス X はサービス Y を呼び出し、その応答を待ちます。サービス X が応答を受け取ると、サービス X は呼び出し元のクライアントにその応答を返します。この方法では、サービス X がサービス Y からの応答を取得し、その応答になんらかの処理を行い、返されたバッファを変更してから最終的な応答をクライアントに返すことができます。

図 1-6 入れ子になった呼び出し


 

関連項目

 


転送された呼び出し

呼び出しを転送すると、入れ子になったサービスが、最初に呼び出されたサービスを経由せずに直接 ATMI クライアントに応答を返すことができます。このため、最初のサービスはほかの要求を処理できるようになります。この機能は、最初に呼び出されたサービスが配信エージェントとしてのみ機能し、入れ子になったサービスから返された応答にデータを追加しない場合に使用します。

呼び出しを転送する場合、クライアントによって呼び出されたサービスは tpforward(3c) 関数を使用して、別のサーバ Y に要求を渡します。このような処理でのみ、BEA Tuxedo サービスは tpreturn(3c) を呼び出さずに、サービス呼び出しを終了することができます。

呼び出しの転送は、クライアントに透過的に行われます。つまり、同じクライアント・コードを使用して、1 つのサービスによって処理されるサービス要求も、複数のサービスによって処理されるサービス要求も扱うことができます。

図 1-7 転送された呼び出し


 

関連項目

 


会話型通信

BEA Tuxedo ATMI クライアントとサービス間で、状態情報を保持して複数のバッファを送信する必要がある場合は、BEA Tuxedo の会話型通信を使用します。

サーバが一度会話に参加すると、会話が終了するまでそのサーバを利用できなくなるため、BEA Tuxedo 会話型通信は慎重に使用します。会話型通信をインプリメントするには、次の手順をコードに記述します。

  1. BEA Tuxedo クライアントは、tpconnect() 関数によって会話を開始します。

  2. BEA Tuxedo クライアントおよび会話型サーバは、 tpsend()tprecv() 関数を使用してバッファを交換します。サービス呼び出しには特定のフラグが設定され、クライアントとサーバのどちらが会話を制御しているのかが示されます。

  3. サーバが tpreturn() 関数または tpdiscon() 関数を呼び出すと、会話は正常に終了します。

    図 1-8 会話型通信


     

関連項目

 


任意通知型通知

任意通知型通知を有効にするには、BEA Tuxedo ATMI クライアントで tpsetunsol() 関数を使用して任意通知型メッセージ・ハンドルを作成します。任意通知型メッセージを送信する場合、BEA Tuxedo クライアントまたはサーバは、単一のクライアントにメッセージを送信するときは tpnotify() 関数、複数のクライアントに同時にメッセージを送信するときは tpbroadcast() 関数を使用します。クライアントがメッセージを受信すると、BEA Tuxedo システムはクライアントの任意通知型ハンドラ関数を呼び出します。

シグナル・ベースのシステムでは、クライアントは任意通知型メッセージをポーリングする必要はありません。ただし、非シグナル・ベースのシステムでは、クライアントは tpchkunsol() 関数を使用して、任意通知型メッセージを確認する必要があります。クライアントがサービス要求を作成すると、暗黙的に tpchkunsol() が呼び出されます。

図 1-9 任意通知型通知による処理


 

注記 tpack フラグ・ビットを設定して tpnotify() を呼び出すと、要求に対する肯定応答が送信されます。

関連項目

 


イベント・ベースの通信

イベント・ベースの通信では、イベントをアプリケーション・キュー、ログ・ファイル、およびシステム・コマンドにポストできます。BEA Tuxedo ATMI クライアントは、tpsubscribe() 関数を使用してユーザ定義のイベントをサブスクライブし、BEA Tuxedo サービスまたはクライアントが tppost() 関数を呼び出したときに任意通知型メッセージを受信することができます。また、ATMI クライアントは、BEA Tuxedo システムがイベントを検出したときに呼び出されるシステム定義のイベントをサブスクライブすることもできます。たとえば、サーバが異常終了すると、.SysServerDied イベントがポストされます。このイベントのポストは BEA Tuxedo システムによって行われるため、アプリケーション・サーバがポストする必要がありません。

図 1-10 イベント・ベースの通信


 

関連項目

 


キュー・ベースの通信

/Q システムとのインターフェイスとして、BEA Tuxedo クライアントは 2 つの ATMI 関数を使用します。つまり、キュー・スペースにメッセージを格納する tpenqueue() 関数と、キュー・スペースからメッセージを取得する tpdequeue() 関数を使用します。

次の図は、ピア・ツー・ピアの非同期メッセージングを表しています。この例では、クライアントは tpenqueue() を使用してサービスにメッセージを登録します。オプションで、tpenqueue() の呼び出しに、応答キューおよび異常終了キューの名前を指定できます。クライアントは、メッセージに付ける相関識別子の値を指定することもできます。この値は、キュー間で同じです。そのため、キューのメッセージに対応付けられたどの応答メッセージまたは異常終了メッセージも、応答キューまたは異常終了キューから読み取られるときに識別できます。

クライアントは、デフォルトのキューの順序付けを使用するか (たとえば、メッセージがキューから出されるまでの時間)、またはデフォルトのキューの順序付けの無効化を指定すること (たとえば、メッセージをキューの先頭に置くこと、またはキューの別のメッセージの前に置くこと) ができます。tpenqueue() は、TMQUEUE サーバにメッセージを送信し、そのメッセージは安定記憶領域のキューに登録され、肯定応答がクライアントに送信されます。肯定応答は、クライアントが直接確認することはできません。ただし、クライアントが正常な戻り値を取得すると、肯定応答が送られたと見なすことができます。異常終了の戻り値には、異常終了の内容についての情報が含まれています。キュー・マネージャによって割り当てられたメッセージ識別子は、アプリケーションに返されます。この識別子は、特定のメッセージをキューから取り出す場合に使用します。また、この識別子は、別の tpenqueue() 内で使用して、キューに次に登録されるメッセージの前にあるメッセージを識別することができます。

キューに登録されたメッセージをキューから取り出すには、そのメッセージをキューに登録しているトランザクションが正常にコミットされる必要があります。クライアントは tpdequeue() を使用して、キューからメッセージを取り出します。

図 1-11 ビア・ツー・ピアの非同期メッセージング・モデル


 

次の図は、別のサーバへのメッセージ転送を示しています。

クライアントはサーバ上のサービス X へのメッセージをキューに登録します。サービスは、メッセージがアクティブになった場合、およびメッセージの処理条件が満たされた場合に、メッセージを受信します。たとえば、メッセージが金曜日の午後 6 時にアクティブになるように符号化されている場合などに、メッセージを受け取ります。サービスが完了すると、キュー・スペースに応答が返されます。クライアントは、そこから応答を取得します。

この方法は、サービスに透過的です。つまり、同じアプリケーション・コードを使用して、キューを経由してサービスを呼び出すことも、tp(a)call 関数を使って直接サービスを呼び出すこともできます。

図 1-12 キュー転送を使用したキュー・ベースのサービス呼び出し


 

関連項目

 


トランザクション

トランザクションをインプリメントする場合、アプリケーション・プログラマは次の 3 つの ATMI 関数を使用します。

トランザクションに含まれるコードは、開始、コミット、およびアボートのみです。

次の例では、クライアントがトランザクションを開始し、2 つのサービスを要求し、トランザクションをコミットしています。サービス要求はトランザクションが開始されてからコミットされるまでの間に作成されるため、どちらのサービスも同じトランザクションに参加します。

図 1-13 トランザクション


 

関連項目

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy