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