ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)
Interstage

A.4 オペレーション宣言

オペレーション宣言は、メソッド名、復帰値の型、パラメタのデータ型、メッセージび出し時に返される例外、コンテキスト情報(サーバアプリケーションとクライアントアプリケーションの間で共通に持つ環境変数に相当)を含みます。

オペレーション宣言の書式を以下に示します([ ]内は省略可能)。

[ oneway ] 復帰値のデータ型 メソッド名 (                // メソッド名定義
    [ パラメタタイプ データ型 パラメタ名[, ..] ]        // パラメタ
) 
    [ raises  ( 例外構造体名[, ..] ) ]
    [ context ( コンテキスト名[, ..] ) ];

各キーワードと指定項目の意味を以下に説明します。


oneway

オペレーション属性を指定します。
onewayを指定すると、サーバは呼び出されたメソッドの実行結果をクライアントに通知しません。このため、以下の制約があります。

  • 出力パラメタを持つことができないため、復帰値の型はvoidとします。

  • raises式を含むことができません。raises式を含むオペレーションを起動すると、標準例外が発生する可能性があります。

クライアントは、メソッドの実行結果の応答を待たずに処理を進めることができます。ただし、メソッドの実行が異常終了しても、クライアントには通知されません。

onewayを指定しないと、メソッド実行が正常終了した場合はその復帰値が、例外が発生した場合は例外が通知されます。


復帰値のデータ型

IDLで定義できる任意の型を指定します。復帰値がない場合は、voidを指定します。


メソッド名

定義するオペレーションの名前を指定します。


パラメタ

0個または1個以上のパラメタを指定します。パラメタを複数指定する場合は、カンマ(,)で区切ります。


パラメタタイプ

クライアントアプリケーションとサーバアプリケーションとでパラメタが渡される方向を指定します。
パラメタタイプには、以下の3つのタイプがあります。

  • in:パラメタは、クライアントからメソッド(サーバ)に渡されます。

  • out:パラメタは、メソッド(サーバ)からクライアントに渡されます。

  • inout:パラメタは、クライアント-サーバ間で双方向に渡されます。

inタイプは、関数呼出しなどで値を渡す場合に使用されます。
outタイプは、メソッドの実行結果として複数のデータを受け取る場合に使用します。受け取るデータが1つであれば、メソッドの復帰値(後述)として受け取ることもできます。
inoutタイプは、双方向にデータのやりとりするメソッド処理の場合に使用します。

inタイプのパラメタは、サーバ側で変更することができません。メソッド実行の結果、例外が発生した場合、データはoutタイプ/inoutタイプのパラメタ/復帰値に設定されません。


パラメタのデータ型

パラメタのデータ型として、以下が指定できます。

  • 基本型

  • シーケンス型

  • 文字列型

  • スコープ名

スコープ名は、上記で示したデータ型で定義されている必要があります。パラメタ名には、単独の識別子/配列が指定できます。


raises

raises式は、メソッドがユーザ例外で異常終了したときの詳細情報を受け取る例外構造体を定義します。通常、メソッドの呼出しは環境構造体(Environment)を付けて行われ、システム例外が発生すると、そのエラーコードが環境構造体に設定されます。raises式を定義すると、メソッドで異常が発生した場合に、メソッド固有のエラー(ユーザ例外)の情報を受け取ることができます。そのエラー情報は、環境構造体に設定されて渡されます。


context

context式は、クライアントアプリケーションとサーバアプリケーションで共有する情報を定義します。たとえば、通常、サーバアプリケーションは呼び出されたメソッドがどのクライアントアプリケーションからのものかを判断できませんが、context式でクライアントアプリケーション情報を指定することにより、サーバアプリケーションはクライアントアプリケーションを見分けることができます。
contextの詳細については、“12.3 Contextオブジェクト”を参照してください。

注意

Portable-ORBを使用した運用を行う場合、Context式は使用できません。


オペレーション宣言の例を以下に示します。

module Module1 {
    typedef Object otype;
    interface A {
        exception  FuncException {                  // 例外宣言
            string        reason;
        };

        Module1::otype  Open(in string name)        // オペレーション宣言
                raises(FuncException);
        oneway void  Close(in Module1::otype obj);  // オペレーション宣言
    };
};