Oracle WebLogic Tuxedo Connector プログラマーズ ガイド
Oracle WebLogic Tuxedo Connector JATMI 会話
以下の節では、会話の概要とそれらをアプリケーションで定義および管理する方法について説明します。
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 会話には以下の特性があります。
データが TypedBuffer を使用して渡されます。データのタイプおよびサブタイプは、サービスで認識されるタイプおよびサブタイプと一致していなければなりません。
会話型クライアントと会話型サーバの論理接続は、それが終了されるまでアクティブなままです。
会話型クライアントと会話型サーバの接続では、任意数のメッセージを転送できます。
Oracle WebLogic Tuxedo Connector の会話型クライアントは、tpcall または tpacall ではなく tpconnect を使用してサービスのリクエストを開始します。
Oracle WebLogic Tuxedo Connector の会話型クライアントと会話型サーバは、JATMI プリミティブの tpsend を使用してデータを送信し、tprecv を使用してデータを受信します。
会話型クライアントは、会話型サーバにサービス リクエストを送信するだけです。
会話型サーバは、tpforward
を呼び出すことが禁止されています。
Oracle WebLogic Tuxedo Connector JATMI 会話プリミティブ
以下の Oracle WebLogic Tuxedo Connector プリミティブは、Oracle WebLogic Server と Oracle Tuxedo の間で通信する会話型クライアントおよび会話型サーバを作成する際に使用します。
表 6-1 Oracle WebLogic Tuxedo Connector の会話型クライアントのプリミティブ
|
|
|
Oracle Tuxedo 会話型サービスとの接続を確立するために使用する。
|
|
接続を中止し、 TPEV_DISCONIMM イベントを生成するために使用する。
|
|
Oracle Tuxedo アプリケーションからオープンな接続を介してデータを受信するために使用する。
|
|
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 を指定しないと、呼び出しは失敗し、 TPException が TPEV_DISCONIMM に設定される。
|
|
データ バッファのポインタ。接続を確立するときに、バッファを指すように data パラメータを設定することでデータを同時に送信できる。バッファの type および subtype は、呼び出されるサービスによって認識されなければならない。 data の値を NULL に設定すると、データが送信されないように指定できる。
|
|
アプリケーションの必要に応じて、フラグを単独で、または組み合わせて使用する。有効なフラグは、以下のとおりである。
TPSENDONLY: 開始側が制御権を保持することを指定する。呼び出されるサービスは従属プロセスになり、データの受信だけが可能である。 TPRECVONLY と併用することはできない。
TPRECVONLY: 呼び出されたサービスに制御権を渡すことを指定する。開始側は従属プロセスになり、データの受信だけが可能である。 TPSENDONLY と併用することはできない。
TPNOTRAN: svc が呼び出されて開始側がトランザクション モードのときは、 svc は開始側のトランザクションの一部ではないものとすることを指定する。呼び出しは、トランザクション タイムアウトの影響を受け続ける。 svc が失敗しても、開始側のトランザクションは影響を受けない。
TPNOBLOCK: ブロッキング条件が存在する場合はリクエストを送信しないことを指定する。 TPNOBLOCK を指定しないと、条件が解消されるか、トランザクション タイムアウトが発生するまで、またはブロッキング タイムアウトが発生するまで、開始側はブロックされる。
TPNOTIME: 開始側は無期限にブロックされ、ブロッキング タイムアウトの影響を受けないことを指定する。開始側がトランザクション モードの場合、呼び出しはトランザクション タイムアウトの影響を受ける。
|
サンプル TuxedoConversationBean.java コード
次に、tpconnect を使用して会話を開始するサンプル コードを示します。
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 のパラメータ
|
|
|
この会話で送信されるデータが格納されているバッファへのポインタ。
|
|
TPRECVONLY: 開始プロセスのデータが送信された後に開始プロセスが接続の制御権を放棄することを指定する。開始プロセスは従属プロセスになり、データを受信することだけが可能となる。
TPNOBLOCK: ブロッキング条件が存在する場合はリクエストを送信しないことを指定する。 TPNOBLOCK を指定しないと、条件が解消されるか、トランザクション タイムアウトが発生するまで、またはブロッキング タイムアウトが発生するまで、開始側はブロックされる。
TPNOTIME: 開始プロセスが無限にブロックされることを拒否せず、ブロッキング タイムアウトの影響を受けないことを指定する。呼び出しは、トランザクション タイムアウトの影響を受ける。
|
メッセージの受信
JATMI プリミティブ tprecv を使用すると、Oracle Tuxedo アプリケーションからメッセージを受信できます。
次の表は、tprecv
のパラメータを示しています。
表 6-4 Oracle WebLogic Tuxedo Connector JATMI tprecv のパラメータ
|
|
|
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 イベントがすべてのオープンな接続にポストされ、それらの接続は無秩序に閉じます。
両方の接続を適切に終了するには、アプリケーションでは次のシーケンスを実行する必要があります。
B は TPRECVONLY で tpsend を呼び出し、B-C 接続の制御権を Oracle Tuxedo アプリケーション C に引き渡します。
C は rval
を TPSUCCESS
、TPFAIL
、または TPEXIT
に設定して departure
を呼び出します。
B は return
を呼び出し、A についてイベント (TPEV_SVCSUCC または TPEV_SVCFAIL) をポストします。
会話型サービスは、リクエストまたは応答の呼び出しを行うことができます。したがって、直前の例で、B から C への呼び出しは tpconnect ではなく tpacall() または tpcall() を使用して実行できます。会話型サービスでは、tpforward
を呼び出すことは許可されていません。
無秩序な切断の実行
Oracle WebLogic Server 会話型クライアントまたは会話型サーバは、tpdiscon を呼び出して無秩序な切断を実行します。これは、接続を「打ち切る」ような処理です。
次に、tpdiscon
の呼び出しについて説明します。
tpdiscon を呼び出すと、接続が直ちに切断され、接続の反対側で TPEV_DISCONIMM が生成されます。送信先に到着していないデータはすべて失われます。会話がトランザクションの一部である場合は、そのトランザクションをロールバックする必要があります。
tpdiscon は、会話の開始プロセスでのみ呼び出すことができます。
会話型通信のイベントについて
Oracle WebLogic Tuxedo Connector JATMI では、5 つのイベントを使用して会話型通信を管理します。次の表は、それらのイベント、それらのイベントが返される機能、およびそれぞれの詳しい説明を示しています。
表 6-5 Oracle WebLogic Tuxedo Connector の会話型通信のイベント
|
|
|
|
|
接続の制御権が渡された。この Oracle Tuxedo プロセスは tpsend を呼び出すことができる。
|
|
接続の制御権が渡された。この JATMI プロセスは tpsend を呼び出すことができる。
|
|
Tuxedo tprecv、tpsend、tpreturn
|
接続が切断されており、これ以上の通信はできない。JATMI tpdiscon はこのイベントを接続の開始側にポストする。開始側は、 tpreturn が呼び出されたときにそのイベントを開いているすべての接続に送信する。接続は無秩序に閉じられ、トランザクションが存在する場合、そのトランザクションは中止される。
|
JATMI tprecv、tpsend、return
|
接続が切断されており、これ以上の通信はできない。Oracle Tuxedo tpdiscon はこのイベントを接続の開始側にポストする。開始側は、 return が呼び出されたときにそのイベントを開いているすべての接続に送信する。接続は無秩序に閉じられ、トランザクションが存在する場合、そのトランザクションは中止される。
|
|
Tuxedo tpsend または JATMI tpsend
|
接続の開始側によって受信され、従属プログラムが tpreturn (Oracle Tuxedo) または return (JATMI) を発行し、接続の制御権なしに終了したことを示す。
|
Tuxedo tprecv または JATMI tprecv
|
接続の開始側によって受信され、従属プログラムが接続の制御権なく tpreturn (Oracle Tuxedo) または return (JATMI) を正常に発行したが、呼び出しの完了前にエラーが発生したことを示す。
|
|
|
接続の開始側によって受信され、従属サービスが正常に終了した (つまり return が正常に呼び出された) ことを示す。
|
|
接続の開始側によって受信され、従属サービスが正常に終了した (つまり tpreturn が TPSUCCESS で呼び出された) ことを示す。
|
|
Tuxedo tpsend または JATMI tpsend
|
接続の開始側によって受信され、従属プログラムが tpreturn (Oracle Tuxedo) または return (JATMI) を発行し、接続の制御権なしに終了したことを示す。サービスはステータス TPFAIL または TPEXIT で完了しており、データは Null に設定される。
|
Tuxedo tprecv または JATMI tprecv
|
接続の開始側によって受信され、従属プログラムが正常に終了しなかったことを示す。サービスはステータス TPFAIL または TPEXIT で完了した。
|
Oracle WebLogic Tuxedo Connector の会話ガイドライン
会話が正常に完了するように、会話モードでは以下のガイドラインに従ってください。
JATMI 会話型プリミティブは、Oracle WebLogic Tuxedo Connector Conversation インタフェースおよび ApplicationToMonitorInterface インタフェースの定義に従って使用する。
常にフラグを使用する。
Oracle WebLogic Tuxedo Connector JATMI で定義されているフラグのみを使用する。
Oracle WebLogic Tuxedo Connector には、同時会話の数を制限して Oracle WebLogic Server ネットワークの過負荷を防止するために使用できるパラメータがない。
Oracle Tuxedo が会話の最大許容数 (MAXCONV
パラメータで定義) を超えた場合、Oracle WebLogic Tuxedo Connector の例外値としては TPEV_DISCONIMM が予期される。
無認可の Oracle Tuxedo サービスに対する tprecv では、TPEV_DISCONIMM 例外値が生じる。
Oracle WebLogic Tuxedo Connector クライアントが、別の会話型サービスへの tpforward
を実行する Oracle Tuxedo 会話型サービスに接続された場合、Oracle WebLogic Tuxedo Connector の例外値としては TPEV_DISCONIMM が予期される。
会話はトランザクションの中で開始できる。その際は、会話をトランザクション モードでプログラム文の一部として開始します。トランザクションの詳細については、「Oracle WebLogic Tuxedo Connector JATMI トランザクション」を参照してください。
Oracle WebLogic Tuxedo Connector リモート ドメインで TPENOENT が生じた場合、そのリモート ドメインは切断イベント メッセージを送り返し、そのメッセージは Oracle WebLogic Tuxedo Connector アプリケーション tprecv で TPEV_DISCONIMM 例外として捕捉される。