Oracle® Fusion Middleware Oracle WebLogic Server Tuxedo Connector プログラマーズ ガイド 11g リリース 1 (10.3.1) B55532-01 |
|
戻る |
次へ |
注意 : Oracle Tuxedo の対話通信の詳細については、http://download.oracle.com/docs/cd/E13203_01/tuxedo/tux100/pgc/pgconv.html で『C 言語を使用した Tuxedo アプリケーションのプログラミング』の「会話型クライアントおよびサーバのコーディング」を参照してください。 |
以下の節では、会話の概要とそれらをアプリケーションで定義および管理する方法について説明します。
Oracle WebLogic Tuxedo Connector は、Oracle Tuxedo の会話を Oracle WebLogic Server アプリケーションと Oracle Tuxedo アプリケーションの間でメッセージを交換する手段としてサポートしています。この形態の通信では、仮想接続がクライアントとサーバの間で維持され、各サイドで会話の状態に関する情報が維持されます。接続を開き、会話を開始するプロセスが、会話の開始側です。接続の制御権を持つプロセスが開始プロセスで、制御権のないプロセスが従属プロセスです。接続は、それを終了するイベントが発生するまでアクティブなままです。
会話型通信では、開始プロセスと従属プロセスの間で Half-Duplex 接続が確立されます。接続の制御権は、開始プロセスと従属プロセスの間で渡されます。制御権を持つプロセスがメッセージを送信でき (開始プロセス)、制御権のないプロセスはメッセージの受信のみを行えます (従属プロセス)。
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 プリミティブは、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 クライアント EJB の開発」で説明されている手順を実行します。次の節では、tpconnect を使用して接続を開き、会話を開始する方法を説明します。
Oracle WebLogic Tuxedo Connector の会話型クライアントは、Oracle Tuxedo 会話型サービスとの接続を確立する必要があります。JATMI プリミティブ tpconnect を使用すると、接続を開いて会話を開始できます。呼び出しが成功すると、会話でデータを送受信するために使用できるオブジェクトが返されます。
次の表は、tpconnect
のパラメータを示しています。
表 6-2 Oracle WebLogic Tuxedo Connector JATMI tpconnect のパラメータ
パラメータ | 説明 |
---|---|
svc
|
会話型サービス名の文字ポインタ。 |
data
|
データ バッファのポインタ。接続を確立するときに、バッファを指すように |
flags
|
アプリケーションの必要に応じて、フラグを単独で、または組み合わせて使用する。有効なフラグは、以下のとおりである。 TPSENDONLY : 開始側が制御権を保持することを指定する。呼び出されるサービスは従属プロセスになり、データの受信だけが可能である。 TPRECVONLY : 呼び出されたサービスに制御権を渡すことを指定する。開始側は従属プロセスになり、データの受信だけが可能である。 TPNOTRAN : TPNOBLOCK : ブロッキング条件が存在する場合はリクエストを送信しないことを指定する。 TPNOTIME : 開始側は無期限にブロックされ、ブロッキング タイムアウトの影響を受けないことを指定する。開始側がトランザクション モードの場合、呼び出しはトランザクション タイムアウトの影響を受ける。 |
次に、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 サービス 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 : ブロッキング条件が存在する場合はリクエストを送信しないことを指定する。 TPNOTIME : 開始プロセスが無限にブロックされることを拒否せず、ブロッキング タイムアウトの影響を受けないことを指定する。呼び出しは、トランザクション タイムアウトの影響を受ける。 |
JATMI プリミティブ tprecv を使用すると、Oracle Tuxedo アプリケーションからメッセージを受信できます。
次の表は、tprecv
のパラメータを示しています。
表 6-4 Oracle WebLogic Tuxedo Connector JATMI tprecv のパラメータ
パラメータ | 説明 |
---|---|
flags |
フラグは以下のいずれかを指定できる。 TPNOBLOCK : TPNOTIME : フラグの値を 0 にすると、開始プロセスは、条件が解消されるまで、またはタイムアウトが発生するまで、ブロックされる。 |
Oracle WebLogic Server と Oracle Tuxedo の会話は、サーバ プロセスがそのタスクを正常に完了したときに終了します。以下の節では、会話の終了方法について説明します。
Oracle WebLogic Server 会話型サーバによる return
の正常な呼び出しで会話が終了します。TPEV_SVCSUCC イベントが、サービスの正常な終了を示すために接続を開始した Oracle Tuxedo クライアントに送信されます。接続はその後に適切な方法で切断されます。
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 の会話型通信のイベント
イベント | 送信対象 | 説明 |
---|---|---|
Tuxedo |
接続の制御権が渡された。この Oracle Tuxedo プロセスは |
|
JATMI |
接続の制御権が渡された。この JATMI プロセスは |
|
Tuxedo |
接続が切断されており、これ以上の通信はできない。JATMI |
|
JATMI |
接続が切断されており、これ以上の通信はできない。Oracle Tuxedo |
|
Tuxedo |
接続の開始側によって受信され、従属プログラムが |
|
Tuxedo |
接続の開始側によって受信され、従属プログラムが接続の制御権なく |
|
Tuxedo |
接続の開始側によって受信され、従属サービスが正常に終了した (つまり |
|
JATMI |
接続の開始側によって受信され、従属サービスが正常に終了した (つまり |
|
Tuxedo |
接続の開始側によって受信され、従属プログラムが |
|
Tuxedo |
接続の開始側によって受信され、従属プログラムが正常に終了しなかったことを示す。サービスはステータス TPFAIL または TPEXIT で完了した。 |
会話が正常に完了するように、会話モードでは以下のガイドラインに従ってください。
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 例外として捕捉される。