CORBA(コモンオブジェクトリクエストブローカーアーキテクチャ)は、
Object Management Group (OMG) によって定義された、分散オブジェクト技術のための標準規格です。異なるコンピュータ上で動作する、様々な
プログラミング言語で書かれた
ソフトウェアコンポーネントが、ネットワークを介して相互に連携することを可能にします。
 CORBA の概要
CORBA の基本的な考え方は、プログラムの機能や呼び出し方を
カプセル化し、それを「オブジェクト」として扱うことです。この
カプセル化されたオブジェクトは、ネットワークを通じて他のプログラムや CORBA オブジェクトから呼び出すことができます。
CORBA は、インターフェース記述言語 (IDL) を使用してオブジェクトの外部インターフェースを定義します。そして、IDL で記述されたインターフェースを、特定の
プログラミング言語 (
C++ や 
Java など) に対応させる「マッピング」を行います。標準的なマッピングが用意されている言語には、
Ada、C、
C++、LISP、Smalltalk、
Java、
COBOL、
PL/I|PL_I、
Python などがあります。また、
Perl、PHP、
Ruby、Visual Basic、
Tcl、
Delphi など、標準には含まれていない言語についても、
Object Request Broker (ORB) によってマッピングが実装されている場合があります。
上の図は、CORBA の基盤で生成されたコードがどのように利用されるかを示した簡略図です。通常、サーバー側には Portable Object 
Adapter (POA) が存在し、クライアントからの呼び出しをローカルなサーバーントに渡したり、負荷分散のために他のサーバーに転送したりします。また、クライアント側、サーバー側の両方に、インターセプターと呼ばれる機構が設けられることが一般的です。
CORBA は、言語やプラットフォームに依存しない遠隔手続き呼び出し (RPC) の仕様を提供するだけでなく、
トランザクションやセキュリティなどの、分散システムに必要な共通サービスも定義しています。
 主な機能と特徴
 Objects by Value (OBV)
CORBA と 
RMI-IIOP は、リモートオブジェクトとは別に、OBV (Objects by Value) という概念を定義しています。OBV は、メソッドのコードがデフォルトではローカルで実行されるオブジェクトです。OBV をリモートから受信する場合、必要なコードが予め両者に備わっているか、送信側から動的にダウンロードする必要があります。OBV のレコードには、コードをダウンロードするための URL リストである Code Base が含まれています。OBV は、リモートメソッドを持つことも可能です。
OBV は、転送される際に、OBV 自体や構成リスト、木構造、グラフなどのフィールドを添付して転送することができます。また、OBV にはクラス階層があり、多重継承や抽象クラスの利用も可能です。
 CORBA Component Model (CCM)
CORBA Component Model (CCM) は、CORBA 3 で導入された CORBA の追加仕様です。CCM は、CORBA コンポーネントのための標準的なアプリケーションフレームワークを記述したもので、「言語に依存しない」
Enterprise JavaBeans (EJB) の拡張版と考えることができます。CCM は、明確に名前付けされたインタフェース「ポート」を通してサービスのやり取りを行う実体を抽象化しています。
CCM では、コンポーネントコンテナというものが存在し、その中に
ソフトウェアコンポーネントが配置されます。コンテナは、内包するコンポーネントに対して、通知、
認証、永続性、
トランザクション管理といった様々なサービスを提供します。これらの分散システムに不可欠なサービスをコンテナ側に移すことで、コンポーネントの複雑さを大幅に軽減することができます。
 ポータブルなインターセプター
ポータブルなインターセプターとは、CORBA や 
RMI-IIOP で使用される、CORBA システムの重要な機能への「フック」です。CORBA の標準では、以下のタイプのインターセプターが定義されています。
   
IOR インターセプター: 現在のサーバーが示すリモートオブジェクトへの新しい参照の作成を調停します。
   
クライアントインターセプター: クライアント側でのリモートメソッドの呼び出しを調停します。オブジェクトのサーバントが同じサーバーに存在する場合は、ローカル呼び出しが調停されます。
   
サーバーインターセプター: サーバー側でのリモートメソッド呼び出しへの応答を調停します。
インターセプターは、送信されるメッセージに情報を追加したり、生成された IOR を添付したりできます。それらの情報は、リモート側の対応するインターセプターで読み取られます。また、インターセプターは例外を送信したり、メッセージを別のターゲットに転送したりすることも可能です。
 General InterORB Protocol (GIOP)
