12.2 JNDIに対するOracle JVMのサポートの要件

この項では、Oracle JVMでJNDIをサポートするための実装要件について説明します。この項の内容は次のとおりです。

12.2.1 ネームスペース

ネームスペースの表記は、一般的なUNIXファイル・システム構造の場合と同様です。ルート・ディレクトリおよびディレクトリ・セパレータは、スラッシュ記号(/)で表記されます。ルート・ディレクトリはSYSが所有し、SYSのみがその下に新規のサブディレクトリを作成できます。

OJDSのインストール・プロセス中に、次の2つのディレクトリ(DirContexts)が作成されます。

  • /publicディレクトリ

    /publicディレクトリはテスト用のパブリック領域であり、すべてのユーザーがこのディレクトリ内のオブジェクトをバインド、削除または参照できます。

  • /etcディレクトリ

    /etcディレクトリは、クライアントが必要とするすべての本番タイプ・オブジェクトのデプロイメント用の領域であり、更新または削除されないように保護されます。/etcディレクトリへの書込みはSYSユーザーのみが実行できますが、読取りはすべてのユーザーが実行できます。

12.2.1.1 オブジェクト権限

ディレクトリ構造に格納されたオブジェクトには、許可を割り当てることができます。これらの許可は、次の許可を組み合せたものです。

  • 読取り

  • 書込み

  • 実行

次の表で、ディレクトリ構造に格納されたオブジェクトに割り当てることができる許可について説明します。

アクション 親コンテキストの許可 子(obj/ctx)の許可

bind

書込み

NA

unbind

書込み

書込み

createSubcontext

書込み

NA

getAttributes

読取り

読取り

rebind

書込み

書込み

destroySub context

書込み

書込み

list

読取り

読取り

listBindings

読取り

読取り

lookup

読取り

読取り

lookupLink

読取り

読取り

rename (target)

書込み

書込み(存在する場合)

rename (source)

読取り

読取り

注意:

操作を正常に実行するには、すべての親コンテキストに実行許可があることが必要です。

12.2.1.2 永続記憶域表、索引および順序

OJVMSYSが所有するデータベース表には、各オブジェクトの次の詳細が格納されます。

  • ネームスペース・メタデータ

  • バウンド名

  • 属性

  • パーミッション

  • 格納されたオブジェクト表現

12.2.1.3 初期のコンテキストおよび許可

次の表に、インストール時にデフォルトで作成されるコンテキストを示します。

名前 所有者 読取り 書込み 実行

/

SYS

PUBLIC

SYS

PUBLIC

/public

SYS

PUBLIC

PUBLIC

PUBLIC

/etc

SYS

PUBLIC

SYS

PUBLIC

12.2.1.4 オブジェクトおよびコンテキストのデフォルト許可

コンテキストが作成された場合や、オブジェクトがOJDSにバインドされた場合、コンテキストを作成するユーザーまたはスキーマに読取り許可と実行許可が付与されます。

12.2.2 Oracle Java Directory ServiceのJNDIネームスペース・プロバイダ

この項では、Oracle Java Directory Serviceの次の概念について説明します。

12.2.2.1 ディレクトリ・コンテキスト

Oracle Java Directory Service (OJDS)は、javax.naming.directory.DirContextコンテキストで指定されているとおりにインタフェースを実装する必要があります。javax.naming.directory.DirContextコンテキスト、oracle.aurora.jndi.ojds.OjdsServerContextコンテキストおよびoracle.aurora.jndi.ojds.OjdsClientContextコンテキストは、オブジェクトに関連付けられている属性を調査および更新するメソッドを提供し、サーバー側とクライアント側のそれぞれの実行でのディレクトリ検索を可能にします。

次の表で、コンテキストを作成または使用する際に使用可能なJNDIプロパティについて説明します。

パッケージ名 説明

java.naming.factory.initial

アプリケーションの初期コンテキストの作成に使用するクラスを指定します。oracle.aurora.jndi.ojdsパッケージは、InitialDirContextを作成するためにこのプロパティで使用するoracle.aurora.jndi.ojds.OjdsInitialContextFactoryを定義します。

java.naming.security.principal

データベース接続を作成するためのユーザーIDを指定します。このプロパティには値を指定する必要があります。

java.naming.security.credentials

データベース接続を作成するためのパスワードを指定します。このプロパティには値を指定する必要があります。

java.naming.provider.url

データベース接続を作成するための接続URLを指定します。このプロパティは省略可能です。

java.naming.factory.url.pkgs

特定のJNDI実装に対するURLハンドラの、コロンで区切られたリストです。oracle.aurora.jndi.ojds.OjdsURLContextFactoryクラスは、OJDS URLに基づいてコンテキストを戻します。

12.2.2.2 StateFactory

