JavaTM IDL/JavaTM RMI over IIOP の制限 |
このドキュメントでは、JavaTM 2 Platform Standard Edition (J2SETM) の今回のリリースに含まれている、JavaTM IDL および JavaTM RMI over IIOP テクノロジに関するいくつかの制限について説明します。制限の内容を以下に示します。
「J2SE 5.0 での CORBA サポートの公式仕様」では、Java IDL および Java RMI over IIOP テクノロジの実装の、OMG 仕様に対する準拠の概要について説明しています。
制限:
J2SETM 1.3.x クライアントが RMI-IIOP を使用して J2SE 1.4 以上で書かれたサーバと通信しているときに、チェックされない例外または RemoteException がサーバによってスローされると、クライアントがハングアップします。同様に、サーバが J2SE 1.3.x を使用し、クライアントが J2SE 1.4 以上を使用している場合、クライアントは、マイナーコード 0 の CORBA UNKNOWN 例外を受け取ります。この問題については、OMG の Java to IDL RTF の 問題 4795 (http://www.omg.org/issues/java2idl-rtf.html#Issue4795) で、現在解決のための作業が行われています。
J2SE 1.4.1 以上の場合: 一方の側が J2SE 1.3.1.05 を使用し、他方の側が J2SE 1.4.1 以上を使用している場合、この種の通信は正しく機能します。
IOR が複数のプロファイルを含んでいる場合、最初のプロファイルが呼び出しに使用されます。
J2SE プラットフォームのこのリリースでは、複数の 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 の両方に対して使用します。
CORBA 2.3.1 の仕様では、ポータブルオブジェクトアダプタ (POA) のスレッドポリシーに対して 2 つの選択肢があります。すなわち、ORB 制御モデルと単一スレッドモデルです。J2SE 5.0 は、単一スレッドモデルをサポートしていません。
あるクラスのスーパータイプがカスタム整列化されたクラスに発展し、オプションのカスタムデータを書き出すようになった場合、そのクラスを J2SE 1.3.x や J2SE 1.4 以上の間でやり取りすることはできません。その一例として、J2SE 1.4 以上の java.util.Calendar は、J2SE 1.3.x に送り返すことができません。