Common Object Request Broker Architecture

Common Object Request Broker Architecture（コモン オブジェクト リクエスト ブローカー アーキテクチャー、略称CORBA（コルバ））とは、Object Management Group (OMG) が定義した標準規格であり、様々なコンピュータ上で様々なプログラミング言語で書かれたソフトウェアコンポーネントの相互利用を可能にする（分散オブジェクト技術）ものである。

概要 
CORBA では、プログラムコードをその機能や呼び出し方の情報と共に一種のカプセル化を行う。このカプセル化されたオブジェクトは、コンピュータネットワークを経由して他のプログラム（あるいは CORBA オブジェクト）から呼び出すことができる。

CORBA はインタフェース記述言語 (IDL) を使ってこのようなオブジェクトの外部インタフェースを記述する。そして、IDLから他の特定の実装言語（C++やJava）への「マッピング」を行う。CORBAとしてマッピングが標準的に用意されているのは、Ada、C、C++、LISP、Smalltalk、Java、COBOL、PL/I、Python である。標準に組み込まれていないが、Perl、PHP、Ruby、Visual Basic、Tcl、Delphi へのマッピングを実装したObject Request Brokerが存在する。

下図はCORBA基盤で生成されたコードが使われる様子を示したものである。

この図は非常に単純化してある。通常、サーバ側には Portable Object Adapter があり、呼び出しをローカルなサーバントに渡すか（負荷分散のために）他のサーバに転送する。また、サーバ側にもクライアント側にも後述するインターセプターが存在することが多い。

ユーザーに対して言語やプラットフォームに依存しない遠隔手続き呼出し (RPC) 仕様を提供する以外に、CORBAはトランザクションやセキュリティに必要な一般的サービスを定義している。

主な機能・特徴

Objects by Value (OBV) 
リモートオブジェクトとは別に、CORBAとRMI-IIOPはOBVの概念を定義している。オブジェクト内のメソッドのコードはデフォルトではローカルに実行される。OBVをリモートから受信する場合、必要なコードが両者に事前に備えられているか、送信側から動的にダウンロードしなければならない。このため、コードをダウンロードできるURL群の（空白で区切った）リストである Code Base が OBV を定義するレコードに含まれている。OBV はリモートメソッドを持つこともできる。

OBV は転送される際に付属して転送されるフィールドを持つことがある。そのフィールドにはOBV自体、構成リスト、木構造やグラフなどが含まれる。OBVにはクラス階層があり、多重継承や抽象クラスもある。

CORBA Component Model (CCM) 
CORBA Component Model (CCM) は CORBA 仕様の追加要素である。 CORBA 3 で導入された。これはCORBAコンポーネントの標準アプリケーションフレームワークを記述したものである。それはちょうど「言語に依存しない」Enterprise JavaBeans(EJB)の拡張版である。「ポート」と呼ばれる明確な名前付きのインタフェースを通してサービスのやりとりができる実体を抽象化したものである。

CCM にはコンポーネントコンテナがあり、その中にソフトウェアコンポーネントが置かれる。コンテナは内包するコンポーネントに各種サービスを提供する。例えば、通知、認証、永続性、トランザクション管理などがある。これらは分散システムには必須のサービスであり、その実装をソフトウェアコンポーネントからコンテナに移すことによってコンポーネントの複雑さは劇的に軽減される。

ポータブルなインターセプター 
ポータブルなインターセプターとは、CORBAやRMI-IIOPが使用するCORBAシステムの最重要機能の「フック」である。CORBA標準では以下のようなタイプのインターセプターを定義している:
 IORインターセプターは、カレントサーバが示すリモートオブジェクトへの新たな参照の作成を調停する。
 クライアントインターセプターは、クライアント側でリモートメソッドの呼び出しの調停を行う。そのオブジェクトのサーバントが同じサーバに存在すれば、そのメソッドが呼び出されるようにローカル呼び出しが調停される。
 サーバインターセプターは、サーバ側のリモートメソッド呼び出しへの対応を調停する。

インターセプターは、送信されるメッセージに何らかの情報や生成したIORを付加することができる。それらの情報はリモート側の対応するインターセプターが読み取る。インターセプターは例外を送ったり、メッセージを他のターゲットに転送したりといったことも行う。

General InterORB Protocol (GIOP) 
GIOPとは、Object Request Broker(ORB)同士が通信する際の抽象プロトコルである。このプロトコルに関する標準はObject Management Group(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) 
Object Management Group (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 として定義される。従って、マイナー例外コードは OMGVMCID と OR された形で ex_body 構造体に格納されている。

マイナーコードの設定はベンダー依存である。VMCID の割り当て要求は、tagrequest@omg.org に電子メールを送ればよい。VMCID のうち、0 と 0xfffff は実験用の予約されている。また、OMGVMCID と 1 から 0xf までの VMCID は OMG が予約している。

CorbaLoc 
CorbaLoc とは、Corba Location の略であり、CORBA オブジェクトへの参照を文字列で表したものである。その見た目はURLによく似ている。CORBA製品には OMGが定義した二種類のURL、"corbaloc:" と "corbaname:" をサポートしている。その目的は、IORを持つ場所を指定するに当たって、人間がそれを読んで編集できる方法を提供することである。

CobaLoc の例を以下に示す:

 corbaloc::160.45.110.41:38693/StandardNS/NameServer-POA/_root

CORBA製品はオプションとして "http:"、"ftp:"、"file:" をサポートするものもある。これらは、文字列化されたIORのダウンロード方法の詳細を提供するために存在する（または、再帰的に他のURLをダウンロードすることによって文字列化されたIORが得られるようにしている）。

CORBA 実装例 
 Oracle Tuxedo - CORBA 2.5 対応の商用 ORB （Java、C++用）オラクル
 Borland Enterprise Server, VisiBroker - CORBA 2.6 対応の商用 ORB （Java、C++用） ボーランド
 GNU Classpath - Java用のフリーソフトウェア実装を含む(GPL+linking exception, 新たに書かれた org.omg パッケージを含む)
 CORBA for PHP - PHP5
 Combat - Tcl用 ORB。C++ ORB の Tcl 層。
 e*ORB - 商用 ORB （Ada、C、C++用）
 ILU - パロアルト研究所のオープン・ソフトウェア・オブジェクト・インタフェース・システム
 IIOP.NET - Microsoft .NET 用フリーソフトウェア(LGPL) ORB
 Interstage - 商用、富士通
 JacORB - Javaで実装されたフリーソフトウェア (LGPL) ORB
 J-Integra Espresso - 商用 Microsoft .NET ORB、by Intrinsyc J-Integra
 MICO - C++で実装されたフリーソフトウェア (LGPL) ORB
 omniORB - フリーソフトウェア (LGPL) ORB （C++、Python用）
 OpenORB - フリーソフトウェア (BSD) ORB （Java用）
 Orbacus - 商用 C++ ORB、by IONA Technologies
 ORBexpress - 商用 ORB（Ada、Java、C++用。通常版とリアルタイム版）by Objective Interface Systems
 ORBit2 - フリーソフトウェア (LGPL) ORB （C、C++、Python用）
 Orbix - 商用 ORB by IONA Technologies
 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
 VBOrb - フリーソフトウェア (LGPL) ORB （Visual Basic用）
 Xtradyne I-DBC - 商用 CORBA セキュリティ実装、by Xtradyne
 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 入門 永田博靖（オージス総研）

オブジェクト指向
ソフトウェアアーキテクチャ
通信プロトコル
長大な項目名