WebLogic Tuxedo Connector プログラマーズ ガイド

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

WebLogic Tuxedo Connector JATMI 会話

注意 : BEA Tuxedo の会話型通信の詳細については、「会話型クライアントおよびサーバのコーディング」を参照してください。

以下の節では、会話の概要とそれらをアプリケーションで定義および管理する方法について説明します。

 


WebLogic Tuxedo Connector の会話型通信の概要

WebLogic Tuxedo Connector は、BEA Tuxedo の会話を WebLogic Server アプリケーションと Tuxedo アプリケーションの間でメッセージを交換する手段としてサポートしています。この形態の通信では、仮想接続がクライアントとサーバの間で維持され、各サイドで会話の状態に関する情報が維持されます。接続を開き、会話を開始するプロセスが、会話の開始側です。接続の制御権を持つプロセスが開始プロセスで、制御権のないプロセスが従属プロセスです。接続は、それを終了するイベントが発生するまでアクティブなままです。

会話型通信では、開始プロセスと従属プロセスの間で Half-Duplex 接続が確立されます。接続の制御権は、開始プロセスと従属プロセスの間で渡されます。制御権を持つプロセスがメッセージを送信でき (開始プロセス)、制御権のないプロセスはメッセージの受信のみを行えます (従属プロセス)。

 


WebLogic Tuxedo Connector の会話の特性

WebLogic Tuxedo Connector JATMI 会話には以下の特性があります。

 


WebLogic Tuxedo Connector JATMI 会話プリミティブ

以下の WebLogic Tuxedo Connector プリミティブは、WebLogic Server と Tuxedo の間で通信する会話型クライアントおよび会話型サーバを作成する際に使用します。

表 6-1 WebLogic Tuxedo Connector の会話型クライアントのプリミティブ
名前
操作
Tuxedo 会話型サービスとの接続を確立するために使用する。
接続を中止し、TPEV_DISCONIMM イベントを生成するために使用する。
Tuxedo アプリケーションからオープンな接続を介してデータを受信するために使用する。
Tuxedo アプリケーションにオープンな接続を介してデータを送信するために使用する。

 


WebLogic Tuxedo Connector の会話型クライアントおよび会話型サーバの作成

以下の節では、会話型クライアントおよび会話型サーバの作成方法を説明します。

会話型クライアントの作成

WebLogic Tuxedo Connector の会話型クライアントを作成するには、「WebLogic Tuxedo Connector クライアント EJB の開発」で説明されている手順を実行します。次の節では、tpconnect を使用して接続を開き、会話を開始する方法を説明します。

Tuxedo 会話型サービスとの接続の確立

WebLogic Tuxedo Connector の会話型クライアントは、Tuxedo 会話型サービスとの接続を確立する必要があります。JATMI プリミティブ tpconnect を使用すると、接続を開いて会話を開始できます。呼び出しが成功すると、会話でデータを送受信するために使用できるオブジェクトが返されます。

次の表は、tpconnect のパラメータを示しています。

表 6-2 WebLogic Tuxedo Connector JATMI tpconnect のパラメータ
パラメータ
説明
svc
会話型サービス名の文字ポインタ。svc を指定しないと、呼び出しは失敗し、TPExceptionTPEV_DISCONIMM に設定される。
data
データ バッファのポインタ。接続を確立するときに、バッファを指すように data パラメータを設定することでデータを同時に送信できる。バッファの type および subtype は、呼び出されるサービスによって認識されなければならない。data の値を NULL に設定すると、データが送信されないように指定できる。
flags
アプリケーションの必要に応じて、フラグを単独で、または組み合わせて使用する。有効なフラグは、以下のとおりである。
TPSENDONLY: 開始側が制御権を保持することを指定する。呼び出されるサービスは従属プロセスになり、データの受信だけが可能である。TPRECVONLY と併用することはできない。
TPRECVONLY: 呼び出されたサービスに制御権を渡すことを指定する。開始側は従属プロセスになり、データの受信だけが可能である。TPSENDONLY と併用することはできない。
TPNOTRAN: svc が呼び出されて開始側がトランザクション モードのときは、svc は開始側のトランザクションの一部ではないものとすることを指定する。呼び出しは、トランザクション タイムアウトの影響を受け続ける。svc が失敗しても、開始側のトランザクションは影響を受けない。
TPNOBLOCK: ブロッキング条件が存在する場合はリクエストを送信しないことを指定する。TPNOBLOCK を指定しないと、条件が解消されるか、トランザクション タイムアウトが発生するまで、またはブロッキング タイムアウトが発生するまで、開始側はブロックされる。
TPNOTIME: 開始側は無期限にブロックされ、ブロッキング タイムアウトの影響を受けないことを指定する。開始側がトランザクション モードの場合、呼び出しはトランザクション タイムアウトの影響を受ける。

