プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Server Oracle WebLogic Tuxedo Connectorアプリケーションの開発
12c (12.2.1.3.0)
E90367-01
目次へ移動
目次

前
次

6 Oracle WebLogic Tuxedo Connector JATMI会話

この章では、Oracle Tuxedo会話をアプリケーションで定義および管理する方法について説明します。Tuxedoの会話は、Oracle WebLogic Server アプリケーションとOracle Tuxedoアプリケーションの間でメッセージの交換用としてサポートしているメソッドです。

この章の内容は以下のとおりです。

注意:

http://docs.oracle.com/cd/E13203_01/tuxedo/tux100/pgc/pgconv.htmlにあるTuxedo ATMIアプリケーションのC言語でのプログラミングの会話型クライアントおよびサーバーの記述に関する項を参照してください。

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会話には以下の特性があります。

  • データがTypedBuffersを使用して渡されます。データのタイプおよびサブタイプは、サービスで認識されるタイプおよびサブタイプと一致していなければなりません。

  • 会話型クライアントと会話型サーバーの論理接続は、それが終了されるまでアクティブなままです。

  • 会話型クライアントと会話型サーバーの接続では、任意数のメッセージを転送できます。

  • 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の会話型クライアントのプリミティブ

名前 操作

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 tpconnectのパラメータ

パラメータ 説明

data

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

flags

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

TPRECVONLY: イニシエータのデータが送信された後にイニシエータが接続の制御権を放棄することを指定します。イニシエータはサブオーディネートになり、データを受信することだけが可能となります。

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

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

メッセージの受信

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

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

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

パラメータ 説明

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の呼出しは:

  • 接続を直ちに切断し、接続の反対側でTPEV_DISCONIMMを生成します。送信先に到着していないデータはすべて失われます。会話がトランザクションの一部である場合は、そのトランザクションをロールバックする必要があります。

  • 会話のイニシエータのみが呼び出すことができます。

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

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の会話ガイドライン

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

  • JATMI会話型プリミティブは、Oracle WebLogic Tuxedo Connector 会話インタフェースおよび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アプリケーションtprecvTPEV_DISCONIMM例外として捕捉されます。