このドキュメントでは、Java 2 Platform Standard Edition (J2SE) のこのリリースの Java IDL と Java RMI over IIOP テクノロジに関するいくつかの制限について説明します。制限の内容を次に示します。
「J2SE 5.0 での CORBA サポートの公式仕様」では、Java IDL と Java RMI over IIOP テクノロジの実装で準拠する OMG 仕様の概要について説明します。
制限:
Java SDK バージョンの相互運用性 J2SE 1.3.x クライアントが RMI-IIOP を使用して J2SE 1.4 以上で書かれたサーバーと通信しているときに、非チェック例外または RemoteException がサーバーによってスローされると、クライアントがハングアップします。同様に、サーバーが J2SE 1.3.x を使用し、クライアントが J2SE 1.4 以上を使用している場合、クライアントは、マイナーコード 0 の CORBA UNKNOWN 例外を受け取ります。
この問題については、OMG の Java to IDL RTF の Issue 4795http://www.omg.org/issues/java2idl-rtf.html#Issue4795 で現在解決のための作業が行われています。
J2SE 1.4.1 以上の場合: 一方の側が J2SE 1.3.1.05 を使用し、他方の側が J2SE 1.4.1 以上を使用している場合、この種の通信は正しく機能します。
複数のプロファイルを含む IOR IOR が複数のプロファイルを含んでいる場合、最初のプロファイルが呼び出しに使用されます。
持続サーバーでの複数の ORB の禁止 Java SE プラットフォームのこのリリースでは、複数の ORB インスタンスを持続サーバー内に置くことはできません。Java RMI over IIOP API を使用して JNDI の InitialContext() をインスタンス化すると、ORB が作成されます。この設定で複数の ORB が作成されないようにするには、java.naming.ORB システムプロパティーをすでに初期化されている ORB に設定します。
ローカルで最適化されたスタブ ローカルに最適化されたスタブ (idlj 以外の IDL-to-Java コンパイラによって生成されたローカル最適化を含むスタブ) は、J2SE 1.4 以上の ORB で使用することができます。ただし、ローカルに最適化されたスタブを取るとき、ポータブルインタセプタは呼び出されません。この現象は、OMG の IDL から Java 言語へのマッピングに伴う問題が原因で、OMG 問題 4701 として解決のための作業が行なわれています。
J2SE 1.4 以上の rmic コンパイラに -iiop オプションを指定して使用すると、ローカルに最適化されたスタブが生成されます。しかし、J2SE 1.4 以上で javax.rmi.CORBA.Util を実装すると、isLocal に対して常に false を返します。その結果、スタブはローカルの最適化を使用しません。この現象は、OMG の Java から IDL 言語へのマッピングに伴う問題が原因で、OMG 問題 3754 として解決のための作業が行なわれています。
J2SE 1.4 以上の ORB は、クライアントとサーバーが同じ ORB を共有して実行されていることを検出すると、ローカルに最適化されたトランスポートを Java IDL と Java RMI-IIOP の両方に対して使用します。
単一スレッドの POA ポリシー CORBA 2.3.1 の仕様では、ポータブルオブジェクトアダプタ (POA) のスレッドポリシーに対して 2 つの選択肢があります。すなわち、ORB 制御モデルと単一スレッドモデルです。J2SE 5.0 は、単一スレッドモデルをサポートしていません。
RMI-IIOP ストリーム形式バージョン 2 あるクラスのスーパータイプがカスタム整列化されたクラスに発展し、オプションのカスタムデータを書き出すようになった場合、そのクラスを J2SE 1.3.x や J2SE 1.4 以上の間でやり取りすることはできません。その一例として、J2SE 1.4 以上の java.util.Calendar は、J2SE 1.3.x に送り返すことができません。