サンプル TuxedoConversationBean.java コード

次に、tpconnect を使用して会話を開始するサンプル コードを示します。

コード リスト 6-1 サンプル会話コード
.
.
.
Context ctx;
Conversation myConv;
TuxedoConnection myTux;
TuxedoConnectionFactory tcf;
.
.
.
ctx = new InitialContext();
tcf = (TuxedoConnectionFactory) ctx.lookup ("tuxedo.services.TuxedoConnection");
myTux = tcf.getTuxedoConnection();
flags =ApplicationToMonitorInterface.TPSENDONLY;
myConv = myTux.tpconnect("CONNECT_SVC",null,flags);
.
.
.

WebLogic Tuxedo Connector の会話型サーバの作成

WebLogic Tuxedo Connector の会話型サーバを作成するには、「WebLogic Tuxedo Connector サービス EJB の開発」で説明されている手順を実行します。

 


メッセージの送受信

会話型接続が WebLogic Server アプリケーションと Tuxedo アプリケーションの間で確立されたら、開始プロセス (メッセージを送信) と従属プロセス (メッセージを受信) の間の通信が送信および受信の呼び出しを使用して遂行されます。以下の節では、WebLogic Tuxedo Connector アプリケーションが JATMI プリミティブ tpsend および tprecv をどのように使用するのかを説明します。

メッセージの送信

JATMI プリミティブ tpsend を使用すると、Tuxedo アプリケーションにメッセージを送信できます。

次の表は、tpsend のパラメータを示しています。

表 6-3 WebLogic Tuxedo Connector JATMI tpsend のパラメータ
パラメータ
説明
data
この会話で送信されるデータが格納されているバッファへのポインタ。
flags
フラグは以下のいずれかを指定できる。
TPRECVONLY: 開始プロセスのデータが送信された後に開始プロセスが接続の制御権を放棄することを指定する。開始プロセスは従属プロセスになり、データを受信することだけが可能となる。
TPNOBLOCK: ブロッキング条件が存在する場合はリクエストを送信しないことを指定する。TPNOBLOCK を指定しないと、条件が解消されるか、トランザクション タイムアウトが発生するまで、またはブロッキング タイムアウトが発生するまで、開始側はブロックされる。
TPNOTIME: 開始プロセスが無限にブロックされることを拒否せず、ブロッキング タイムアウトの影響を受けないことを指定する。呼び出しは、トランザクション タイムアウトの影響を受ける。

メッセージの受信

JATMI プリミティブ tprecv を使用すると、Tuxedo アプリケーションからメッセージを受信できます。

次の表は、tprecv のパラメータを示しています。

表 6-4 WebLogic Tuxedo Connector JATMI tprecv のパラメータ
パラメータ
説明
flags
フラグは以下のいずれかを指定できる。
TPNOBLOCK: tprecv が応答の到着を待たないことを指定する。応答があった場合は、tprecv は応答を取得して復帰する。このフラグを指定しない場合、応答がないと、tprecv は、応答、トランザクション タイムアウト、またはブロッキング タイムアウトのいずれかが発生するのを待つ。
TPNOTIME: tprecv が応答を無限に待つことを指定する。このフラグを使用する場合、tprecv は、ブロッキング タイムアウトの影響は受けないが、トランザクション タイムアウトの影響は受ける。
フラグの値を 0 にすると、開始プロセスは、条件が解消されるまで、またはタイムアウトが発生するまで、ブロックされる。

 


会話の終了

WebLogic Server と Tuxedo の会話は、サーバ プロセスがそのタスクを正常に完了したときに終了します。以下の節では、会話の終了方法について説明します。

Tuxedo アプリケーションが開始した会話

WebLogic Server 会話型サーバによる return の正常な呼び出しで会話が終了します。TPEV_SVCSUCC イベントが、サービスの正常な終了を示すために接続を開始した Tuxedo クライアントに送信されます。接続はその後に適切な方法で切断されます。

WebLogic Tuxedo Connector アプリケーションが開始した会話

