ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server Tuxedo Connector プログラマーズ ガイド
11g リリース 1 (10.3.1)
B55532-01
 

目次
目次

戻る
戻る
 
次へ
次へ

6 Oracle WebLogic Tuxedo Connector JATMI 会話


注意 :

Oracle Tuxedo の対話通信の詳細については、http://download.oracle.com/docs/cd/E13203_01/tuxedo/tux100/pgc/pgconv.html で『C 言語を使用した Tuxedo アプリケーションのプログラミング』の「会話型クライアントおよびサーバのコーディング」を参照してください。

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

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

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

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

Oracle WebLogic Tuxedo Connector の会話の特性

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

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

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

表 6-1 Oracle Weblogic Tuxedo Connector の会話型クライアントのプリミティブ

名前 操作
tpconnect

Oracle Tuxedo 会話型サービスとの接続を確立するために使用する。

tpdiscon

接続を中止し、TPEV_DISCONIMM イベントを生成するために使用する。

tprecv

Oracle Tuxedo アプリケーションからオープンな接続を介してデータを受信するために使用する。

tpsend

Oracle Tuxedo アプリケーションにオープンな接続を介してデータを送信するために使用する。


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

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

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

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

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

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

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

表 6-2 Oracle 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);
.
.
.

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

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

メッセージの送受信

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

メッセージの送信

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

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

表 6-3 Oracle WebLogic Tuxedo Connector JATMI tpsend のパラメータ

パラメータ 説明
data

この会話で送信されるデータが格納されているバッファへのポインタ。

flags

フラグは以下のいずれかを指定できる。

TPRECVONLY : 開始プロセスのデータが送信された後に開始プロセスが接続の制御権を放棄することを指定する。開始プロセスは従属プロセスになり、データを受信することだけが可能となる。

TPNOBLOCK : ブロッキング条件が存在する場合はリクエストを送信しないことを指定する。TPNOBLOCK を指定しないと、条件が解消されるか、トランザクション タイムアウトが発生するまで、またはブロッキング タイムアウトが発生するまで、開始側はブロックされる。

TPNOTIME : 開始プロセスが無限にブロックされることを拒否せず、ブロッキング タイムアウトの影響を受けないことを指定する。呼び出しは、トランザクション タイムアウトの影響を受ける。


メッセージの受信

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

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

表 6-4 Oracle WebLogic Tuxedo Connector JATMI tprecv のパラメータ

パラメータ 説明
flags

フラグは以下のいずれかを指定できる。

TPNOBLOCK : tprecv が応答の到着を待たないことを指定する。応答があった場合は、tprecv は応答を取得して復帰する。このフラグを指定しない場合、応答がないと、tprecv は、応答、トランザクション タイムアウト、またはブロッキング タイムアウトのいずれかが発生するのを待つ。

TPNOTIME : tprecv が応答を無限に待つことを指定する。このフラグを使用する場合、tprecv は、ブロッキング タイムアウトの影響は受けないが、トランザクション タイムアウトの影響は受ける。

フラグの値を 0 にすると、開始プロセスは、条件が解消されるまで、またはタイムアウトが発生するまで、ブロックされる。


会話の終了

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

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

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

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

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

階層的な会話の終了

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

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

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

  1. B は TPRECVONLYtpsend を呼び出し、B-C 接続の制御権を Oracle Tuxedo アプリケーション C に引き渡します。

  2. C は rvalTPSUCCESSTPFAIL、または TPEXIT に設定して departure を呼び出します。

  3. B は return を呼び出し、A についてイベント (TPEV_SVCSUCC または TPEV_SVCFAIL) をポストします。

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

無秩序な切断の実行

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

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

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

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

表 6-5 Oracle WebLogic Tuxedo Connector の会話型通信のイベント

イベント 送信対象 説明

TPEV_SENDONLY

Tuxedo tprecv

接続の制御権が渡された。この Oracle Tuxedo プロセスは tpsend を呼び出すことができる。

TPEV_SENDONLY

JATMI tprecv

接続の制御権が渡された。この JATMI プロセスは tpsend を呼び出すことができる。

TPEV_DISCONIMM

Tuxedo tprecv、tpsend、tpreturn

接続が切断されており、これ以上の通信はできない。JATMI tpdiscon はこのイベントを接続の開始側にポストする。開始側は、tpreturn が呼び出されたときにそのイベントを開いているすべての接続に送信する。接続は無秩序に閉じられ、トランザクションが存在する場合、そのトランザクションは中止される。

TPEV_DISCONIMM

JATMI tprecv、tpsend、return

接続が切断されており、これ以上の通信はできない。Oracle Tuxedo tpdiscon はこのイベントを接続の開始側にポストする。開始側は、return が呼び出されたときにそのイベントを開いているすべての接続に送信する。接続は無秩序に閉じられ、トランザクションが存在する場合、そのトランザクションは中止される。

TPEV_SVCERR

Tuxedo tpsend または JATMI tpsend

接続の開始側によって受信され、従属プログラムが tpreturn (Oracle Tuxedo) または return (JATMI) を発行し、接続の制御権なしに終了したことを示す。

TPEV_SVCERR

Tuxedo tprecv または JATMI tprecv

接続の開始側によって受信され、従属プログラムが接続の制御権なく tpreturn (Oracle Tuxedo) または return (JATMI) を正常に発行したが、呼び出しの完了前にエラーが発生したことを示す。

TPEV_SVCSUCC

Tuxedo tprecv

接続の開始側によって受信され、従属サービスが正常に終了した (つまり return が正常に呼び出された) ことを示す。

TPEV_SVCSUCC

JATMI tprecv

接続の開始側によって受信され、従属サービスが正常に終了した (つまり tpreturn が TPSUCCESS で呼び出された) ことを示す。

TPEV_SVCFAIL

Tuxedo tpsend または JATMI tpsend

接続の開始側によって受信され、従属プログラムが tpreturn (Oracle Tuxedo) または return (JATMI) を発行し、接続の制御権なしに終了したことを示す。サービスはステータス TPFAIL または TPEXIT で完了しており、データは Null に設定される。

TPEV_SVCFAIL

Tuxedo tprecv または JATMI tprecv

接続の開始側によって受信され、従属プログラムが正常に終了しなかったことを示す。サービスはステータス TPFAIL または TPEXIT で完了した。


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

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