Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
1717
2. CORBAアプリケーション2. CORBAアプリケーション
1818
2.1 CORBAアプリケーションの概要2.1 CORBAアプリケーションの概要
1919
CORBAアプリケーションCORBAアプリケーション〔CORBAアプリケーションの運用形態〕
(1) 動的スケルトンインターフェース(CORBAサーバアプリケーション)
(2) 静的スケルトンインターフェース(CORBAサーバアプリケーション)
(3) 各種サービスで、CORBAサービスが提供する情報を参照する
(4) 動的呼出しインターフェース(CORBAクライアントアプリケーション)
(5) 静的呼出しインターフェース(CORBAクライアントアプリケーション)
(6) OLE-CORBAゲートウェイ(CORBAクライアントアプリケーション)
2020
CORBAサーバアプリケーション(1)CORBAサーバアプリケーション(1)
CORBAサーバアプリケーションは、以下のタイプに分類されます。
++sharedサーバサーバアプリケーションは、クライアントアプリケーションから最初に呼び出されたとき、CORBAサービスにより起動されます。1つのサーバアプリケーションで複数のオブジェクトを処理することができます。
++persistentサーバサーバアプリケーションは、事前にユーザが起動しておきます。1つのサーバアプリケーションで複数のオブジェクトを処理することができます。
++unsharedサーバサーバアプリケーションは、クライアントアプリケーションから最初に呼び出されたとき、CORBAサービスにより起動されます。1つのサーバアプリケーションでは、1つのオブジェクトだけ処理できます。
◆サーバアプリケーションの起動タイプ
CORBAワークユニット
運用
複数オブジェクトの同時処理
自動起動
2121
CORBAサーバアプリケーション(2)CORBAサーバアプリケーション(2)
アプリケーションの実装方式に基づいた以下の分類があります。
++静的スケルトンインターフェースIDLファイルから生成されたスケルトンファイルをサーバアプリケーションにリンクする方法です。
++動的スケルトンインターフェーススケルトンファイルをリンクする代わりに、CORBAサービスが提供するAPIを使用して、インターフェース情報やクライアントからの情報を取り出します。
一般的に、静的スケルトンインターフェースの方が動的スケルトンインターフェースに比べて、リポジトリ情報へのアクセス回数が少ない分、性能が優れています。
2222
CORBAクライアントアプリケーションCORBAクライアントアプリケーション
CORBAクライアントアプリケーションには、実装方式に基づいた以下の分類があります。
++静的起動インターフェースDLファイルから生成されたスタブファイルをクライアントアプリケーションにリンクする方法です。
++動的起動インターフェーススタブファイルをリンクする代わりに、CORBAサービスが提供するAPIを使用してインターフェース情報を取り出し、サーバオブジェクトを呼び出すためのインターフェースを組み立てます。
++OLE-CORBAゲートウェイクライアント上のCORBA製品が提供する、OLE-CORBAゲートウェイ機能を利用して、OLEサーバによりCORBAサーバアプリケーションを使用します。
一般的に、動的起動インターフェースは、サーバアプリケーションのインターフェースを動的に組み立てるため、簡単なインターフェースの変更に対して、自プログラムの変更を行う必要がない場合があり、その意味で保守性に優れています。反対に、静的起動インターフェースは、サーバプログラムと同様、サーバのリポジトリ情報にアクセスする回数が動的起動インターフェースに比べて少ないため、性能的に優れています。また、OLE-CORBAゲートウェイは、内部的に動的起動インターフェースと同様の処理を行っているため、性能的には動的起動インターフェースと同等ですが、記述量が非常に少なく、記述性に優れています。
2323
ApdesignerでサポートしているCORBAアプリケーションApdesignerでサポートしているCORBAアプリケーション
オブジェクト指向COBOL、COBOL静的起動インターフェースクライアントアプリケーション
オブジェクト指向COBOL静的スケルトンインターフェースサーバアプリケーション
言語種別実装方式アプリケーション
2424
CORBAアプリケーション開発の流れCORBAアプリケーション開発の流れClient Server
InterfaceRepository
登録
IDLファイル
IDLコンパイラ
業務ロジック スタブ スケルトン 業務ロジック
翻訳・リンク 翻訳・リンク
クライアントアプリケーション
サーバアプリケーション
→詳細は後述
2525
2.2 IDL2.2 IDL
2626
サーバアプリケーションが提供するインターフェース情報を定義
IDLの作成IDLの作成
モジュール宣言
インターフェース宣言
オペレーション宣言
属性宣言
定数宣言
型宣言
必須
例外宣言
IDLの構文
IDLは、7つの宣言で構成されています。各宣言で使用する名前(識別子)は、先頭が英文字で、英文字、数字、およびアンダースコア(“_”)で指定します。英大文字と英小文字は同じものとして扱われます。 また、すべてのIDLファイル内に設定した識別子は一意でなければなりません。
◆モジュール宣言
モジュールは、IDLのメソッド名や型名などがほかのIDLと重複しないように、オブジェクトのグループ化宣言を行うものです。
◆インターフェース宣言
インターフェース宣言では、インターフェースの実体を定義します。C++言語のクラス宣言と同様にほかのインターフェース宣言を継承して、新しいインターフェース宣言を行うこともできます。
◆インターフェース宣言
インターフェース宣言では、インターフェースの実体を定義します。C++言語のクラス宣言と同様にほかのインターフェース宣言を継承して、新しいインターフェース宣言を行うこともできます。
module モジュール名 {
};
interface インターフェース名 ; // フォワード宣言
interface インターフェース名 [:継承するインターフェース] { // ヘッダオペレーション宣言 ; // 本体属性宣言 ;定数宣言 ;型宣言 ;例外宣言 ;
};
2727
module ModuleNAME { // モジュール宣言const string MSG1 = "balance is zero" ; // 定数宣言struct Structure1 { // 型宣言(構造体宣言)
long pay;long balance;long expectation;
};exception CDException{ // 例外宣言
string CDExceptionMsg;long CDExceptionCode;
};
interface InterfaceNAME { // インターフェース宣言void subbal(inout Structure1 param1) // オペレーション宣言
raises (CDException);};
};
例.IDL定義例.IDL定義
2828
オペレーション宣言のパラメタタイプオペレーション宣言のパラメタタイプ
in
クライアント側から値を設定して、サーバに渡す時に使用
out
サーバ側で値を設定して、クライアントがその値を利用する時に使用
inout
上記2つの特徴を持つ
module ODsample{interface stringtest{
string op1(in string str1, out string str2, inout string str3); };
};
IDL例
2929
IDLのコンパイルIDLのコンパイル
IDLファイルをコンパイル→ スタブ・スケルトンの生成、インターフェースリポジトリへ
インターフェース情報の登録を行います。
IDLファイルのコンパイル方法以下の2種類の方法があります。
• Interstage StudioのGUI環境においてのコンパイル• IDLcコマンドによるコンパイル
3030
2.3 CORBAサーバアプリケーション2.3 CORBAサーバアプリケーション
3131
サーバアプリケーションオブジェクトを管理する機能(Object Adapter、 OA)には、次の2つの種類があります。
Basic Object Adaptor(BOA)
Portable Object Adaptor(POA)
サーバアプリケーションサーバアプリケーション
BOA : CORBA2.1までの仕様で定義されていた基本的なサーバアプリケーションのインターフェースです。Interstageでは、C、C++、 Java、 オブジェクト指向COBOLでBOAを使用することができます。
POA : CORBA2.2で定義された仕様であり、特にインスタンスの管理面で標準のインターフェースが規定されています。
Interstageでは、C++、 JavaでPOAを使用することができます。
3232
CORBAサーバアプリケーションの構成CORBAサーバアプリケーションの構成
ORB初期化初期化処理部
BOA初期化
インプリメンテーションリポジトリのオブジェクトリファレンスを獲得
ImplementationDefオブジェクトのオブジェクトリファレンスを検索
サーバの活性化
インターフェース実装部(ビジネスロジック)
BOAの場合
3333
POAの構造
3434
CORBAオブジェクトとサーバントの関係
3535
POAのポリシー太字はデフォルト値
POAポリシ 意味 Value Valueの説明 備考RETAIN ActiveObjectMapにActiveなServantオブ
ジェクトを憶えます。
NON_RETAIN ActiveObjectMapを使いません。
USE_ACTIVE_OBJECT_MAP_ONLY
リクエスト処理にActiveObjectMapだけ使用します。
USE_DEFAULT_SERVANT リクエストの処理をDefault Servantオブジェクトに任せます。
USE_SERVANT_MANAGER ServantManagerオブジェクトによって目的のServantオブジェクトを見つけます。必要であればactivateも行われます。
IMPLICIT_ACTIVATION 自動的にServantオブジェクトがactivateされます。
NO_IMPLICIT_ACTIVATION 自動的にServantオブジェクトがactivateされません(サーバアプリケーションが明示的にServantオブジェクトを生成して、POAオブジェクトに登録します)。
SYSTEM_ID POAオブジェクトがオブジェクトIDを付けます。
USER_ID ユーザがオブジェクトIDを付けます。
UNIQUE_ID (注1) ServantオブジェクトにユニークなIDを付けます。
MULTIPLE_ID Servantオブジェクトに重複したIDを許します。
TRANSIENT トランジェントタイプのオブジェクトを扱います(サーバlifespan = オブジェクトlifespan)。
PERSISTENT パーシステントタイプのオブジェクトを扱います(サーバlifespan < オブジェクトlifespan)。
ORB_CTRL_MODEL スレッド処理をORBに任せます。 このPOAポリシの設定値は無効
SINGLE_THREAD_MODEL シングルスレッドで動作させます。
ServantRetention:Servant関連付けポリシ
AOMテーブルをPOAオブジェクト内で持つか持たないかを指定します。つまり、POAオブジェクト内でインスタンス管理を行うかどうかを指定できます。
RequestProcessing:リクエスト処理ポリシ
リクエスト受信時に対象インスタンスをAOM内に持ってない、もしくはAOM自身を保持しないときの振る舞いを規定するポリシです。
PERSISTENTは指定不可
ImplicitActivation:暗黙的活性化ポリシ
Servantの活性化のモードを以下のように指定可能です。 ・自動的にServantがactivateされます。 ・自動的にServantがactivateされません(アプリケーションが明示的にServantをPOAに登録します)。
Lifespan: 生存期間ポリシ
Thread: スレッドポリシ
スレッド処理をORBに任せるかシングルスレッドで動作させるかを指定できます。
オブジェクトIDをシステム(POAオブジェクト)が自動設定するか、ユーザが設定するかを指定できます。USER_IDはアプリケーションでオブジェクトIDに固有の意味を持たせたいときに有効です。
ServantにユニークなIDを付けるか、重複したIDを許すかの指定ができます。
IdUniqueness: オブジェクトID一意性ポリシ
IdAssignment:ID割り当てポリシ
トランジェントタイプのオブジェクトを扱うかパーシステントタイプのオブジェクトを扱うかを指定可能です。
3636
CORBAサーバアプリケーションの構成CORBAサーバアプリケーションの構成
POAの場合
ORB初期化
初期化処理部
RootPOAのオブジェクトリファレンスを獲得
ネーミングサービスへの登録
オブジェクトリファレンスの事前生成/登録
POAManagerの活性化と終了待機
インターフェース実装部(サーバント)
サーバントのAOMへの登録(活性化)
子孫POAの作成
3737
2.4 本章のポイント2.4 本章のポイント
3838
本章のポイント本章のポイント
CORBAアプリケーションサーバアプリケーションと、クライアントアプリケーションがあります。[サーバアプリ]
インターフェースには、静的スケルトンインターフェースと、動的ス
ケルトンインターフェースがあります。OAは、BOAとPOAがあります。
[クライアントアプリ]
インターフェースには、静的起動インターフェース、動的起動インターフェースおよびOLE-CORBAインターフェースがあります。
Apdesignerでサポートしている言語[サーバアプリ]
オブジェクト指向COBOL[クライアントアプリ]
オブジェクト指向COBOLCOBOL