CORBA 技術と Java™ Platform Standard Edition

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 プラットフォームのこのリリースで実装されている仕様の詳細については、準拠に関するドキュメントを参照してください。

Java SE での CORBA の利点の活用

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

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 を使用できます。

CORBA プログラミングモデルの導入

CORBA プログラミングモデルの歴史

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 機能の変更点」を参照してください。

CORBA プログラミングモデルの比較

異なる言語間、異なるベンダー間の相互運用性は Internet InterORB Protocol (IIOP) によって実現されます。IIOP は、IDL か Java RMI のいずれかで書かれた分散アプリケーション用の伝送プロトコルです。

IDL プログラミングモデルを使う場合は、インタフェースがすべてです。IDL では、リモートプロセスから呼び出ことができるエントリポイント (呼び出された手続きが受け入れる引数の型など) や、返された情報の値や出力パラメータなどを定義します。プログラマは IDL を使って、通信プロセス間を移動するエントリポイントやデータ型を標準言語であるかのように扱うことができます。

CORBA は言語から中立のシステムで、引数の値や戻り値は使用する実装言語で表すことができるものに制限されます。CORBA では、オブジェクトの方向は参照用に渡すことができるオブジェクトに制限されるか、または全体のフレームワークであらかじめ定義されています。オブジェクトコード自体をマシン間で渡すことができません。渡す型も戻す型もインタフェースで宣言されている必要があります。

RMI では、インタフェースと実装は同じ言語で記述されるため、両者をマッピングする必要はありません。言語レベルのオブジェクト (コード) をあるプロセスから次のプロセスに渡すことができます。値は、宣言された型ではなく実際の型で返されます。または、インタフェースをコンパイルして IIOP スタブとスケルトンを生成すると、ほかの CORBA 準拠の言語からオブジェクトにアクセスできるようになります。

RMI プログラミングモデル

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 プログラミングモデル

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, v1.2 以降のリリースの一部です。Java IDL を使ってアプリケーションを開発するには、Java™ IDL コンパイラ 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 Compiler、idlj を使うと、IDL インタフェースを Java にマッピングして Java によるクライアントクラスを実装できます。次に IDL-to-C++ コンパイラと C++ ORB を使って同じ IDL を C++ にマッピングし、その言語でサーバーを実装すると、Java クライアントと C++ サーバーは、ORB を介して相互にやりとりできます。

注: 異なる言語で書かれた ORB 間での通信が可能なはずなのは本当ですが、Java ORB とほかのベンダーの ORB との相互運用性はまだテストしていません。

IDL プログラミングモデルの詳細について

IDL プログラミングモデルと RMI プログラミングモデルの比較

分散型 CORBA アプリケーションの作成にはいくつかの定義方法があります。次に一般的な方法を示します。

CORBA および J2EE について

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 への標準マッピングにより、次のような相互運用が可能になります。


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.