GIOP (General InterORB Protocol) は、
Object Request Broker (ORB) 同士が通信するための抽象プロトコルです。OMG がこのプロトコルの標準を管理しています。
GIOP アーキテクチャには、いくつかの具体的なプロトコルが含まれています。
   
Internet InterORB Protocol (IIOP): CORBA ORB 同士の
通信プロトコルで、
インターネット上で 
GIOP を実装したものです。
GIOP メッセージと TCP/IP の橋渡しを行います。
   
SSL InterORB Protocol (SSLIOP): SSL 上で IIOP を利用します。
暗号化と
認証機能を提供します。
   
HyperText InterORB Protocol (HTIOP): HTTP 上で IIOP を利用します。
プロキシを透過的に迂回するなどの機能があります。
   その他、様々なプロトコルが存在します。
 Data Distribution Service (DDS)
OMG は、関連する標準規格として Data Distribution Service (DDS) を制定しています。DDS は出版-購読 (publish-subscribe) 型のデータ配信モデルであり、CORBA のリモート呼び出しオブジェクトモデルとは対照的です。
 VMCID (Vendor Minor Codeset ID)
標準 CORBA では、例外のサブカテゴリーを示すためにマイナーコードを定義しています。マイナー例外コードは unsigned long 型で、上位 20 ビットが Vendor Minor Codeset ID (VMCID)、下位 12 ビットがマイナーコード本体です。標準例外のマイナーコードは、OMG が予約した VMCID を持つ unsigned long 型の定数 `CORBA::OMGVMCID` として定義されています。マイナーコードの設定はベンダーに依存します。VMCID の割り当て要求は、OMG に電子メールで送信します。VMCID のうち、0 と 0xfffff は実験用に予約されており、`OMGVMCID` と 1 から 0xf までの VMCID は OMG が予約しています。
 CorbaLoc
CorbaLoc は、Corba Location の略で、CORBA オブジェクトへの参照を文字列で表現したものです。見た目は URL によく似ています。CORBA 製品は、OMG が定義した `corbaloc:` と `corbaname:` の 2 つの URL をサポートしています。これらの目的は、IOR の場所を人間が読んで編集できる方法で指定できるようにすることです。
例えば、`corbaloc::160.45.110.41:38693/StandardNS/NameServer-POA/_root` のような形式で記述されます。また、一部の CORBA 製品では、`http:`、`ftp:`、`file:` などの URL をサポートしているものもあります。これらの URL は、文字列化された IOR をダウンロードする方法の詳細を提供するために使用されます。
 CORBA の実装例
以下は、CORBA の実装例の一部です。
   
Oracle Tuxedo - Oracle 社の商用 ORB (
Java、
C++ 対応)
   Borland Enterprise Server, VisiBroker - 
ボーランド社の商用 ORB (
Java、
C++ 対応)
   
GNU Classpath - 
Java 用の自由ソフトウェア実装 (GPL+linking exception)
   CORBA for PHP - PHP5 用の CORBA 実装
   Combat - 
Tcl 用の ORB。
C++ ORB の 
Tcl 層。
   eORB - 商用 ORB (
Ada、C、
C++ 対応)
   ILU - 
パロアルト研究所のオープンソフトウェアオブジェクトインタフェースシステム
   IIOP.NET - Microsoft .NET 用の自由ソフトウェア (LGPL) ORB
   
Interstage - 
富士通の商用 ORB
   JacORB - 
Java で実装された自由ソフトウェア (LGPL) ORB
   J-Integra Espresso - Intrinsyc J-Integra 社の商用 Microsoft .NET ORB
   MICO - 
C++ で実装された自由ソフトウェア (LGPL) ORB
   omniORB - 自由ソフトウェア (LGPL) ORB (
C++、
Python 対応)
   OpenORB - 自由ソフトウェア (BSD) ORB (
Java 対応)
   Orbacus - IONA Technologies 社の商用 
C++ ORB
   ORBexpress - Objective Interface Systems 社の商用 ORB (
Ada、
Java、
C++ 対応。通常版とリアルタイム版あり)
   ORBit2 - 自由ソフトウェア (LGPL) ORB (C、
C++、
Python 対応)
   Orbix - IONA Technologies 社の商用 ORB
   ORBLink - 商用 ORB (Allegro Common LISP 用)
   
Perl ORB - 
Perl で実装されたオープンソース (
Artistic License) ORB
   PolyORB - 
