Apdesigner プログラマーズガイド
目次 索引 前ページ次ページ

第2部 アプリケーション開発編> 第3章 Enterprise JavaBeans (EJB)を開発する> 3.5 EJBの通信規約と使用できるデータ型(RMI over IIOP)

3.5.2 名前の変換規則

JavaからIDLに変換する場合の変換規則のうち、名前が変換されるものを以下に示します。
IDLでは、メソッド名のオーバロード(同一のメソッド名でパラメタや戻り値などが異なるもの)や、メソッド名やフィールド名に大文字小文字だけ異なるものなどが認められません。そのため、メソッドのオーバロードや、大文字小文字だけ異なる場合などには、配備(Deployment)時に変名が行われます。また、変名後の名前に重複が生じる場合は、配備(Deployment)時にエラーとなることがあります。詳細については、"Interstage Application Server J2EEユーザーズガイド"をご覧ください。

Java

IDL

1

IDLキーワード
詳細は、Interstage Application Server リファレンスマニュアルの"識別子"を参照してください。
(例) oneway

先頭に「_」を付加します。
(例) _oneway

2

先頭が「_」
(例) _fred

先頭に「J」を付加します。
(例) J_fred

3

「$」やユニコード文字などのIDLで定義できない文字
(例)
a$b
x\u03bCy

「U」とUnicode値を表す4桁の16進数(大文字)で置換します。
(例)
aU0024b
xU03BCy

4

内部クラス
(例)
クラスBertの内部クラスFred

外部クラス名と内部クラス名を「__」で連結します。
(例)
Bert__Fred

5

オーバロードされたメソッド
(例)
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);

継承元と継承先で同名のメソッドが存在した場合(オーバライドを含む)は継承先のメソッド名を変換します。

6

大文字/小文字だけ異なる識別子
(例)
  jack
  Jack
  jAcK

以下の手順で変換します。

  1. 「_」を付加
  2. 大文字の位置を示す10進インデックスのリストを「_」で連結(0から始まるインデックス)

(例)
  jack_
  Jack_0
  jAcK_1_3

大文字/小文字の区別だけで識別されるパッケージ名、クラス名、インタフェース名はサポートしません。

7

メソッド名が他の識別子(定数、フィールド)の名前と重複した場合
(例)
定数「foo」とメソッド「foo」

定数、フィールドの名前の末尾に「_」を付加し、メソッド名は変換しません。
(例)
定数「foo_」とメソッド「foo」

8

リモートインタフェースの以下の条件に当てはまるメソッド

1. get<name>メソッドとset<name>メソッドのペアがあり次の条件に当てはまる場合。

  • get<name>メソッドの引数がない。
  • set<name>メソッドの引数が1つで、戻り値がvoid
  • get<name>メソッドの復帰値の型がset<name>メソッドの引数の型と同じ
  • get<name>とset<name>がjava.rmi.RemoteExceptionとそのサブクラス以外の検査例外クラス(*1)を生成しない。

2. get<name>メソッドが次の条件に当てはまる場合。

  • 引数がない
  • 復帰値の型がvoidでない
  • java.rmi.RemoteExceptionとそのサブクラス以外の検査例外クラス(*1)を生成しない。

3. is<name>メソッドとset<name>メソッドのペアがあり次の条件に当てはまる場合。

  • is<name>メソッドの引数がない。
  • set<name>メソッドの引数が1つで、戻り値がvoid
  • is<name>メソッドの復帰値の型とset<name>メソッドの引数の型がboolean
  • is<name>とset<name>がjava.rmi.RemoteExceptionとそのサブクラス以外の検査例外クラス(*1)を生成しない。

4. is<name>メソッドが次の条件に当てはまる場合。

  • 引数がない
  • 復帰値の型がboolean
  • java.rmi.RemoteExceptionとそのサブクラス以外の検査例外クラス(*1)を生成しない。

attribute

以下のように変換します。番号(1、2、...)は左欄の番号に対応します。

  1. set<name>メソッドの引数の型に対応する読取り書込み可能attribute
  2. get<name>メソッドの復帰値の型に対応する読取り専用attribute
  3. set<name>メソッドの引数の型に対応する読取り書込み可能attribute
  4. is<name>メソッドの復帰値の型に対応する読取り専用attribute


attribute名の取得手順を以下に示します。

  1. メソッド名先頭の「get」、「is」、または「set」に続く文字を展開する。
  2. 最初の文字を小文字に変換する。ただし、1文字目と2文字目の両方が大文字の場合は変換しない。
  3. 他の識別子名と名前が重複した場合は語尾に「__」を付加する。

9

配列
(例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>;

10

例外

exceptionとvaluetypeの両方に変換し、exceptionには対応するvaluetypeのフィールドを1つ定義します。

・Exception
以下の手順で変換し、メソッド名のraises節に定義する。

  1. 末尾部分が「Exception」の場合は削除
  2. 名前の末尾に「Ex」を付加
  3. 他の変換規則を適用

・valuetype
対応するexceptionに名前が「value」の単一のデータメンバで定義される。

11

java.lang.Objectクラス

::java::lang::_Object

//IDL
module java {
module lang {
  typedef any _Object;
};
};

*1)検査例外クラス:
以下のクラスを非検査例外クラスと呼びます。
− java.lang.RuntimeExceptionおよびそのサブクラス
− java.lang.Error およびそのサブクラス
上記以外の例外クラスを検査例外クラスと呼びます。

目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 1998-2006