Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

付録A IDL定義

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

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

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

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

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

oneway

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

 クライアントはメソッドの実行結果の応答を待たずに処理を進めることができますが、メソッドの実行が異常終了しても、クライアントには通知されません。
 onewayを指定しないと、メソッドの実行が成功すればその復帰値が、例外が発生したときには例外が通知されます。

復帰値のデータ型

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

メソッド名

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

パラメタ

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

パラメタタイプ

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

 in   :パラメタはクライアントからメソッド(サーバ)に渡されます。
 out  :パラメタはメソッド(サーバ)からクライアントに渡されます。
 inout:パラメタはクライアント−サーバ間で双方向に渡されます。

 inタイプは、関数呼び出しなどで値を渡す場合に使用されます。
 outタイプは、メソッドの実行結果として複数のデータを受け取る場合に使用します。受け取るデータが1つであれば、メソッドの復帰値(後述)として受け取ることもできます。inoutタイプは、双方向にデータのやりとりを行うメソッド処理の場合に使用します。inタイプのパラメタはサーバ側で変更してはなりません。メソッドの実行結果、例外が発生した場合は、outタイプ、inoutタイプのパラメタ、および復帰値にデータは設定されません。

パラメタのデータ型

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

 スコープ名は上記で示したデータ型で定義済みでなければなりません。パラメタ名には単独の識別子か配列が指定できます。

raises

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

context

 context式は、クライアントアプリケーションとサーバアプリケーションで共有する情報を定義します。例えば、通常、サーバアプリケーションは呼び出されたメソッドがどのクライアントアプリケーションからのものかを判断することはできませんが、context式でクライアントアプリケーション情報を指定することで、サーバアプリケーションはクライアントアプリケーションを見分けることができます。
 contextの詳細については“アプリケーション作成ガイド(CORBAサービス編)”の“CORBAインタフェース”に説明されている“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);  // オペレーション宣言
      };
  };

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005