Tuxedo 会話型サーバによる tpreturn の正常な呼び出しで会話が終了します。TPEV_SVCSUCC イベントが、サービスの正常な終了を示すために接続を開始した WebLogic Tuxedo Connector クライアントに送信されます。接続はその後に適切な方法で切断されます。

階層的な会話の終了

階層的な会話を適切に終了するためには、会話の終了する順序が重要になります。

A-B および B-C という 2 つのアクティブな接続があると仮定します。B が両方の接続を管理する WebLogic Tuxedo Connector アプリケーションである場合、return を呼び出すと、その呼び出しは失敗し、TPEV_SVCERR イベントがすべてのオープンな接続にポストされ、それらの接続は無秩序に閉じます。

両方の接続を適切に終了するには、アプリケーションでは次のシーケンスを実行する必要があります。

  1. B は TPRECVONLYtpsend を呼び出し、B-C 接続の制御権を Tuxedo アプリケーション C に引き渡します。
  2. C は rvalTPSUCCESSTPFAIL、または TPEXIT に設定して departure を呼び出します。
  3. B は return を呼び出し、A についてイベント (TPEV_SVCSUCC または TPEV_SVCFAIL) をポストします。

会話型サービスは、リクエストまたは応答の呼び出しを行うことができます。したがって、直前の例で、B から C への呼び出しは tpconnect ではなく tpacall() または tpcall() を使用して実行できます。会話型サービスでは、tpforward を呼び出すことは許可されていません。

 


無秩序な切断の実行

WebLogic Server 会話型クライアントまたは会話型サーバは、tpdiscon を呼び出して無秩序な切断を実行します。これは、接続を「打ち切る」ような処理です。

次に、tpdiscon の呼び出しについて説明します。

 


会話型通信のイベントについて

WebLogic Tuxedo Connector JATMI では、5 つのイベントを使用して会話型通信を管理します。次の表は、それらのイベント、それらのイベントが返される機能、およびそれぞれの詳しい説明を示しています。

表 6-5 WebLogic Tuxedo Connector の会話型通信のイベント
イベント
送信対象
説明
Tuxedo tprecv
接続の制御権が渡された。この Tuxedo プロセスは tpsend を呼び出すことができる。
JATMI tprecv
接続の制御権が渡された。この JATMI プロセスは tpsend を呼び出すことができる。
Tuxedo tprecv、tpsend、tpreturn
接続が切断されており、これ以上の通信はできない。JATMI tpdiscon はこのイベントを接続の開始側にポストする。開始側は、tpreturn が呼び出されたときにそのイベントを開いているすべての接続に送信する。接続は無秩序に閉じられ、トランザクションが存在する場合、そのトランザクションは中止される。
JATMI tprecv、tpsend、return
接続が切断されており、これ以上の通信はできない。Tuxedo tpdiscon はこのイベントを接続の開始側にポストする。開始側は、return が呼び出されたときにそのイベントを開いているすべての接続に送信する。接続は無秩序に閉じられ、トランザクションが存在する場合、そのトランザクションは中止される。
Tuxedo tpsend または JATMI tpsend
接続の開始側によって受信され、従属プログラムが tpreturn (Tuxedo) または return (JATMI) を発行し、接続の制御権なしに終了したことを示す。
Tuxedo tprecv または JATMI tprecv
接続の開始側によって受信され、従属プログラムが接続の制御権なく tpreturn (Tuxedo) または return (JATMI) を正常に発行したが、呼び出しの完了前にエラーが発生したことを示す。
Tuxedo tprecv
接続の開始側によって受信され、従属サービスが正常に終了した (つまり return が正常に呼び出された) ことを示す。
JATMI tprecv
接続の開始側によって受信され、従属サービスが正常に終了した (つまり tpreturn が TPSUCCESS で呼び出された) ことを示す。
Tuxedo tpsend または JATMI tpsend
接続の開始側によって受信され、従属プログラムが tpreturn (Tuxedo) または return (JATMI) を発行し、接続の制御権なしに終了したことを示す。サービスはステータス TPFAIL または TPEXIT で完了しており、データは Null に設定される。
Tuxedo tprecv または JATMI tprecv
接続の開始側によって受信され、従属プログラムが正常に終了しなかったことを示す。サービスはステータス TPFAIL または TPEXIT で完了した。

 


WebLogic Tuxedo Connector の会話ガイドライン

会話が正常に完了するように、会話モードでは以下のガイドラインに従ってください。


ページの先頭       前  次