Hitachi

VisiBroker Version 5 Borland(R) Enterprise Server VisiBroker(R) プログラマーズリファレンス


11.21 ExtendedClosure

public interface ExtendedClosure extends Closure {
    public RequestInfo reqInfo;
    public InputStream payload;
}

このインタフェースはClosureから派生したインタフェースであり,読み取り専用属性に使用するRequestInfoを格納します。

IDLサンプル11-1 RequestInfo
struct RequestInfo {
    boolean response_expected;
    unsigned long request_id;
};

ServerRequestInterceptorおよびClientRequestInterceptorに渡されたClosureオブジェクトを,サブクラスExtendedClosureにキャストできます。ExtendedClosureを使用して,RequestInfoを抽出し,さらにそのRequestInfoからrequest_idとresponse_expectedを抽出できます。request_idは,リクエストに割り当てられた一意の識別子です。response_expectedフラグは,リクエストが一方向呼び出しであるかどうかを識別します。

int my_response_expected =
    ((ExtendedClosure)closure).reqInfo.response_expected;
int my_request_id = ((ExtendedClosure)closure).reqInfo.request_id;

詳細については,examples/interceptor/client_serverにある例を参照してください。

InputStreamを修正する場合は,ExtendedClosureのpayloadパラメタを使用してください。リクエストインタセプタのpayload属性は読み取り専用なので,InputStreamは変更できません。

このため,ExtendedClosureには読み書き可能なInputStream payloadパラメタが用意されています。payload属性の主な用途は,既存のInputStreamを新規に置き換えられるようにすることです。

examples/interceptor/encryptionの例は,ExtendedClosureのpayload属性の使用方法を示しています。この例では,暗号化されたInputStreamをインタセプタが解読するときに,解読されたメッセージを格納するための新規InputStreamを生成しなければいけません。ExtendedClosureはInputStreamのホルダの役割を果たします。payloadが新規InputStreamに割り当てられると,このInputStreamはリクエストに対応づけられたInputStreamとなります。