C クラスパスの拡張機能およびユーザー・クラスロード・メタデータ

この項では、-classpath検索パスの拡張機能とユーザー・クラスロード・メタデータについて説明します。

C.1 クラスパスの拡張機能

この項では、コマンドライン・インタフェースで使用する検索パスでデータベース常駐オブジェクトとバイト・セットの仕様を許可する、-classpath検索パスおよびjserver URLプロトコル構文の拡張機能について説明します。

C.1.1 jserverQuotedClassPathTermPrefix

クラスパス表現が文字列jserverQuotedClassPathTermPrefixで始まる場合、クラスパス表現に含まれるFile.pathSeparator文字に関係なく、この文字列が次に出現することによってクラスパス表現が拡張されます。この文字列の実際の値は、システム・プロパティjserver.quoted.classpath.term.prefixによって指定されます。プロパティが定義されない場合、デフォルト値は||です。

C.1.2 jserverURLPrefix

引用符の付かないクラスパス表現が文字列jserverURLPrefixで始まる場合、その表現の残りの部分はURLとして扱われます。この文字列の値は、システム・プロパティjserver.url.in.classpath.prefixによって指定されます。この値がnullの場合、先頭が次の3つの接頭辞のいずれでもない引用符の付いた表現は、URLとして扱われます。

  • jserverSpecialTokenPrefix(値が設定される場合)

  • JSERVER_CP

  • JSERVER_SCHEMAc

注意:

引用符の付いた表現とは、jserverQuotedClassPathTermPrefixの値である文字列で開始および終了する表現です。引用符の付かない表現とは、引用符で囲まれていない場合は元の表現全体、または先頭と末尾をjserverQuotedClassPathTermPrefixで囲まれている、引用符の付いた表現の一部になります。

C.1.3 jserverSpecialTokenPrefix

文字列jserverSpecialTokenPrefixの値は、システム・プロパティjserver.specialtoken.in.classpath.prefixによって指定されます。この値がnullではない場合、この文字列が先頭にある場合のみ、接頭辞JSERVER_CPおよびJSERVER_SCHEMAcが認識されます。

関連トピック

C.1.4 JSERVER_CP

リテラルな部分文字列"JSERVER_CP"で始まるクラスパス表現は、JSERVER_CPjserver:/CPに置き換えられてURLに変換されます。

C.1.5 JSERVER_SCHEMAc

リテラルな部分文字列"JSERVER_SCHEMAc"で始まるクラスパス表現は、JSERVER_SCHEMAcjserver:/CPcSCHEMAcに置き換えられてURLに変換されます。cは任意の文字ですが、通常は/になります。つまり、JSERVER_SCHEMAc + <remaining string>という形式の表現は、<remaining string>で特定されるスキーマで共有システム・クラスロードのクラスおよびリソースを検索するための規定として扱われます。たとえば、JSERVER_SCHEMA/HRという表現はjserver:/CP/SCHEMA/HRと同じであり、HRという名前のスキーマで共有クラスおよびリソースを検索するよう指示します。

C.1.6 jserver:/CPの一般的な構文

jserver:/CPで始まるURLは、クラスパス表現としてのみ意味があります。jserver:/CPの後に続く最初の文字は、文字列の残りの部分のトークン・セパレータとして使用されます。これは、通常は/になります。後に続くトークンは次のようになります。

  • 最初のトークンとして考えられる値は、JAR、RESOURCEまたはSHARED_DATAで、RESOURCEはJavaリソース・オブジェクト、SHARED_DATAはJava共有データ・オブジェクト、JARはデータベース常駐のJARオブジェクトを示します。このトークンはオプションで、すべての値の大文字と小文字は区別されません。これらのいずれかが存在する場合、そのURLはJAR指定子と呼ばれます。それ以外の場合は、SCHEMA指定子と呼ばれます。

  • 2番目のトークンの値はPRIVATEです。これはオプションのトークンで、大文字と小文字は区別されません。

  • 3番目のトークンの値はSCHEMAです。これは必須のトークンで、大文字と小文字は区別されません。

  • 4番目のトークンは必須です。スキーマ名として解析されます。

  • 5番目のトークンは、JAR指定子の場合は必須、SCHEMA指定子の場合は禁止されています。存在する場合は、4番目のトークンで特定されるスキーマのオブジェクト名として解析されます。

機能面では、クラスパス表現は、検索対象のクラスまたはリソース名と一致するオブジェクトの検索に使用します。SCHEMA指定子の場合、オブジェクトは指定のスキーマで検索されます。JAR指定子の場合、スキーマ内の特定のオブジェクトがURLの5番目のトークンで特定されます。このオブジェクトはJARとして扱われ、検索対象オブジェクトがJAR内で名前に基づいて検索されます。データベース常駐のJAR内でクラスを検索する場合、スキーマでクラスをクラス・オブジェクトとして検索することを意味します。それ以外は、JARオブジェクトの実際のバイトで検索オブジェクトを検索することを意味します。

検索対象オブジェクトは、次の条件を満たす場合、データベースのJavaクラス・オブジェクトになります。

  • 検索名が.classで終わる場合

  • URLがデータベース常駐JARのSCHEMA指定子またはJAR指定子のいずれかである場合

このようなクラス・オブジェクトは次のようになります。

  • 共有システム・クラスロードのクラスとしてロードされます。これは、オプションの2番目のトークンであるPRIVATEがない場合に実行されます。

  • バイトコードのセットとして解析され、プライベート・ユーザー・クラスロードのクラスとしてdefineClassメソッドでロードされます。これは、オプションの2番目のトークンであるPRIVATEが存在する場合に実行されます。

注意:

クラスパス表現からロードされたクラスがjserver URLマーカーで始まらない場合、常にプライベートのユーザー・クラスロードのクラスになります。

C.2 ユーザー・クラスロード・メタデータ

11gリリース1 (11.1)以降には、データベースの作成やアップグレード時に次の方法で作成される新しいシステム表がjavavm/install/initjvma.sqlにあります。

create table java$jvm$runtime$parameters (owner# number not null,flags number);
create unique index java$jvm$runtime$parameters$i on java$jvm$runtime$parameters(owner#);

この表は、javavm/install/rmjvm.sqlでダウングレード中に削除されます。プライベート・クラス・メタデータを共有してDBA権限を保持する場合は、この表を手動で移入できます。規則では、所有者IDと一致する行がある場合、この行のフラグ値は、owner# = -1(ある場合)の行のフラグ値によってビット単位で論理積(AND)演算されます。このような一致する行が存在しない場合、結果のビット・セットは-1(すべてのビット・セット)になります。ビット0(1<<0)が結果で設定されると、セッションは既存の共有プライベート・メタデータを共有しようとします。ビット1(1<<1)が結果で設定されると、セッションは既存の共有メタデータが検出されない場合に共有メタデータを作成します。デフォルトでは、表に行はありません。そのため、すべてのセッションで共有プライベート・メタデータを使用して作成します。