StateFactoryは、Javaオブジェクトを実装側のJNDIプロバイダに格納できるオブジェクトに変換します。OJDSによってすべてのオブジェクトが変換され、シリアライズ・オブジェクトにバインドされます。OJDSは、この変換に関するjava.io.Serializableインタフェースの仕様およびJava Object Serialization Specificationに準拠しています。シリアライズされたオブジェクトは、OJDS永続ストアに格納されます。OJDSでは、外部のStateFactoryはサポートされていません。

12.2.2.3 ObjectFactory

ObjectFactoryは、実装側のJNDIプロバイダに格納されているオブジェクトを取得して、Javaオブジェクトに変換します。OJDSでは、外部のObjectFactoryはサポートされていません。シリアライズ・オブジェクトが、OJDS永続ストアから取得されたバイナリ形式に基づいて作成されます。オブジェクトがデシリアライズされると、OJDSによってそのオブジェクトは次のいずれかの方法で処理されます。

  • オブジェクトがContextの場合、connectionフィールドとenvフィールドが設定され、DirContextが戻されます。

  • オブジェクトがjavax.naming.Referenceの場合、DirectoryManager.getObjectInstanceメソッドを使用してオブジェクトを作成できます。

  • オブジェクトがContextでもjavax.naming.Referenceでもない場合、オブジェクトはそのままユーザーに戻されます。

オブジェクトを指定する取得済バイトは、java.io.Serializableインタフェース標準に準拠している必要があります。オブジェクトを実装するクラスがクライアントで変更されると、オブジェクトのデシリアライズに失敗することがあります。このため、オブジェクト・バイトと、オブジェクト・バイトをデシリアライズするクラスまたはオブジェクト・ストリームとの互換性を保つように注意する必要があります。

12.2.2.4 OJDS URLのサポート

OJDSでは、次の形式で指定するURLがサポートされています。

ojds://jdbc_connection_url/path…/object

前の構文では:

  • jdbc_connection_urlは、サポートされているJDBC接続URLの1つです。URLには、ディレクトリに接続するためのjdbc_connection_urlを指定する必要があります。

    注意:

    OJDSプロバイダでは、JDKベースの外部クライアントに対してThinとOCIの両方のURLがサポートされています。たとえば、ThinドライバとOCIドライバにはそれぞれ次のURLを使用できます。

    thin:localhost:5521:mysid
    oci:22.133.242:5521:mysid

    ただし、サーバーでのOJDS URLは、Thin接続タイプにのみサポートされています。URL接続を完了するには、Context.SECURITY_PRINCIPALおよびContext.SECURITY_CREDENTIALSの値を設定する必要があります。

  • pathは、UNIXタイプのファイル・システムと同様の、スラッシュ脚注1で区切られたリストです。これは、ディレクトリ・ツリー内のノードを表しています。

  • objectは、コンテキスト内の実際の終端オブジェクト名です。このオブジェクトを省略した場合、パスはスラッシュ(/)で終了します。このような場合は、このパスをルートとして表すDirContextが戻されます。

次のコード・スニペットは、ユーザーHRとして、接続されたOCIドライバを使用してディレクトリ/one/two内のMyObj型のオブジェクトmyobjを参照する方法を示しています。

import javax.naming.*;
.
.
.
Hashtable env = new Hashtable();
env.put(“java.naming.security.principal",“HR");
@ env.put(“java.naming.security.credentials","<password>");
MyObj obj = (MyObj)(new InitialDirContext(env)).lookup(ojds://oci:host1:5521:mysid/one/two/myobj");

12.2.2.5 クライアント・クラスパス

JDKクライアントがOJDSを使用するためには、$ORACLE_HOME/jdbc/lib/ojdbc6.jarおよび$ORACLE_HOME/javavm/lib/aurora.zip jarファイルをクラスパスに追加する必要があります。

12.2.3 ネームスペース・ブラウザ

ネームスペース・ブラウザを使用すると、OJDSに格納されたオブジェクトの許可およびプロパティを参照できます。既存のojvmjavaユーティリティが拡張され、次の表で説明する操作がサポートされています。

コマンド名 説明

ls

UNIXのlsコマンドと同様に、コンテキストの内容を一覧表示します。

rm

コンテキストまたはオブジェクトを削除します。

mkdir

OJDSでコンテキストを作成します。

chown

特定のコンテキストやオブジェクトなどの所有者を変更します。

chmod

オブジェクトまたはコンテキストに対する権限を変更します。

cd

作業コンテキストを変更します。

pwd

現行作業コンテキストを一覧表示します。

ln

UNIXのシンボリック・リンクと同様に、別の名前を使用して同じオブジェクトを参照します。

mv

コンテキスト(またはオブジェクト)の古い名前を変更するか、新しい名前に再バインドします。

bind

オブジェクト参照またはネーミング・コンテキストをJNDIネームスペースにバインドします。

bindds

データ・ソース・オブジェクトを特定のコンテキストにバインドします。

bindurl

URLオブジェクトを特定のコンテキストにバインドします。

関連トピック



脚注の説明

脚注1:

スラッシュ記号(\)