Ada で実装された自由ソフトウェア (MGPL) ORB
   SANKHYA Varadhi - 商用 ORB (
C++ 対応)
   TAO - オープンソース ORB (
C++ 対応)
   TPBroker - VisiBroker の
日立製作所による改造版
   Universe - PHP4 用の CORBA 実装
   VBOrb - 自由ソフトウェア (LGPL) ORB (Visual Basic 用)
   Xtradyne I-DBC - Xtradyne 社の商用 CORBA セキュリティ実装
   Systemν[nju:] - 日本ユニシス社の商用 分散
トランザクション対応 ORB
 OMG の商標について
CORBA、IIOP、OMG は 
Object Management Group の登録商標であり、利用には注意が必要です。
GIOP は登録商標ではありません。したがって、アプリケーションについて「
GIOP に基づいたアーキテクチャである」と表現するのが適切な場合があります。なお、CORBA の仕様書自体に関しては、それに基づいた実装を自由に行うことは、CORBA という登録商標を使用しない限り、許されています。
 関連項目
   遠隔手続き呼出し (RPC)
   
ソフトウェアコンポーネント
   サービス指向アーキテクチャ
   Java Remote Method Invocation
   Web サービス
   
分散コンピューティング
   Jakarta EE
   XML-RPC
   DCOM
   
SOAP (プロトコル)
   Bonobo
 参考文献
   利用可能な CORBA 実装の比較
   The official CORBA standard from the OMG group (direct download, .pdf, about 10 Mb).
   Robert Orfali: The Essential Client/Server Survival Guide, John Wiley & Sons, ISBN 0-471-15325-7
   Robert Orfali, Dan Harkey, Jeri Edwards: The Essential Distributed Objects Survival Guide, John Wiley & Sons, ISBN 0-471-12993-3
   Robert Orfali, Dan Harkey: Client/Server Programming with JAVA and CORBA, John Wiley & Sons, ISBN 0-471-24578-X
   Dirk Slama, Jason Garbis, Perry Russell: Enterprise CORBA, Prentice Hall, ISBN 0-13-083963-9
   Michi Henning, Steve Vinoski: Advanced CORBA Programming with 
C++, Addison-Wesley, ISBN 0-201-37927-9
   Axel Korthaus, Martin Schader, Markus Aleksy: Implementing Distributed Systems with 
Java and CORBA, Springer, ISBN 3-540-24173-6
   Fintan Bolton: Pure Corba, Sams Publishing, ISBN 0-672-31812-1
   Jon Siegel: CORBA 3 - Fundamentals and Programming, John Wiley & Sons, ISBN 0-471-29518-3
   Ron Zahavi: Enterprise Application Integration with CORBA: Component and Web-Based Solutions, John Wiley & Sons, ISBN 0-471-32720-4
   Bret Hartman, Konstantin Beznosov, Steve Vinoski, Donald Flinn: Enterprise Security with EJB and CORBA, John Wiley & Sons, ISBN 0-471-40131-5
   Thomas J. Mowbray, Ron Zahavi: The Essential Corba: System Integration Using Distributed Objects, John Wiley & Sons, ISBN 0-471-10611-9
  Michael Rosen, David Curtis: Integrating CORBA and COM Applications, John Wiley & Sons, ISBN 0-471-19827-7
   Gerald Brose, Andreas Vogel, Keith Duddy: 
Java Programming with CORBA, John Wiley & Sons, ISBN 0-471-37681-7
  John Schettino, Robin S. Hohman, Liz O'Hara: CORBA For Dummies, Hungry Minds, ISBN 0-7645-0308-1
  Jeremy L. Rosenberger: Teach Yourself CORBA in 14 Days, Sams Publishing, ISBN 0-672-31208-5
  Jon Siegel: Quick CORBA 3, John Wiley & Sons, ISBN 0-471-38935-8
  Thomas J. Mowbray, Raphael C. Malveau: CORBA Design Patterns, John Wiley & Sons, ISBN 0-471-15882-8
   Robert Orfali, Dan Harkey, Jeri Edwards: Instant CORBA, John Wiley & Sons, ISBN 0-471-18333-4
   Paul Harmon, William Morrissey: The Object Technology Casebook, John Wiley & Sons, ISBN 0-471-14717-6
 外部リンク
   Information Board
   Object Management Group
   Description by Christopher B. Browne
   CORBA support for autoconf
   OrbZone forum
   SOAP Bridge
   いまなぜCORBAなの? アットマーク・アイティ
   CORBA テックスコア
*   
CORBA Component Model 入門 永田博靖(オージス総研)