ページの先頭行へ戻る
Interstage Application Server リファレンスマニュアル(API編)

A.1 IDL

  セション情報管理は、CORBAサービスのサーバオブジェクトとして機能を提供します。このサーバオブジェクトをセション情報管理オブジェクト(SMO:Session information Management Object)と呼びます。SMOの機能を使用するためには、SMOが提供するIDLにしたがってSMOに処理を依頼します。
  SMOが提供するIDLを以下に示します。セション情報管理が提供するのIDLは、3つのインタフェースから構成されます。
  SMOインタフェースは、セション情報域を操作するトランザクションアプリケーションで使用するインタフェースです。
  SMO_LISTENERインタフェースおよびSMO_LISTENER2インタフェースは、SMOからの未使用時間監視による事象通知を受け付ける事象通知リスナオブジェクトが実装するインタフェースです。SMO_LISTENERインタフェースは、クライアント識別子を使用したセション情報域に対する事象通知を受信する場合に実装し、SMO_LISTENER2インタフェースは、セションIDを使用したセション情報域に対する事象通知を受信する場合に実装します。
  インタフェースの使用方法については、“アプリケーション作成ガイド(コンポーネントトランザクションサービス編)”の“セション情報管理機能を使用したトランザクションアプリケーションの作成”を参照してください。

module ISTD {

    interface SMO {

        // クライアント識別子のデータ型
        const unsigned long     ClientIdLen = 48;            // クライアント識別子長
        typedef sequence<octet,ClientIdLen> ClientId;        // クライアント識別子型

        // セションIDのデータ型

        const unsigned long      SessionIdLen = 48;          // セションID長
        typedef octet            SessionId[SessionIdLen];    // セションID型

        // ユーザ例外処理の定義
        exception InvalidArgument { string reason; };        // パラメタ異常
        exception ProcessFailed   {};                        // 処理異常
        exception AlreadyExist    {};                        // 既登録
        exception NotExist        {};                        // 対象セション情報域なし
        exception NotRegistered   {};                        // 対象リスナ未登録

        // create_info の復帰値
        const unsigned long     TD_OK_NEW   = 0;             // 新規生成
        const unsigned long     TD_OK_OLD   = 1;             // 既存セション情報域返却

        // セション情報域型
        typedef sequence<octet> SessionInfo;

        //
        // --- operations for client id ---
        //
        long create_info(       // セション情報域の獲得
            in  ClientId                CLIENT_ID,
            in  unsigned long           slotno,
            in  unsigned long           size,
            in  unsigned long           lifetime
            ) raises( InvalidArgument, ProcessFailed, AlreadyExist );

        void set_info(          // セション情報域へのデータを書込
            in  ClientId                CLIENT_ID,
            in  unsigned long           slotno,
            in  SessionInfo             data
            ) raises( InvalidArgument, NotExist );

        void get_info(          // セション情報域からのデータを読込
            in  ClientId                CLIENT_ID,
            in  unsigned long           slotno,
            out SessionInfo             data
            ) raises( InvalidArgument, NotExist );

        void delete_info(       // セション情報域の解放
            in  ClientId                CLIENT_ID,
            in  unsigned long           slotno
            ) raises( InvalidArgument, NotExist );

        void add_listener(      // リスナの登録
            in  Object                  LISTENER_OR
            ) raises( InvalidArgument );
        
        void del_listener(      // リスナの抹消
            in  Object                  LISTENER_OR
            ) raises( InvalidArgument, NotRegistered );

        //
        // --- operations for session id ---
        //
        long create_info2(     // セション情報域の獲得
            in  SessionId               SESSION_ID,
            in  unsigned long           slotno,
            in  unsigned long           size,
            in  unsigned long           lifetime
            ) raises( InvalidArgument, ProcessFailed, AlreadyExist );

        void set_info2(        // セション情報域へのデータを書込
            in  SessionId               SESSION_ID,
            in  unsigned long           slotno,
            in  SessionInfo             data
            ) raises( InvalidArgument, NotExist );

        void get_info2(        // セション情報域からのデータを読込
            in  SessionID               SESSION_ID,
            in  unsigned long           slotno,
            out SessionInfo             data
            ) raises( InvalidArgument, NotExist );

        void delete_info2(     // セション情報域の解放
            in  SessionId               SESSION_ID,
            in  unsigned long           slotno
            ) raises( InvalidArgument, NotExist );

        void add_listener2(    // リスナの登録
            in  Object                  LISTENER_OR
            ) raises( InvalidArgument );
        
        void del_listener2(    // リスナの抹消
            in  Object                  LISTENER_OR
            ) raises( InvalidArgument, NotRegistered );

    };  // SMO

    interface SMO_LISTENER { // 事象通知リスナインタフェース(クライアント識別子用)

        // クライアント識別子のデータ型
        const unsigned long     ClientIdLen = 48;             // クライアント識別子長
        typedef sequence<octet,ClientIdLen> ClientId;          // クライアント識別子型
    
        // セション情報域型
        typedef sequence<octet> SessionInfo;

        // 事象通知データ型(クライアント識別子用)
        struct SlotInfo { 
            ClientId            CLIENT_ID;
            unsigned long       slotno;
            SessionInfo         data;
        };
        typedef sequence<SlotInfo> DelSlotInfo;
        
        void timeout(           // イベント受信
            in  DelSlotInfo            data
            );

    }; // SMO_LISTENER

    interface SMO_LISTENER2 { // 事象通知リスナインタフェース(セションID用)

    // セションIDのデータ型
     const unsigned long      SessionIdLen = 48;           // セションID長
     typedef octet            SessionId[SessionIdLen];     // セションID型

        // セション情報域型
        typedef sequence<octet> SessionInfo;
        // 事象通知データ型(セションID用)
        struct SlotInfo { 
            SessionId           SESSION_ID;
            unsigned long       slotno;
            SessionInfo         data;
        };
        typedef sequence<SlotInfo> DelSlotInfo;
        
        void timeout(           // イベント受信
            in  DelSlotInfo            data
            );

    }; // SMO_LISTENER2

};

注意事項