Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド
リクエストインタセプタは,特定のインタセプトポイントでリクエスト/応答シーケンスのフローを受け取るために使用します。これによってサービスはクライアントとサーバ間でコンテキスト情報を転送できます。各インタセプトポイントではBorland Enterprise Server VisiBroker ORBはオブジェクトを与えて,このオブジェクトによってインタセプタはリクエスト情報にアクセスできます。リクエストインタセプタには2種類あり,そのそれぞれにリクエスト情報インタフェースがあります。
リクエストのインタセプタポイントを図19-2に示します。
リクエストインタセプタの詳細については,マニュアル「Borland Enterprise Server VisiBroker プログラマーズリファレンス」の「ポータブルインタセプタインタフェースとクラス」の記述を参照してください。
ClientRequestInterceptorには,クライアント側でインプリメントされたインタセプトポイントがあります。
表19-1に示すように,OMGがClientRequestInterceptorで定義しているインタセプトポイントは五つあります。
表19-1 ClientRequestInterceptorインタセプトポイント
インタセプトポイント | 説明 |
---|---|
send_request | クライアント側インタセプタが,リクエストがサーバに送信される前にリクエストを照会して,サービスコンテキストを修正します。 |
send_poll | クライアント側インタセプタが,TII(時間非依存呼び出し)ポーリング取得応答シーケンス※中にリクエストを照会します。 |
receive_reply | クライアント側インタセプタが,サーバから応答情報が戻されたあと,クライアントに制御が移る前にその応答情報を照会します。 |
receive_exception | クライアント側インタセプタが,例外発生時に,その例外がクライアントに送信される前に例外情報を照会します。 |
receive_other | クライアント側インタセプタが,正常応答または例外以外のリクエスト結果を受け取った場合に利用できる情報を照会します。 |
各インタセプトポイントの詳細については,マニュアル「Borland Enterprise Server VisiBroker プログラマーズリファレンス」の「ポータブルインタセプタインタフェースとクラス」の記述を参照してください。
class _VISEXPORT ClientRequestInterceptor:public virtualInterceptor { public: virtual void send_request(ClientRequestInfo_ptr _ri)=0; virtual void send_poll(ClientRequestInfo_ptr _ri)=0; virtual void receive_reply(ClientRequestInfo_ptr _ri)=0; virtual void receive_exception(ClientRequestInfo_ptr _ri)=0; virtual void receive_other(ClientRequestInfo_ptr _ri)=0; }
package org.omg.PortableInterceptor; public interface ClientRequestInterceptor extends Interceptor,org.omg.CORBA.portable.IDLEntity, org.omg.CORBA.LocalInterface { public void send_request(ClientRequestInfo ri) throws ForwardRequest; public void send_poll(ClientRequestInfo ri) throws ForwardRequest; public void receive_reply(ClientRequestInfo ri); public void receive_exception(ClientRequestInfo ri) throws ForwardRequest; public void receive_other(ClientRequestInfo ri) throws ForwardRequest; }
クライアント側の規則を次に,具体例を表19-2に示します。
クライアント側の規則 | 説明 |
---|---|
呼び出し成功 | send_requestのあとにreceive_reply。開始点のあとに終了点がきます。 |
リトライ | send_requestのあとにreceive_other。開始点のあとに終了点がきます。 |
ServerRequestInterceptorには,サーバ側でインプリメントされたインタセプトポイントがあります。表19-3に示すように,OMGがServerRequestInterceptorで定義しているインタセプトポイントは五つあります。
表19-3 ServerRequestInterceptorインタセプトポイント
インタセプトポイント | 説明 |
---|---|
receive_request_service_contexts | サーバ側インタセプタが,入力リクエストからそのサービスコンテキスト情報を取得して,それをPortableInterceptor::Currentのスロットに転送します。 |
receive_request | サーバ側インタセプタが,オペレーションパラメタのようなすべての情報が利用可能になってから,リクエスト情報を照会します。 |
send_reply | サーバ側インタセプタが,ターゲットのオペレーションが呼び出されたあと,クライアントに応答が戻される前に応答情報を照会して,応答サービスコンテキストを修正します。 |
send_exception | サーバ側インタセプタが,例外発生時に,その例外がクライアントに送信される前に例外情報を照会して応答サービスコンテキストを修正します。 |
send_other | サーバ側インタセプタが,正常応答または例外以外のリクエスト結果を受け取った場合に利用できる情報を照会します。 |
各インタセプトポイントの詳細については,マニュアル「Borland Enterprise Server VisiBroker プログラマーズリファレンス」の「ポータブルインタセプタインタフェースとクラス」の記述を参照してください。
class _VISEXPORT ServerRequestInterceptor:public virtual Interceptor { public: virtual void receive_request_service_contexts (ServerRequestInfo_ptr _ri)=0; virtual void receive_request(ServerRequestInfo_ptr _ri)=0; virtual void send_reply(ServerRequestInfo_ptr _ri)=0; virtual void send_exception(ServerRequestInfo_ptr _ri)=0; virtual void send_other(ServerRequestInfo_ptr _ri)=0; };
package org.omg.PortableInterceptor; public interface ServerRequestInterceptor extends Interceptor,org.omg.CORBA.portable.IDLEntity, org.omg.CORBA.LocalInterface { public void receive_request_service_contexts (ServerRequestInfo ri)throws ForwardRequest; public void receive_request(ServerRequestInfo ri) throws ForwardRequest; public void send_reply(ServerRequestInfo ri); public void send_exception(ServerRequestInfo ri) throws ForwardRequest; public void send_other(ServerRequestInfo ri)throws ForwardRequest; }
サーバ側の規則を次に,具体例を表19-4に示します。
サーバ側の規則 | 説明 |
---|---|
呼び出し成功 | インタセプトポイントの順序receive_request_service_contexts,receive_request,send_reply。開始点,中間点,終了点の順。 |
All Rights Reserved. Copyright (C) 2008, Hitachi, Ltd.
COPYRIGHT (C) 1992-2004 Borland Software Corporation. All rights reserved.