Java Platform Standard Edition, v1.4は、Java CORBA ORBおよびInternet InterORB Protocol (IIOP)を利用するObject Request Broker (ORB)および2つのCORBAプログラミング・モデルを提供しています。このトピックでは、CORBA技術を作成および配布するこれらのオプションについて説明します。
CORBA技術はJavaプラットフォームに不可欠です。Object Request Broker (ORB)、RMIプログラミング・モデル用API、およびIDLプログラミング・モデル用APIで構成されています。
Javaプラットフォームのこのリリースで実装されている仕様の詳細については、準拠に関するドキュメントを参照してください。
Common Object Request Broker Architecture (CORBA)技術は異機種間コンピューティングのオープン標準です。CORBAは分散オブジェクト・フレームワーク、そのフレームワークをサポートするサービスおよび他言語との相互運用性を提供してJavaプラットフォームを補完します。Javaプラットフォームは、移植可能な生産性の高い実装環境、およびきわめて堅牢なプラットフォームを提供してCORBAを補完します。CORBAを利用するJavaプラットフォームとほかの主要なエンタープライズ技術を結合すれば、Javaプラットフォームは分散技術ソリューションの最高レベルのプラットフォームになります。
CORBA標準は、実績と相互運用性のあるインフラストラクチャをJavaプラットフォームに提供します。IIOP (Internet Inter-ORB Protocol)は、システムを駆動するオブジェクト・コンポーネント間の通信を管理します。Javaプラットフォームは主要なすべてのオペレーティング・システムで動作する、移植性のあるオブジェクト・インフラストラクチャを提供します。CORBAはネットワークの透過性を提供し、Javaは実装の透過性を提供します。
Object Request Broker (ORB)は、Java Platform Standard Editionのバージョン1.3以降に搭載されています。ORBは、IIOP通信を使った分散コンピューティングに使用できるランタイム・コンポーネントです。
注: 異なる言語で書かれたORB間での通信が可能なはずなのは本当ですが、Java ORBとほかのベンダーのORBとの相互運用性はまだテストしていません。
Object Management Group (OMG)は、CORBAの仕様を策定し発行している業界団体です。ベンダーが仕様を実装し、Object Request Brokers (ORB)として知られる製品を作成します。バージョン1.2以降のJava Platform Standard EditionにORBが搭載され、Java Platform Standard Editionを配備する場合に利用できるようになったのは、開発者にとって明るいニュースです。詳細は、ORBクラスを参照してください。
Java CORBA ORBはRMIプログラミング・モデルとIDLプログラミング・モデルの両方をサポートしています。どちらも、ワイヤーレベルの通信プロトコルとしてIIOPを使用できます。
1997年にリモート・メソッド呼び出し(RMI)がJDK 1.1に導入されました。当初、RMIは遠隔手続き呼び出し(RPC)から自然に派生したものという位置づけで、異なる仮想マシンのJavaオブジェクト間、さらには物理的に異なるマシンのJavaオブジェクト間の呼出しを正しく実行するためのものでした。
1998年にJDK 1.2が登場し、CORBAとの相互運用性と統合性を持つJava APIであるJava IDLが導入されました。Java IDLにはIIOPをサポートするJavaベースのORBと、IDLとJava間のコンパイラであるidltojavaが搭載され、クライアント・サイドのスタブとサーバー・サイドのコード・スケルトンを生成できるようになりました。ORBは、RMI over IIOPプログラミング・モデルと、Java IDLプログラミング・モデルを両方ともサポートしています。
1999年に、Javaプラットフォームの標準拡張機能としてRMI over IIOPがJDK 1.1.6および1.2に導入されました。現在では、RMI over IIOPはJ2SEバージョン1.3以降に組み込まれています。そのため、オプションとしてのダウンロードは終了していますが、アーカイブから入手することもできます。
OMGはIIOP仕様を最終的に変更し、RMIのJDK 1.1機能の大半がサポートされるようになりました。RMI over IIOPは、標準拡張機能としてJDK 1.2に導入されました。これによって、Javaプログラミング言語で記述されたリモート・オブジェクトに対し、IIOPを使用して任意の言語からアクセスできるようになりました。
J2SE v1.3では、100% Pure JavaのIDLとJava間のコンパイラであるidljが新たに導入され、IDLのabstractインタフェースと値の型もサポートされました。v1.3では、RMI over IIOPもJDKに組み込まれました。
2001年に導入された現在のバージョンJ2SE v1.4には、Portable Object Adapter、Portable Interceptors、Interoperable Naming Service、GIOP 1.2および動的Anyのサポートが組み込まれています。J2SE v1.4には、Object Request Broker Daemon (ORBD)も組み込まれています。ORBDは、クライアントからCORBA環境のサーバーにある持続オブジェクトを透過的に検索して呼び出すために使用します。また、servertoolも組み込まれています。このツールで提供されるコマンド行インタフェースを使用して、アプリケーション・プログラマは持続サーバーの登録、登録解除、起動、シャットダウンを行うことができます。J2SE v1.4の新機能の詳細は、「J2SE 1.3と1.4間でのCORBA機能の変更点」を参照してください。
異なる言語間、異なるベンダー間の相互運用性はInternet InterORB Protocol (IIOP)によって実現されます。IIOPは、IDLかJava RMIのいずれかで書かれた分散アプリケーション用の伝送プロトコルです。
IDLプログラミング・モデルを使う場合は、インタフェースがすべてです。これは、リモート・プロセスから呼び出ことができるエントリ・ポイント(呼び出された手続きが受け入れる引数の型など)や、返された情報の値や出力パラメータなどを定義します。プログラマはIDLを使って、通信プロセス間を移動するエントリ・ポイントやデータ型を標準言語であるかのように扱うことができます。
CORBAは言語から中立のシステムで、引数の値や戻り値は使用する実装言語で表すことができるものに制限されます。CORBAでは、オブジェクトの方向は参照用に渡すことができるオブジェクトに制限されるか、または全体のフレームワークであらかじめ定義されています。オブジェクト・コード自体をマシン間で渡すことができません。渡す型も戻す型もインタフェースで宣言されている必要があります。
RMIでは、インタフェースと実装は同じ言語で記述されるため、両者をマッピングする必要はありません。言語レベルのオブジェクト(コード)をあるプロセスから次のプロセスに渡すことができます。値は、宣言された型ではなく実際の型で返されます。または、インタフェースをコンパイルしてIIOPスタブとスケルトンを生成すると、ほかのCORBA準拠の言語からオブジェクトにアクセスできるようになります。
RMIプログラミング・モデルとは
RMIプログラミング・モデルは、rmi APIを使用する分散コンピューティングのための一般的なオブジェクト・モデルです。Java Remote Method Protocol (JRMP)を使ってJavaプログラミング言語だけで作業することも、Internet InterORB Protocol (IIOP)を使ってほかのCORBA対応プログラミング言語で作業することもできます。
RMIプログラミング・モデルは、Java Platform Standard Editionに組み込まれており、Object Request Broker (ORB)とrmicコンパイラで構成されます。rmicコンパイラは、JRMPプロトコルまたはIIOPプロトコルを使用するリモート・オブジェクトのスタブ、スケルトン、およびTieを生成するために使用されます。rmicコンパイラでOMG IDLを生成することもできます。rmicの使い方については、「rmic - Java RMIスタブ・コンパイラ」を参照してください。
「RMI over IIOPプログラマーズ・ガイド」では、RMIをJRMPで使用する場合とIIOPで使用する場合の違いについて解説しています。
どのような場合にIDLプログラミング・モデルではなくRMIプログラミング・モデルを使用するか
RMIプログラミング・モデルでは、開発者はJavaプログラミング言語のみを使うことができるので分散型アプリケーションの開発速度が向上します。RMIプログラミング・モデルを使ってJavaテクノロジベースの分散型アプリケーションを作成する場合、学ぶべき分離されたインタフェース定義言語(IDL)やマッピングというものはありません。RMIプログラミング・モデルには柔軟性があり、開発者はアプリケーション・コンポーネント間で直列化可能Javaオブジェクト(Objects By Value)を渡すことができます。IDLプログラミング・モデルと同様に、RMIプログラミング・モデルは、多数のベンダーやユーザーの参加するJava Community Process (JCP)で定義されたオープン標準に基づいています。IDLプログラミング・モデルと同様に、RMIプログラミング・モデルでも、通信プロトコルとしてInternet Inter-ORB Protocol (IIOP)を使用できます。IIOPにより、C++、Smalltalk、その他のCORBA対応言語で記述されたアプリケーション・コンポーネントがJavaプラットフォームで実行するコンポーネントと通信できるため、従来のアプリケーションとJavaプラットフォームの統合が容易になります。
RMIプログラミング・モデルを使うと、開発者はリモート・インタフェースをJavaプログラミング言語で記述し、JavaテクノロジとJava RMI APIを使うだけでインタフェースを実装できます。このようなインタフェースはOMGマッピングがサポートするほかの言語や、ベンダーが提供するその言語のORBで実装することができます。またクライアントは、リモートのJava技術ベースのインタフェースから派生したIDLを使ってほかの言語で書くこともできます。
RMIプログラミング・モデルの詳細について
IDLプログラミング・モデルとは
Java IDLとして知られるIDLプログラミング・モデルは、Java CORBA ORBとidljコンパイラの両方で構成されており、Java CORBA ORBを使用しているJavaバインディングにOMG IDLをマッピングします。また、一連のAPIも含まれており、これらはAPI索引のパッケージ・セクションからorg.omgという接頭辞を選択して検索できます。
Java IDLは、JavaプラットフォームにCORBA (Common Object Request Broker Architecture)機能を追加することにより、標準規格に準拠した相互運用性および接続機能を提供します。Java IDLを使用すると、Web対応の分散型Javaアプリケーションから、Object Management Groupによる業界標準のIDL (Object Management Group Interface Definition Language)やIIOP (Internet Inter-ORB Protocol)経由で、リモート・ネットワーク・サービス上のオペレーションを透過的に呼び出すことができます。ランタイム・コンポーネントには、IIOP通信を使った分散コンピューティング用のJava ORBが含まれています。
IDLプログラミング・モデルを使用するには、Object Management Group (OMG)のInterface Definition Language (IDL)を使ってリモート・インタフェースを定義したあと、idljコンパイラを使ってこれらのインタフェースをコンパイルします。インタフェース定義ファイルでidljコンパイラを実行すると、Javaバージョンのインタフェースが作成され、同時にスタブとスケルトンのクラス・コード・ファイルも生成されてアプリケーションをORBに接続できるようになります。
Java IDLはJava Platform Standard Editionの一部です。Java IDLを使用してアプリケーションを開発するには、Java IDLコンパイラidljを使用します(Solaris、Linux、Mac OS XまたはWindows)。idljはバージョン1.3以降のJ2SEインストール時に毎回実装されます。
どのような場合にRMIプログラミング・モデルではなくIDLプログラミング・モデルを使用するか
OMG IDL (Interface Definition Language)は、分散型アプリケーションでプログラミング言語に依存しないオペレーション・インタフェースを記述するために設計された、純粋に定義用の言語です。OMGではIDLから別の言語へのマッピングを指定しています。これらの言語にはJava、C、C++、Lisp、Python、Smalltalk、COBOLおよびAdaがあります。OMG IDLの構文をマッピングすると、選んだプログラミング言語の対応する構文に翻訳されます。Java IDLはCORBA仕様の実装です。たとえば、Java IDLコンパイラidljを使用すると、IDLインタフェースをJavaにマッピングしてJavaによるクライアント・クラスを実装できます。次にIDL-to-C++コンパイラとC++ ORBを使用して同じIDLをC++にマッピングし、その言語でサーバーを実装すると、JavaクライアントとC++サーバーは、ORBを介して相互にやり取りできます。
注: 異なる言語で書かれたORB間での通信が可能なはずなのは本当ですが、Java ORBとほかのベンダーのORBとの相互運用性はまだテストしていません。
IDLプログラミング・モデルの詳細について
分散型CORBAアプリケーションの作成にはいくつかの定義方法があります。次に一般的な方法を示します。
Java IDLおよびRMI over IIOPの他に、J2EEにはEnterprise JavaBeans技術(EJB)も組み込まれています。
Enterprise JavaBeansは、Java Platform, Enterprise Editionに含まれている機能です。EJBのサーバー側コンポーネント・モデルを使うと、トランザクションに適した、拡張性と移植性の高いミドルウェア・コンポーネントを簡単に開発できます。EJBサーバーを使うことで、トランザクション、セキュリティ、データベース接続といったミドルウェア・サービスが自動的にサポートされるため、ミドルウェア開発の複雑さが軽減されます。
EJBでは、分散オブジェクト・モデルとしてRMI over IIOPを使用し、分散トランザクション・モデルとしてJava Transaction Service (JTS)を使用します。異機種サーバー環境でのEJB相互運用性のためにRMI over IIOPプロトコルを使用してEnterprise JavaBeansを実装した場合は、EJBアーキテクチャからCORBAへの標準マッピングにより、次のような相互運用が可能になります。