public interface Context
ほとんどのメソッドには、Name
パラメータおよび String
を使用するオーバーロードされたバージョンがあります。これらのオーバーロードされたバージョンは、Name
パラメータと String
パラメータが単に同じ名前の異なる表現である場合に、同じメソッドのオーバーロードされたバージョンが同じように動作するという点で同等です。以下のメソッドの説明では、1 つのバージョンだけが完全にドキュメント化されています。2 番目のバージョンには、最初のバージョンへのリンクがあり、同じドキュメントが両方に適用されます。
連合をサポートするシステムでは、Context メソッドに対する String 名前引数は、合成名です。CompositeName のインスタンスである名前引数は合成名とみなされ、CompositeName のインスタンスではない Name 引数は、CompoundName のインスタンス、または複合名のその他の実装である複合名とみなされます。これにより、NameParser.parse() の結果を Contex メソッドに対する引数として使用できます。JNDI 1.2 以前は、すべての名前引数が合成名とみなされていました。
さらに、連合をサポートするシステムでは、list() および listBindings() から NamingEnumeration に返される名前はすべて、文字列として表される合成名です。名前の文字列構文については、CompositeName を参照してください。
連合をサポートしていないシステムでは、(Name または String 形式の) 名前引数および NamingEnumeration で返される名前は、サービスプロバイダの判断により、合成名前空間の名前ではなく、独自の名前空間の名前になることがあります。
lookup
メソッドでは、空の名前を引き渡すときに、同じネーミングコンテキストを表す新しい Context インスタンスが返されます。
並行性を制御するために、NamingEnumeration を返すコンテキストオペレーションは、列挙が使用中のとき、またはそのオペレーションで生成される参照が実行中のときには、完了していないものとみなされます。
JNDI アプリケーションでは、ネーミングサービスとディレクトリサービスからアクセスされる環境を定義する、さまざまな設定やプロパティーを伝達する方法が必要とされます。たとえば、あるコンテキストでは、サービスにアクセスするためにセキュリティー資格の指定が必要になります。別のコンテキストでは、サーバー構成情報を指定する必要があります。これらは、コンテキストの環境と呼ばれます。Context インタフェースでは、この環境を取得および更新するためのメソッドが提供されています。
環境は、コンテキストメソッドがあるコンテキストから次のコンテキストに進むにつれて、親コンテキストから継承されます。1 つのコンテキストの環境を変更しても、その他のコンテキストの環境には直接影響しません。
環境プロパティーの使用、または有効性の検査、あるいはその両方がいつ行われるかは、実装に依存します。たとえば、ディレクトリに「ログイン」するために、サービスプロバイダでセキュリティー関連のプロパティーが使用されるとします。このログインプロセスは、コンテキストが作成されたとき、またはコンテキストでメソッドが最初に呼び出されたときに発生します。これがいつ発生するか、および発生するかどうかは、実装に依存します。コンテキストに対して環境プロパティーの追加または削除が行われたときに、変更の有効性の検査が行われるタイミングも、実装に依存します。たとえば、あるプロパティーの検査は、変更が行われたとき、またはコンテキストで次のオペレーションが実行されたときに行われるか、あるいはまったく行われません。
コンテキストへの参照を含むオブジェクトでは、そのコンテキストの環境が検査されます。クリアーテキストのパスワードなどの重要な情報は、実装で保護されているかどうかがわからない場合には、保存しないでください。
JNDI アプリケーションで必要な環境を設定するタスクを簡単にするために、アプリケーションコンポーネントとサービスプロバイダがリソースファイルとともに分配されることがあります。JNDI リソースファイルは、キーと値のペアのリストを含む、プロパティーファイル形式のファイルです (java.util.Properties
を参照)。キーはプロパティーの名前 (java.naming.factory.object など) で、値はそのプロパティーに定義された形式の文字列です。次に、JNDI リソースファイルの例を示します。
JNDI クラスライブラリでは、リソースファイルを読み込み、プロパティー値を自由に使用できるようにします。JNDI リソースファイルは、不特定のユーザーが読み込む可能性があります。クリアーテキストのパスワードなどの重要な情報は、ここに保存しないでください。java.naming.factory.object=com.sun.jndi.ldap.AttrsToCorba:com.wiz.from.Person java.naming.factory.state=com.sun.jndi.ldap.CorbaToAttrs:com.wiz.from.Person java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory
JNDI リソースファイルには、プロバイダおよびアプリケーションの 2 種類があります。
[prefix/]jndiprovider.propertiesここで、prefix はプロバイダのコンテキスト実装のパッケージ名であり、各ピリオド (「.」) はスラッシュ (「/」) に変換されます。 たとえば、あるサービスプロバイダがクラス名 com.sun.jndi.ldap.LdapCtx のコンテキスト実装を定義するとします。このプロバイダのためのプロバイダリソースは、com/sun/jndi/ldap/jndiprovider.properties と指定されます。クラスがパッケージにない場合、リソースの名前は単に jndiprovider.properties になります。
JNDI クラスライブラリの特定のメソッドでは、JNDI ファクトリのリストを指定する標準 JNDI プロパティーが使用されます。
ClassLoader.getResources()
を使用して、classpath の jndi.properties という名前のアプリケーションリソースファイルがすべて検索されます。さらに、ファイル java.home/lib/jndi.properties が存在し、読み込み可能な場合は、追加のアプリケーションリソースファイルとみなされます。(java.home は、java.home システムプロパティーに指定されたディレクトリを示します。)これらのファイルに含まれるプロパティーはすべて、初期コンテキストの環境に配置されます。この環境は、ほかのコンテキストに継承されます。
1 つ以上のアプリケーションリソースファイルにあるプロパティーの場合、JNDI では検索された最初の値が使用されるか、または意味がある場合に限り、すべての値が連結されます (詳細は次に示します)。たとえば、3 つの jndi.properties リソースファイルに java.naming.factory.object プロパティーがある場合、オブジェクトファクトリのリストは、3 つのファイルすべてからのプロパティー値の連結になります。この方式を使用すると、配置可能なコンポーネントのそれぞれで、エクスポートするファクトリがリスト表示されます。JNDI では、ファクトリクラスを検索するときに、これらのエクスポートリストがすべて収集および使用されます。
JNDI クラスライブラリでプロパティーの値を決定する必要がある場合は、次の 2 つのソースから値を順にマージして実行します。
サービスプロバイダでプロパティーの値を決定する必要がある場合、通常は環境から値が直接取得されます。サービスプロバイダは、独自のプロバイダリソースファイルに配置される、プロバイダ固有のプロパティーを定義できます。その場合は、前の段落で説明した値をマージする必要があります。
このように、各サービスプロバイダの開発者は、そのサービスプロバイダで使用するファクトリのリストを指定できます。これらは、アプリケーションまたはアプレットの配置者が指定するアプリケーションリソースで変更できます。また、ユーザーが変更することもできます。
修飾子と型 | フィールドと説明 |
---|---|
static String |
APPLET
ほかのプロパティーを検索するときに使用する初期コンテキストコンストラクタのアプレットを指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
AUTHORITATIVE
要求されたサービスの権限を指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
BATCHSIZE
サービスのプロトコルによってデータを返すときに使用するバッチサイズを指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
DNS_URL
JNDI URL コンテキスト (dns://somehost/wiz.com など) に使用する DNS ホスト名およびドメイン名を指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
INITIAL_CONTEXT_FACTORY
使用する初期コンテキストファクトリを指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
LANGUAGE
サービスに使用する優先言語を指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
OBJECT_FACTORIES
使用するオブジェクトファクトリのリストを指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
PROVIDER_URL
使用するサービスプロバイダの構成情報を指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
REFERRAL
サービスプロバイダによって参照が処理される方法を指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
SECURITY_AUTHENTICATION
使用するセキュリティーレベルを指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
SECURITY_CREDENTIALS
サービスに対する呼び出し側を認証する主体の資格を指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
SECURITY_PRINCIPAL
サービスに対する呼び出し側を認証する主体の識別情報を指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
SECURITY_PROTOCOL
使用するセキュリティープロトコルを指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
STATE_FACTORIES
使用する状態ファクトリのリストを指定するための、環境プロパティーの名前を保持する定数です。
|
static String |
URL_PKG_PREFIXES
URL コンテキストファクトリをロードするときに使用するパッケージ接頭辞のリストを指定するための、環境プロパティーの名前を保持する定数です。
|
修飾子と型 | メソッドと説明 |
---|---|
Object |
addToEnvironment(String propName, Object propVal)
このコンテキストの環境に、新しい環境プロパティーを追加します。
|
void |
bind(Name name, Object obj)
名前をオブジェクトにバインドします。
|
void |
bind(String name, Object obj)
名前をオブジェクトにバインドします。
|
void |
close()
このコンテキストを閉じます。
|
Name |
composeName(Name name, Name prefix)
このコンテキストを基準にした名前を持つこのコンテキストの名前を変換します。
|
String |
composeName(String name, String prefix)
このコンテキストを基準にした名前を持つこのコンテキストの名前を変換します。
|
Context |
createSubcontext(Name name)
新しいコンテキストを作成してバインドします。
|
Context |
createSubcontext(String name)
新しいコンテキストを作成してバインドします。
|
void |
destroySubcontext(Name name)
名前付きコンテキストを破棄し、名前空間から削除します。
|
void |
destroySubcontext(String name)
名前付きコンテキストを破棄し、名前空間から削除します。
|
Hashtable<?,?> |
getEnvironment()
このコンテキストで有効な環境を取得します。
|
String |
getNameInNamespace()
独自の名前空間でこのコンテキストの完全な名前を取得します。
|
NameParser |
getNameParser(Name name)
名前付きコンテキストに関連したパーサーを取得します。
|
NameParser |
getNameParser(String name)
名前付きコンテキストに関連したパーサーを取得します。
|
NamingEnumeration<NameClassPair> |
list(Name name)
バインドされたオブジェクトのクラス名とともに、名前付きコンテキストでバインドされた名前を列挙します。
|
NamingEnumeration<NameClassPair> |
list(String name)
バインドされたオブジェクトのクラス名とともに、名前付きコンテキストでバインドされた名前を列挙します。
|
NamingEnumeration<Binding> |
listBindings(Name name)
バインドされたオブジェクトとともに、名前付きコンテキストでバインドされた名前を列挙します。
|
NamingEnumeration<Binding> |
listBindings(String name)
バインドされたオブジェクトとともに、名前付きコンテキストでバインドされた名前を列挙します。
|
Object |
lookup(Name name)
名前付きオブジェクトを取得します。
|
Object |
lookup(String name)
名前付きオブジェクトを取得します。
|
Object |
lookupLink(Name name)
名前の終端の基本コンポーネントを除くリンクをともなう、名前付きオブジェクトを取得します。
|
Object |
lookupLink(String name)
名前の終端の基本コンポーネントを除くリンクをともなう、名前付きオブジェクトを取得します。
|
void |
rebind(Name name, Object obj)
名前をオブジェクトにバインドし、既存のバインディングを上書きします。
|
void |
rebind(String name, Object obj)
名前をオブジェクトにバインドし、既存のバインディングを上書きします。
|
Object |
removeFromEnvironment(String propName)
このコンテキストの環境から環境プロパティーを削除します。
|
void |
rename(Name oldName, Name newName)
新しい名前を、以前の名前にバインドされたオブジェクトにバインドし、以前の名前をアンバインドします。
|
void |
rename(String oldName, String newName)
新しい名前を、以前の名前にバインドされたオブジェクトにバインドし、以前の名前をアンバインドします。
|
void |
unbind(Name name)
名前付きオブジェクトをアンバインドします。
|
void |
unbind(String name)
名前付きオブジェクトをアンバインドします。
|
static final String INITIAL_CONTEXT_FACTORY
この定数の値は "java.naming.factory.initial" です。
static final String OBJECT_FACTORIES
この定数の値は "java.naming.factory.object" です。
static final String STATE_FACTORIES
この定数の値は "java.naming.factory.state" です。
static final String URL_PKG_PREFIXES
この定数の値は "java.naming.factory.url.pkgs" です。
static final String PROVIDER_URL
この定数の値は "java.naming.provider.url" です。
static final String DNS_URL
この定数の値は "java.naming.dns.url" です。
static final String AUTHORITATIVE
この定数の値は "java.naming.authoritative" です。
static final String BATCHSIZE
この定数の値は "java.naming.batchsize" です。
static final String REFERRAL
この定数の値は "java.naming.referral" です。
static final String SECURITY_PROTOCOL
この定数の値は "java.naming.security.protocol" です。
static final String SECURITY_AUTHENTICATION
この定数の値は "java.naming.security.authentication" です。
static final String SECURITY_PRINCIPAL
この定数の値は "java.naming.security.principal" です。
static final String SECURITY_CREDENTIALS
この定数の値は "java.naming.security.credentials" です。
static final String LANGUAGE
この定数の値は "java.naming.language" です。
static final String APPLET
この定数の値は "java.naming.applet" です。
addToEnvironment(String, Object)
, removeFromEnvironment(String)
, InitialContext
, 定数フィールド値Object lookup(Name name) throws NamingException
name
- 検索するオブジェクトの名前NamingException
- ネーミング例外が発生した場合lookup(String)
, lookupLink(Name)
Object lookup(String name) throws NamingException
lookup(Name)
を参照してください。name
- 検索するオブジェクトの名前NamingException
- ネーミング例外が発生した場合void bind(Name name, Object obj) throws NamingException
name
- バインドする名前。空は不可obj
- バインドするオブジェクト。null の可能性があるNameAlreadyBoundException
- 名前がすでにバインドされている場合InvalidAttributesException
- オブジェクトによって一部の必須属性が指定されなかった場合NamingException
- ネーミング例外が発生した場合bind(String, Object)
, rebind(Name, Object)
, DirContext.bind(Name, Object, javax.naming.directory.Attributes)
void bind(String name, Object obj) throws NamingException
bind(Name, Object)
を参照してください。name
- バインドする名前。空は不可obj
- バインドするオブジェクト。null の可能性があるNameAlreadyBoundException
- 名前がすでにバインドされている場合InvalidAttributesException
- オブジェクトによって一部の必須属性が指定されなかった場合NamingException
- ネーミング例外が発生した場合void rebind(Name name, Object obj) throws NamingException
オブジェクトが DirContext の場合、名前に関連付けられている既存の属性はすべて、そのオブジェクトの属性に置き換えられます。置換されない場合、名前に関連付けられている既存の属性は、変更されないままです。
name
- バインドする名前。空は不可obj
- バインドするオブジェクト。null の可能性があるInvalidAttributesException
- オブジェクトによって一部の必須属性が指定されなかった場合NamingException
- ネーミング例外が発生した場合rebind(String, Object)
, bind(Name, Object)
, DirContext.rebind(Name, Object, javax.naming.directory.Attributes)
, DirContext
void rebind(String name, Object obj) throws NamingException
rebind(Name, Object)
を参照してください。name
- バインドする名前。空は不可obj
- バインドするオブジェクト。null の可能性があるInvalidAttributesException
- オブジェクトによって一部の必須属性が指定されなかった場合NamingException
- ネーミング例外が発生した場合void unbind(Name name) throws NamingException
name
の終端の基本部分を除くすべてによって指定されたターゲットコンテキストから name
の終端の基本名を削除します。
このメソッドはべき等です。終端の基本名がターゲットコンテキストでバインドされていない場合でも成功しますが、いずれかの中間コンテキストが存在しない場合は NameNotFoundException がスローされます。
名前に関連付けられている属性が削除されます。中間コンテキストは変更されません。
name
- アンバインドする名前。空は不可NameNotFoundException
- 中間コンテキストが存在しない場合NamingException
- ネーミング例外が発生した場合unbind(String)
void unbind(String name) throws NamingException
unbind(Name)
を参照してください。name
- アンバインドする名前。空は不可NameNotFoundException
- 中間コンテキストが存在しない場合NamingException
- ネーミング例外が発生した場合void rename(Name oldName, Name newName) throws NamingException
oldName
- 既存のバインディングの名前。空は不可newName
- 新しいバインディングの名前。空は不可NameAlreadyBoundException
- newName がすでにバインドされている場合NamingException
- ネーミング例外が発生した場合rename(String, String)
, bind(Name, Object)
, rebind(Name, Object)
void rename(String oldName, String newName) throws NamingException
rename(Name, Name)
を参照してください。oldName
- 既存のバインディングの名前。空は不可newName
- 新しいバインディングの名前。空は不可NameAlreadyBoundException
- newName がすでにバインドされている場合NamingException
- ネーミング例外が発生した場合NamingEnumeration<NameClassPair> list(Name name) throws NamingException
このコンテキストにバインディングが追加されるか、またはこのコンテキストからバインディングが削除される場合、以前に返された列挙への影響は定義されていません。
name
- リスト表示するコンテキストの名前NamingException
- ネーミング例外が発生した場合list(String)
, listBindings(Name)
, NameClassPair
NamingEnumeration<NameClassPair> list(String name) throws NamingException
list(Name)
を参照してください。name
- リスト表示するコンテキストの名前NamingException
- ネーミング例外が発生した場合NamingEnumeration<Binding> listBindings(Name name) throws NamingException
このコンテキストにバインディングが追加されるか、またはこのコンテキストからバインディングが削除される場合、以前に返された列挙への影響は定義されていません。
name
- リスト表示するコンテキストの名前NamingException
- ネーミング例外が発生した場合listBindings(String)
, list(Name)
, Binding
NamingEnumeration<Binding> listBindings(String name) throws NamingException
listBindings(Name)
を参照してください。name
- リスト表示するコンテキストの名前NamingException
- ネーミング例外が発生した場合void destroySubcontext(Name name) throws NamingException
このメソッドはべき等です。終端の基本名がターゲットコンテキストでバインドされていない場合でも成功しますが、いずれかの中間コンテキストが存在しない場合は NameNotFoundException がスローされます。
連合ネーミングシステムでは、1 つのネーミングシステムからのコンテキストが別のネーミングシステムの名前にバインドされます。そのあと、合成名を使用して外部コンテキストのオペレーションを検索および実行できます。ただし、外部コンテキストはバインドされたコンテキストの「サブコンテキスト」ではないため、この合成名を使用してコンテキストを破棄しようとすると、NotContextException で失敗します。代わりに、unbind() を使用して、外部コンテキストのバインディングを削除します。外部コンテキストを破棄するには、外部コンテキストの「ネイティブな」ネーミングシステムからのコンテキストで destroySubcontext() を実行する必要があります。
name
- 破棄されるコンテキストの名前。空は不可NameNotFoundException
- 中間コンテキストが存在しない場合NotContextException
- 名前がバインドされているが、コンテキストに名前を付けていないか、または該当する型のコンテキストに名前を付けていない場合ContextNotEmptyException
- 指定されたコンテキストが空でない場合NamingException
- ネーミング例外が発生した場合destroySubcontext(String)
void destroySubcontext(String name) throws NamingException
destroySubcontext(Name)
を参照してください。name
- 破棄されるコンテキストの名前。空は不可NameNotFoundException
- 中間コンテキストが存在しない場合NotContextException
- 名前がバインドされているが、コンテキストに名前を付けていないか、または該当する型のコンテキストに名前を付けていない場合ContextNotEmptyException
- 指定されたコンテキストが空でない場合NamingException
- ネーミング例外が発生した場合Context createSubcontext(Name name) throws NamingException
name
- 作成するコンテキストの名前。空は不可NameAlreadyBoundException
- 名前がすでにバインドされている場合InvalidAttributesException
- サブコンテキストの作成に必須属性の指定が必要な場合NamingException
- ネーミング例外が発生した場合createSubcontext(String)
, DirContext.createSubcontext(javax.naming.Name, javax.naming.directory.Attributes)
Context createSubcontext(String name) throws NamingException
createSubcontext(Name)
を参照してください。name
- 作成するコンテキストの名前。空は不可NameAlreadyBoundException
- 名前がすでにバインドされている場合InvalidAttributesException
- サブコンテキストの作成に必須属性の指定が必要な場合NamingException
- ネーミング例外が発生した場合Object lookupLink(Name name) throws NamingException
name
- 検索するオブジェクトの名前NamingException
- ネーミング例外が発生した場合lookupLink(String)
Object lookupLink(String name) throws NamingException
lookupLink(Name)
を参照してください。name
- 検索するオブジェクトの名前NamingException
- ネーミング例外が発生した場合NameParser getNameParser(Name name) throws NamingException
name
- パーサーの取得元のコンテキストの名前NamingException
- ネーミング例外が発生した場合getNameParser(String)
, CompoundName
NameParser getNameParser(String name) throws NamingException
getNameParser(Name)
を参照してください。name
- パーサーの取得元のコンテキストの名前NamingException
- ネーミング例外が発生した場合Name composeName(Name name, Name prefix) throws NamingException
name
)、上位コンテキストの 1 つを基準にしたこのコンテキストの名前 (prefix
) を指定すると、このメソッドは、関連するネーミングシステムに該当する構文を使用して、2 つの名前の複合を返します。つまり、name
によって、このコンテキストに関連してオブジェクトに名前を付ける場合、結果は同じオブジェクトの名前になりますが、上位コンテキストに関連しています。名前は null にできません。
たとえば、このコンテキストが初期コンテキストに関連して "wiz.com" と命名された場合、
composeName("east", "wiz.com")上記は、
"east.wiz.com"
を返します。このコンテキストの名前が org/research の場合、
composeName("user/jane", "org/research")上記は
"org/research/user/jane"
を返し、
composeName("user/jane", "research")上記は
"research/user/jane"
を返します。name
- このコンテキストを基準にした名前prefix
- いずれかの上位コンテキストを基準にした、このコンテキストの名前prefix
と name
の変換NamingException
- ネーミング例外が発生した場合composeName(String, String)
String composeName(String name, String prefix) throws NamingException
composeName(Name, Name)
を参照してください。name
- このコンテキストを基準にした名前prefix
- いずれかの上位コンテキストを基準にした、このコンテキストの名前prefix
と name
の変換NamingException
- ネーミング例外が発生した場合Object addToEnvironment(String propName, Object propVal) throws NamingException
propName
- 追加する環境プロパティーの名前。null は不可propVal
- 追加するプロパティーの値。null は不可NamingException
- ネーミング例外が発生した場合getEnvironment()
, removeFromEnvironment(String)
Object removeFromEnvironment(String propName) throws NamingException
propName
- 削除する環境プロパティーの名前。null は不可NamingException
- ネーミング例外が発生した場合getEnvironment()
, addToEnvironment(String, Object)
Hashtable<?,?> getEnvironment() throws NamingException
呼び出し元が、返されるオブジェクトを変更してはいけません。そのコンテキストへの影響は未定義です。このコンテキストの環境は、addToEnvironment() と removeFromEnvironment() を使用して変更できます。
NamingException
- ネーミング例外が発生した場合addToEnvironment(String, Object)
, removeFromEnvironment(String)
void close() throws NamingException
このメソッドは、べき等です。すでに閉じられたコンテキストでこのメソッドを呼び出しても、効果はありません。閉じられたコンテキストでほかのメソッドを呼び出すことはできません。結果は未定義の動作になります。
NamingException
- ネーミング例外が発生した場合String getNameInNamespace() throws NamingException
多くのネーミングサービスには、各名前空間のオブジェクトに対する「完全な名前」の概念があります。たとえば、LDAP エントリには識別名があり、DNS レコードには完全指定名があります。このメソッドによって、クライアントアプリケーションでこの名前を取得できます。このメソッドで返される文字列は、JNDI 合成名ではなく、コンテキストメソッドに直接渡すことはできません。フルネームの概念が意味を持たないネーミングシステムでは、OperationNotSupportedException がスローされます。
OperationNotSupportedException
- ネーミングシステムにフルネームの概念がない場合NamingException
- ネーミング例外が発生した場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.