モジュール java.naming
パッケージ javax.naming

クラスCompositeName

java.lang.Object
javax.naming.CompositeName
すべての実装されたインタフェース:
Serializable, Cloneable, Comparable<Object>, Name

public class CompositeName extends Object implements Name
このクラスは、合成名を表します。合成名とは、複数の名前空間にまたがる一連のコンポーネントの名前です。 各コンポーネントは、ネーミング・システムの名前空間に由来する文字列名です。 コンポーネントが階層名前空間から生ずる場合、CompoundNameクラスを使用することでその基本部分をさらに構文解析できます。

合成名のコンポーネントには、番号が付けられます。 Nコンポーネントの合成名のインデックス範囲は、0からN未満の範囲で番号が付けられます。 この範囲は、[0,N]と表されます。 もっとも重要なコンポーネントは、インデックス0にあります。 空の合成名にはコンポーネントはありません。

JNDI合成名の構文

JNDIでは、合成名の標準文字列表記が定義されます。 この表記では、各コンポーネントを区切るためのコンポーネント区切り文字(スラッシュ(/))を使用して、左から右に合成名のコンポーネントが連結されます。 JNDI構文では、次のメタキャラクタが定義されます。
  • エスケープ(バックスラッシュ\)、
  • 引用符文字(単一引用符(')および二重引用符("))
  • コンポーネント区切り文字(スラッシュ(/))
先行する引用符、メタキャラクタに先行するエスケープ、コンポーネントの末尾のエスケープ、または引用符のないコンポーネントのコンポーネント区切り文字には、そのコンポーネントが合成名文字列に変換されるときに、前にエスケープ文字を付ける必要があります。 または、このようなエスケープ文字を追加しない場合は、単一引用符または二重引用符を対で使用して、コンポーネント全体を引用符で囲みます。 二重引用符で囲まれたコンポーネントの単一引用符は、メタキャラクタとはみなされず、エスケープされる必要もありません。また逆の場合も同じです。

2つの合成名を比較する場合は、大文字小文字の区別が重要になります。

先行するコンポーネント区切り文字(区切り文字で始まる合成名の文字列)は、先行する空のコンポーネント(空の文字列で構成されるコンポーネント)を表します。 末尾のコンポーネント区切り文字(区切り文字で終わる合成名の文字列)は、末尾の空のコンポーネントを表します。 隣接する複合区切り文字は、空のコンポーネントを表します。

合成名の例

次の表に、合成名の例を示します。 各行には、コンポジット名の文字列形式とそれに対応する構造形式(CompositeName)が表示されます。
合成名の文字列形式、およびそれに対応する構造形式(CompositeName)を示す例
文字列名 CompositeName
"" {} (空の名前==新しいCompositeName("")==新しいCompositeName())
"x" {"x"}
"x/y" {"x", "y"}
"x/" {"x", ""}
"/x" {"", "x"}
"/" {""}
"//" {"", ""}
"/x/" {"", "x", ""}
"x//y" {"x", "", "y"}

変換の例

変換の例を示します。 右の列は文字列コンポジット名の構成を示し、左の列は対応するCompositeNameの作成を示しています。 2つの合成名を持つ文字列形式の変換は、文字列形式を連結するだけです。
文字列名および合成名を示す構成例
文字列名 CompositeNames
"x/y" + "/" = x/y/ {"x", "y"} + {""} = {"x", "y", ""}
"" + "x" = "x" {} + {"x"} = {"x"}
"/" + "x" = "/x" {""} + {"x"} = {"", "x"}
"x" + "" + "" = "x" {"x"} + {} + {} = {"x"}

マルチスレッド・アクセス

CompositeNameインスタンスは、同時マルチスレッド・アクセスに対して同期されません。 複数のスレッドがCompositeNameにアクセスして変更しようとすると、オブジェクトがロックされます。
導入されたバージョン:
1.3
関連項目: