Interstage Application Server J2EE ユーザーズガイド |
目次
索引
![]() ![]() |
第7部 ツール編 | > 第48章 J2EE Deployment ツール | > 48.18 IDL変換規則に関する補足資料 |
JavaからIDLに変換する際の変換規則を以下に示します。変換規則の詳細はhttp://java.sun.com/products/rmi-iiopを参照してください。
なお、【備考】に○がついているJavaの記述方法を使用する場合には注意が必要です。JavaクラスからIDLに変換する際に名前が重複し、配備時にエラーとなることがあります。
項 |
Java |
IDL |
備考 |
1 |
パッケージ(package) (例)a.b.c |
モジュール(module) (例)::a::b::c |
- |
2 |
IDLキーワード (例)oneway |
先頭に"_"を付加します。 (例)_oneway |
○ |
3 |
先頭が"_" (例)_fred |
先頭に"J"を付加します。 (例)J_fred |
○ |
4 |
"$"やユニコード文字などのIDLで定義できない文字 (例) a$b x\u03bCy |
"U"とUnicode値を表す4桁の16進数(大文字)で置換します。 (例) aU0024b xU03BCy |
○ |
5 |
内部クラス (例) クラスBertの内部クラスFred |
外部クラス名と内部クラス名を"__"で連結します。 (例) Bert__Fred |
○ |
6 |
オーバーロードされたメソッド (例) void hello(); void hello( int x, a.b.c y, int z); |
以下の手順で変換します。 (1)メソッド名に2つの"_"を付加する。 (2)IDL変換後の型を2つの"_"で連結する。 (3)スペースを"_"で置換する。 (例) void hello__(); void hello__long_a_b_c__long( in long x, in ::a::b::c y, in long z); ◆継承元と継承先で同名のメソッドが存在した場合(オーバーライドを含む)は継承先のメソッド名を変換します。 |
○ |
7 |
大文字/小文字だけが異なる識別子 (例) jack Jack jAcK |
以下の手順で変換します。 (1)末尾に"_"を付加する。 (2)大文字の位置を示す10進インデックスのリストを"_"で連結する。(インデックスは0ベース) (例) jack_ Jack_0 jAcK_1_3 |
○ |
8 |
メソッド名が他の識別子(定数、フィールド)の名前と重複した場合 (例) 定数"foo"とメソッド"foo" |
定数、フィールドの名前の末尾に"_"を付加し、メソッド名は変換しません。 (例) 定数"foo_"とメソッド"foo" |
○ |
9 |
変換後に名前の重なる場合 (例) void foo(); void foo(int x); void foo__long(); |
エラーとして扱います。 |
- |
10 |
void |
void |
- |
11 |
boolean |
boolean |
- |
12 |
char |
char |
- |
13 |
byte |
byte |
- |
14 |
short |
short |
- |
15 |
int |
long |
- |
16 |
long |
long long |
- |
17 |
float |
float |
- |
18 |
double |
double |
- |
19 |
リモートインタフェース
|
インタフェース(interface) |
- |
20 |
java.rmi.Remoteインタフェース |
::java::rmi::Remote //IDL module java { module rmi { typedef Object Remote; }; }; |
- |
21 |
リモートインタフェースの継承関係 |
IDLの継承関係 |
- |
22 |
以下のどれかの条件に当てはまるリモートインタフェースのメソッド
|
attribute 以下のように変換します。番号(1、2、...)は左欄の番号に対応します。
attribute名の取得手順を以下に示します。 (1) メソッド名先頭の"get"、"is"、または"set"に続く文字を展開する。 (2) 最初の文字を小文字に変換する。ただし、1文字目と2文字目の両方が大文字の場合は変換しない。 (3) 他の識別子名と名前が重複した場合は語尾に"__"を付加する。 |
○ |
23 |
リモートインタフェースの項目22以外のメソッド |
以下の手順で変換します。 (1)項目6、7の変換規則を適用する。 (2)引数を対応するIDL型のinパラメタに変換する。 (3)例外は対応するIDLの例外に変換する。また、java.rmi.RemoteExceptionまたはそのサブクラスと、非検査例外クラス(*1)はIDLにマッピングしない。 |
- |
24 |
リモートインタフェースの定数(public final staticフィールド) |
Javaと同じ値を持ち、対応するIDL型の定数(const)に変換します。wstringとwcharの値はエスケープします。 (*3) |
- |
25 |
リモートインタフェースのバージョンチェック |
リポジトリID (例) #pragma ID RMInterface "RMI:pack.RMInterface:0000000000000000" |
- |
26 |
直列化可能クラス
|
valuetype |
- |
27 |
直列化可能クラスで、 org.omg.CORBA.portable.IDLEntity またはorg.omg.CORBA.portable.ValueBaseを直接的または間接的に実装するクラス (*4) |
IDLにマッピングしません。 |
- |
28 |
直列化可能クラスの継承クラス関係 |
IDLの継承関係 |
- |
29 |
直列化可能クラスが実装するインタフェースとの関係(java.io.Serializableとjava.io.Externalizableは除く) |
|
- |
30 |
直列化可能クラスのメソッド |
IDLにマッピングしません。 |
- |
31 |
直列化可能クラスのコンストラクタ |
IDLにマッピングしません。 |
- |
32 |
直列化可能クラスの定数(public final staticフィールド) |
Javaと同じ値を持ち、対応するIDL型の定数に変換します。wstringとwcharの値はエスケープします。 (*3) |
- |
33 |
直列化可能クラスでjava.io.Externalizableを実装しているクラス |
custom valuetype |
- |
34 |
直列化可能クラスで以下の条件に当てはまる場合
|
custom valuetype |
- |
35 |
直列化可能クラスで以下の条件に当てはまる場合
|
左欄のフィールドserialPersistentFieldsに対応するフィールドだけIDLにマッピングします。 (*3) |
- |
36 |
直列化可能クラスのフィールド。
|
以下のように変換します。番号(1、2、...)は左欄の番号に対応します。
|
- |
37 |
直列化可能クラスのバージョンチェック |
リポジトリID (例) #pragma ID Hedgehog "RMI:alpha.bravo.Hedgehog:12345678ABCDEF00:0123456789ABCDEF" (*3) |
- |
38 |
java.lang.Stringクラス
|
以下のように変換します。番号(1、2)は左欄の番号に対応します。
|
- |
39 |
java.lang.Classクラス |
::javax::rmi::CORBA::ClassDesc |
- |
40 |
配列 (例1) boolean[] (例2) long[] (例3) a.b.C[] (例4) x.Y[][] |
以下のようにorg.omg.CORBA..boxedRMIモジュールに展開します。 (例1) モジュール::org::omg::boxedRMIを定義し、以下のvaluetypeを展開する。 valuetype seq1_boolean sequence<boolean> (例2) モジュール::org::omg::boxedRMIを定義し、以下のvaluetypeを展開する。 valuetype seq1_long_long sequence<long long>; (例3) モジュール::org::omg::boxedRMI::a::bを定義し、以下のvaluetypeを展開する。 valuetype seq1_C sequence<::a::b::C>; (例4) モジュール ::org::omg::boxedRMI::xを定義し、以下のvaluetypeを展開する。 valuetype seq1_Y sequence<::x::Y>; valuetype seq2_Y sequence<seq1_Y>; |
○ |
41 |
例外 |
exceptionとvaluetypeの両方に変換し、exceptionには対応するvaluetypeのフィールドを1つ定義します。 ◆exception 以下の手順で変換し、メソッド名のraises節に定義する。 (1)末尾部分が"Exception"の場合は削除する。 (2)名前の末尾に"Ex"を付加する。 (3)他の変換規則を適用する。 ◆valuetype 項目26〜37と同様に変換され、対応するexceptionに名前が"value"の単一のデータメンバで定義される。 |
○ |
42 |
CORBAオブジェクト参照型 ◆org.omg.CORBA.Objectインタフェースを直接的または間接的に継承し、IDLtoJavaの規約に準拠しているJavaインタフェース(org.omg.CORBA.Objectは除く) (*4) |
既存のinterfaceに変換される。新規にIDLは出力しません。 |
- |
43 |
org.omg.CORBA.Objectインタフェース |
Object |
- |
44 |
CORBAオブジェクト参照型以外のIDLエンティティ型インタフェース (*4) |
IDLエンティティを含む、"boxed"なvaluetypeに変換します。 |
- |
45 |
java.io.Serializableインタフェース |
::java::io::Serializable //IDL module java { module io { typedef any Serializable; }; }; |
- |
46 |
java.io.Externalizableインタフェース |
::java::io::Externalizable //IDL module java { module io { typedef any Externalizable; }; }; |
- |
47 |
java.lang.Objectクラス |
::java::lang::_Object //IDL module java { module lang { typedef any _Object; }; }; |
○ |
48 |
以下の条件に当てはまるインタフェース
|
abstract interface |
- |
49 |
項目48に当てはまるインタフェースの継承インタフェース |
継承abstract interface |
- |
50 |
項目48に当てはまるインタフェースのメソッド |
項目22、23と同様に変換します。 |
- |
51 |
項目48に当てはまるインタフェースの定数 |
項目24と同様に変換します。 |
- |
52 |
リモートインタフェースを実装するクラス
|
以下のように変換します。番号(1、2)は左欄の番号に対応します。
|
- |
53 |
項目19、20、42、43、44、45、46、48のどれにも当てはまらないインタフェース |
abstract value |
- |
54 |
項目26、27、33、34、38、39、47、52のどれにも当てはまらないクラス |
abstract value |
- |
*1)非検査例外クラス:java.lang.RuntimeExceptionとそのサブクラス、およびjava.lang.Errorとそのサブクラス
*2)検査例外クラス:非検査例外クラス以外の例外クラス
*3)RMI over IIOPの規約を完全に実装していません。動作には問題ありません。
*4)本バージョンでは使用しないでください。
目次
索引
![]() ![]() |