What is CORBA?

CORBAで使われる重要な用語についてここで触れます。
CORBA object 1つのORBによって設置され、クライアントによって呼ばれる リクエストを持つ、「仮想的な」実体(virutal entity)。 プログラミング言語によって実装されないかぎり実際には存在しない という意味で「仮想な」もの。CORBA objectのプログラミングによる 実現は、仮想メモリがOSの上では存在しないものの物理メモリを使って シミュレートされるのと似ています。
target object CORBAリクエストの発行の中で、そのリクエストのターゲットである CORBA object。
client CORBA objectに1つのリクエストを発行する実体。
server 1つ以上のCORBA objectが存在するアプリケーションプログラム。
request クライアントによって1つのCORBA object上に発行される操作。
object reference 1つのCORBA objectを特定し、設置し、指し示すのに使われるハンドル。
servant 1つ以上のCORBA objectを実装するプログラミング言語の実体。 CORBA objectの本体や実装を用意するを CORBA objectを具現化する(incarnate)と言い、ServantはCORBA objectを 具現化するとものと言われます。
CORBAの特徴は です。

OMG Interface Definition Language (IDL)

IDLはC++やJavaのようなプログラミング言語ではなく、 オブジェクトやアプリケーションプログラムを記述できません。 IDLはあらゆるプログラミング言語に独立に、オブジェクトのインターフェースを 定義します。次に簡単な例題を示します。
interface Employee {
	long number();
};
この例題はnumberと名付けられた操作(operation)を含むEmployeeと名付けられたinterface を定義しています。numberは引数は無く、返り値のタイプがlong(32ビット)です。 Employee interfaceはCORBAのオブジェクトとして実装され、numberはその オブジェクトの番号(number)を返すメソッドとなります。
次の例はEmployeeオブジェクトリファレンスを返すメソッド, lookupを 定義しています。引数は32ビット入力のemp_numberです。
interface EmployeeRegistry {
	Employee lookup( in long emp_number );
};
IDLはまた、1つ以上のinterfaceを継承できます。 次に例を示します。
interface Printer {
	void print();
}

interface ColorPrinter : Printer {
	enum ColorMode { BlackAndWhite, FullColor };
	void set_color( in ColorMode mode );
};
ColorPrinter interfaceはPrinter interfaceを継承しています。クライアント プログラムがPrinterオブジェクトを扱えるように書かれているならば、 ColorPrinterオブジェクトも利用することができます。

Language mappings

ここではIDLがどのように異なったプログラミング言語に翻訳するかが示されます。 例えば、C++言語においてはinterfaceはclassに、operationはそれらのclassの メンバー関数にマップされます。同様に、Java言語においてはinterfaceは public Java interfaceにマップされます。ここではまた、 アプリケーションプログラムがORBをどのように使うか、サーバプログラムが servantをどのように実装するかが示されます。
OMGではすでにC, C++, Smalltalk, COBOL, Ada, Javaのlanguage mapppingを 標準化しました。まだ標準化されていませんが、Eiffel, Modula 3, Perl, Tcl, Objective-C, Pythonのlanguage mapppingが存在します。 CORBAの言語独立性はヘテロジニアスなシステムを構築するキーとなるものです。

Operation invocation and dispatch facilities(static and dynamic)

CORBAアプリケーションプログラムはリクエストを受け取るかリクエストをCORBA オブジェクトに発行するかで動作します。リクエスト発行の2つのアプローチとしては があります。前者では、IDLは言語依存のstubとskeltonを生成します。 stubはクライアント側でリクエスト発行を行います。C++言語では、CORBA stubは classのメンバー関数です。stub関数をサポートするローカルなC++オブジェクトは しばしはproxyと呼ばれます。一方skeltonは、サーバ側の関数です。それは サーバプログラムによって受け取られるリクエストの発行を行ないます。 サーバプログラムは適当なservantにdispatchされます。
さて、後者は、前者がコンパイル時にCORBAリクエストを構築したのと違って、 ランタイムにその構築とdispatchを行ないます。

Object adapters

Object adapterはORBとservantの間の糊のような役目を持ちます。 CORBA2.1以前はBasic Object Adaptor (BOA)だけでした。これはCORBA実装において 互換性がありません。CORBA2.2でBOAを置き換えるために、 Portable Object Adaptor (POA)が作られ、BOAをCORBAから取り去り、 これで互換性が保証されました。

Inter-ORB Protocol (IIOP)

CORBA2.0はGeneral Inter-ORB Protocol (GIOP)を導入ました。 GIOPはORB間の互換性を保証するための転送のシンタックスとメッセージフォーマット を指定する抽象プロトコルです。IIOPはGIOPをTCP/IP上にどのように実装するかを 示したものです。これによりORB間の相互運用が可能になりました。