Oracle® Fusion Middleware Oracle WebLogic Server Tuxedo Connectorプログラマーズ・ガイド 11g リリース1(10.3.5) B61627-02 |
|
前 |
次 |
注意: 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会話には以下の特性があります。
データがTypedBuffersを使用して渡されます。データのタイプおよびサブタイプは、サービスで認識されるタイプおよびサブタイプと一致していなければなりません。
会話型クライアントと会話型サーバーの論理接続は、それが終了されるまでアクティブなままです。
会話型クライアントと会話型サーバーの接続では、任意数のメッセージを転送できます。
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の会話型クライアントを作成するには、第2章「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の会話型サーバーを作成するには、第3章「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 :ブロッキング条件が存在する場合はリクエストを送信しないことを指定します。 TPNOTIME: イニシエータが無限にブロックされることを拒否せず、ブロッキング・タイムアウトの影響を受けないことを指定します。呼出しは、トランザクション・タイムアウトの影響を受けます。 |
JATMIプリミティブtprecvを使用すると、Oracle Tuxedoアプリケーションからメッセージを受信できます。
次の表は、tprecv
のパラメータを示しています。
表6-4 Oracle WebLogic Tuxedo Connector JATMI tpconnectのパラメータ
パラメータ | 説明 |
---|---|
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
の呼出しは:
接続を直ちに切断し、接続の反対側でTPEV_DISCONIMMを生成します。送信先に到着していないデータはすべて失われます。会話がトランザクションの一部である場合は、そのトランザクションをロールバックする必要があります。
会話のイニシエータのみが呼び出すことができます。
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が予期されます。
会話はトランザクションの中で開始できます。その際は、会話をトランザクション・モードでプログラム文の一部として開始します。トランザクションの詳細は、第5章「Oracle WebLogic Tuxedo Connector JATMIトランザクション」を参照してください。
Oracle WebLogic Tuxedo Connectorリモート・ドメインでTPENOENTが生じた場合、そのリモート・ドメインは切断イベント・メッセージを送り返し、そのメッセージはOracle WebLogic Tuxedo ConnectorアプリケーションtprecvでTPEV_DISCONIMM例外として捕捉されます。