ヘッダーをスキップ
Oracle® Database Java開発者ガイド
12cリリース1 (12.1)
B72466-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

12 スキーマ・オブジェクトおよびOracle JVMユーティリティ

この章では、Oracle Database Java環境で使用するスキーマ・オブジェクトおよびOracle JVMユーティリティについて説明します。これらのユーティリティは、UNIXシェルまたはMicrosoft社のWindowsのDOSプロンプトから実行します。


注意:

ツールに指定されている名前は、すべて大/小文字の区別があります。このため、スキーマ、ユーザー名およびパスワードは大文字に変換されません。

この章の内容は、次のとおりです。

スキーマ・オブジェクトの概要

従来のJava仮想マシン(JVM)では、Javaファイルをコンパイルおよびロードしていましたが、Oracle JVMではスキーマ・オブジェクトをコンパイルおよびロードします。次の種類のJavaスキーマ・オブジェクトがロードされます。

  • Javaクラス・スキーマ・オブジェクト(Javaクラス・ファイルに相当)。

  • Javaソース・スキーマ・オブジェクト(Javaソース・ファイルに相当)。

  • Javaリソース・スキーマ・オブジェクト(Javaリソース・ファイルに相当)。

クラス・ファイルをOracle JVMで実行可能にするには、loadjavaツールを使用して、クラス・ファイルまたはソース・ファイルからJavaクラス・スキーマ・オブジェクトを作成し、スキーマにロードする必要があります。リソース・ファイルをOracle JVMからアクセス可能にするには、loadjavaツールを使用して、リソース・ファイルからJavaリソース・スキーマ・オブジェクトを作成して、ロードします。

dropjavaツールは、Javaファイルに対応するスキーマ・オブジェクトを削除します。loadjavaツールで作成したJavaスキーマ・オブジェクトは、必ずdropjavaツールを使用して削除してください。SQLのデータ定義言語(DDL)コマンドを使用してスキーマ・オブジェクトを削除した場合、loadjavaツールおよびdropjavaツールで保持している補助データは更新されません。

ロード内容とロード時期

リソース・ファイルは、必ずloadjavaツールを使用してロードする必要があります。データベースの外で従来のコンパイラを使用して.classファイルを作成する場合、そのファイルは、loadjavaツールを使用してロードする必要があります。クラス・ファイルをロードする別の方法には、ソース・ファイルをロードし、Oracle Databaseで、結果のクラス・スキーマ・オブジェクトをコンパイルおよび管理する方法があります。Oracle Database 12cリリース1 (12.1)では、ほとんどのコードをデータベースの外でコンパイルおよびデバッグしてから、.classファイルをロードするのが最も能率的な方法です。特定のJavaクラスに対して、.classファイルまたは対応する.javaファイルのいずれかをロードできますが、両方はロードできません。

loadjavaツールは、ソース・ファイルとリソース・ファイル、またはクラス・ファイルとリソース・ファイルのいずれかを含むJavaアーカイブ(JAR)ファイルを受け入れます。loadjavaツールにJARファイルまたはZIPファイルを渡すと、デフォルトで、アーカイブをオープンし、そのメンバーを個別にロードします。


注意:

データベースにJARの内容をロードする場合、JAR自体を表すデータベース・オブジェクトを作成するオプションが用意されています。詳細は、「データベース常駐JAR」を参照してください。

前回のロード時から変更されていないファイルは、再ロードされません。このため、JARファイルのロードによるパフォーマンスの低下はほとんどありません。JARファイルのロードは、loadjavaツールの簡単で安全な使用方法です。

同一スキーマ内の2つのスキーマ・オブジェクトに同じクラスを定義することはできません。たとえば、a.javaでクラスxを定義し、xの定義をb.javaに移動する場合を考えてみます。a.javaがすでにロードされている場合、loadjavaツールはb.javaのロードを拒否します。かわりに、次のいずれかの方法を実行する必要があります。

  • a.javaを削除し、b.javaをロードして、次に新しいa.java(xは定義されていません)をロードします。

  • 新しいa.java(xは定義されていません)をロードし、次にb.javaをロードします。

スキーマ・オブジェクトの解決

すべてのJavaクラスには、他のクラスへの参照が含まれています。従来のJVMは、CLASSPATHで指定されたディレクトリ、ZIPファイルおよびJARファイル内でクラスを検索します。一方、Oracle JVMはスキーマでクラス・スキーマ・オブジェクトを検索します。データベース内のクラスごとにリゾルバ仕様があり、これは、CLASSPATHに相当するOracle Databaseの仕様です。たとえば、alphaというクラスのリゾルバ仕様は、alphaで使用するクラスを検索するスキーマをリストします。リゾルバ仕様はクラスごとにあるのに対し、従来のJVMのCLASSPATHはすべてのクラスを対象にしたグローバルな仕様であることに注意してください。

各クラス・スキーマ・オブジェクトには、リゾルバ仕様の他に、クラス間参照バインドのリストがあります。参照リストの各項目の内容は、別のクラスへの参照と次のいずれかです。

  • クラスで参照を使用するときにコールするクラス・スキーマ・オブジェクトの名前

  • 参照が未解決かどうかを示すコード、つまり、対象のスキーマ・オブジェクトが認識されているかどうかを示すコード

参照リストの保守は、Oracle Databaseの機能の1つであるリゾルバが行います。クラス内のクラス間参照ごとに、リゾルバは、クラスのリゾルバ仕様で指定されたスキーマで、参照を満たす有効なクラス・スキーマ・オブジェクトを検索します。すべての参照が解決されると、リゾルバによりこのクラスは「有効」とマークされます。解決処理が行われていないクラス、または正常に解決できなかったクラスは「無効」とマークされます。無効になったスキーマ・オブジェクトに依存しているクラスも、最初のクラスが無効とマークされるときに無効とマークされます。つまり、無効化は1つのクラスからそのクラスを使用しているクラス群、そのクラス群を使用しているクラス群というように、上方に連鎖します。無効なクラスに依存するクラスを解決するとき、リゾルバは最初に参照先クラスを解決しようとします。これは、単に解決処理が行われていないために、無効とマークされている場合があるためです。リゾルバは、有効とマークされているクラスを解決しません。

開発者は、loadjavaツールでクラスを解決するように指示することができ、実行時まで解決を延期することもできます。無効とマークされているクラスを別のクラスでロードしようとすると、自動的にリゾルバが実行されます。実行時以前に解決すると、欠落しているクラスを早期に検出できます。実行時に解決できない場合は、ClassNotFound例外が生成されます。また、次の理由で実行時に解決できない場合があります。

  • データベース・リソースの不足(クラスのツリーが非常に大きい場合)

  • 循環依存が原因のデッドロック

loadjavaツールには、次の2つの解決モードがあります。

  • Load-and-resolve

    -resolveオプションを指定して、コマンドラインで指定したすべてのクラスをロードし、無効とマークしてからクラスを解決します。相互に参照しているクラス群を初めてロードするときは、このモードを使用し、通常は、孤立したクラスを再ロードするときもこのモードを使用します。このモードでは、すべてのクラスをロードしてから解決することによって、この後でクラスの参照先クラスがコマンドの実行中にロードされる場合でも、エラー・メッセージの発生を回避できます。

  • Load-then-resolve

    このモードでは、実行時に各クラスを解決します。-resolveオプションは指定しません。


    注意:

    Javaコンパイラと同様に、loadjavaツールはクラスへの参照を解決しますが、リソースへの参照は解決しません。したがって、クラスに必要なリソース・ファイルを正しくロードする必要があります。

可能な場合は、すべてのクラスのロードが完了するまで、解決を延期してください。延期することによって、使用するクラスがロードされていないために、リゾルバによりそのクラスが無効とマークされるのを回避できます。

スキーマ・オブジェクトのコンパイル

ソース・ファイルをロードすると、Javaソース・スキーマ・オブジェクトが作成または更新され、そのソースから以前に導出されたクラス・スキーマ・オブジェクトが無効になります。クラス・スキーマ・オブジェクトが存在しない場合は、loadjavaツールによって作成されます。古いクラス・スキーマ・オブジェクトは新しくロードしたソースからコンパイルされていないため、loadjavaは古いクラス・スキーマ・オブジェクトを無効にします。新しくロードしたソース(たとえば、クラスA)のコンパイルは、次のいずれかの条件で自動的に実行されます。

  • リゾルバが、クラスBの処理時に、クラスBの参照先クラスAが無効であることを検出した場合

  • コンパイラが、クラスBのソースのコンパイル時に、クラスBの参照先クラスAが無効であることを検出した場合

  • クラス・ローダーが、実行対象のクラスAのロード時に、クラスAが無効であることを検出した場合。

ソース・ファイルのロード時に強制的にコンパイルするには、loadjava -resolveオプションを使用します。

コンパイラはエラー・メッセージを事前定義のUSER_ERRORSビューに書き込みます。つまり、loadjavaツールは、コンパイラの起動によって作成されたメッセージを取得して表示します。

コンパイラはいくつかのオプションを認識します。コンパイラにオプションを指定するには、次の2つの方法があります。-resolveオプションを指定してloadjavaツールを実行した場合は、コマンドラインでコンパイラ・オプションを指定できます。さらに、スキーマごとのデータベース表JAVA$OPTIONSに永続的なコンパイラ・オプションを指定できます。JAVA$OPTIONS表は、loadjavaツールのオプションを使用して選択的にオーバーライドできる、デフォルトのコンパイラ・オプションに使用できます。


注意:

コマンドライン・オプションによって、JAVA$OPTIONS表内の一致しているエントリがオーバーライドおよび消去されます。

JAVA$OPTIONSの行には、オプションの設定を適用するソース・スキーマ・オブジェクトの名前が指定されています。複数行を使用すると、ソース・スキーマ・オブジェクトごとに異なるオプションを設定できます。クラス・ローダーによってコンパイラをコールするか、またはコマンドラインでオプションを指定せずにコンパイラをコールすると、コンパイラはJAVA$OPTIONSでオプションを検索します。コンパイル対象のソース・スキーマ・オブジェクトにJAVA$OPTIONS表のエントリもコマンドラインのオプション値もない場合、コンパイラは次のデフォルト値を使用します。

  • encoding = System.getProperty("file.encoding");

  • online = true

    このオプションは、SQLJ構文が含まれているJavaソースにのみ適用されます。

  • debug = true

    このオプションはjavac -gと同じです。

ojvmtcツール

ojvmtcツールを使用すると、loadjavaツールの実行前にすべての外部参照を解決できます。ojvmtcツールでは、クラス参照の解決に使用する、JAR、クラスまたはディレクトリを指定するクラスパスの仕様が許可されます。外部参照を解決できない場合、指定したオプションに応じて、このツールは未解決の参照または生成されたスタブ・クラスのリストを作成して参照を解決できるようにします。生成されたスタブ・クラスは、実行時に参照される場合、java.lang.ClassNotfoundExceptionをスローします。

構文は次のとおりです。

ojvmtc [-help ] [-bootclasspath] [-server connect_string] [-jar jar_name] [-list] -classpath jar1:path2:jar2  
jars,...,classes

次に例を示します。

ojvmtc -bootclasspath $JAVA_HOME/jre/lib/rt.jar -classpath classdir/lib1.jar:classdir/lib2.jar -jar set.jar app.jar

この例では、rt.jarclassdir/lib1.jarおよびclassdir/lib2.jarを使用して、app.jarの参照を解決します。rt.jarにあるクラスを除き、調査対象のクラスはすべてset.jarに追加されます。

次に、別の例を示します。

ojvmtc -server thin:HR/@localhost:5521:orcl -classpath jar1:jar2 -list app2.jar
Password:password

この例では、接続文字列で指定されたサーバーにあるクラスと、jar1およびjar2を使用して、app2.jarを解決します。欠落している参照がすべてstdoutに表示されます。

表12-1は、このコマンドの引数の一覧です。

表12-1 ojvmtcの引数の概要

引数 説明

-classpath

クロージャ・セットの指定のJARおよびクラスを使用します。

-bootclasspath

クロージャの指定のクラスを使用します。ただし、クロージャ・セットにこれらのクラスを含めません。

-server connect_string

-bootclasspathと同じ方法で表示クラスを使用してサーバーに接続します。

connect_string thin|OCI

特定のThinドライバまたはOracle Call Interface(OCI)ドライバを使用してサーバーに接続します。

Thinドライバを使用する場合、構文は次のようになります。

thin:user/passwd@host:port:sid

OCIドライバを使用する場合、構文は次のようになります。

oci:user/passwd@host:port:sid
oci:user/passwd@tnsname
oci:user/passwd@(connect descriptor)

-jar jar_name

クロージャ・セットの各クラスをJARに書き込み、欠落しているクラスのスタブを生成します。

-list

欠落しているクラスの一覧を作成します。


loadjavaツール

loadjavaツールは、ファイルからスキーマ・オブジェクトを生成してスキーマにロードします。スキーマ・オブジェクトはJavaソース、クラスおよびデータファイルから作成できます。また、loadjavaツールでは、SQLJファイルからもスキーマ・オブジェクトを作成できます。

クラスをロードするには、次のSQLデータベース権限が必要です。

  • スキーマにロードする場合はCREATE PROCEDUREおよびCREATE TABLE権限。

  • 別のスキーマにロードする場合はCREATE ANY PROCEDUREおよびCREATE ANY TABLE権限。

  • oracle.aurora.security.JServerPermission.loadLibraryInClass.classname

loadjavaツールは、コマンドラインから実行するか、またはDBMS_JAVAクラスに含まれるloadjavaメソッドを使用して実行できます。使用しているJavaアプリケーション内からこのツールを実行する方法は、次のとおりです。

call dbms_java.loadjava('... options...');

オプションは、loadjavaツールのコマンドラインで指定できるオプションと同じです。各オプションは空白で区切ります。オプションをカンマで区切らないでください。ただし、空白を含む-resolverオプションは例外です。-resolverの場合は、次に示すように、他のすべてのオプションを最初の入力パラメータで指定し、-resolverオプションは2番目のパラメータで指定します。

call dbms_java.loadjava('..options...', 'resolver_options');

-thin-oci-userおよび-passwordの各オプションは、loadjavaコマンドライン・ツールのデータベース接続に関連しているため、指定しないでください。出力はstderrに送信されます。serveroutputをオンに設定し、必要に応じてdbms_java.set_outputをコールします。


注意:

loadjavaツールは、$ORACLE_HOMEの下のbinディレクトリに格納されています。

loadjavaツールは、終了直前に、正常に処理されたかどうかをチェックします。発生したすべての障害は、次のヘッダーの後に要約が示されます。

The following operations failed

データベースへの接続が失われるなど、条件によっては、loadjavaツールが完了前に停止する場合があります。エラーは次の構文で表示されます。

exiting: error_reason

この項の内容は、次のとおりです。

構文

loadjavaツールのコマンド構文は次のとおりです。


注意:

  • クラス参照の解決では、-genmissingオプションおよび-genmissingjarオプションよりも、(* -)オプションが推奨されます。(* -)オプションの詳細は、「存在しないクラスへの参照の許可」を参照してください。

  • -genmissingオプションおよび-genmissingjarオプションは、オプション・ファイルまたはオプション表では使用できません。これらのオプションは、すべてのクラスのロードには適用可能で、特定のクラスにのみ使用することはできません。


loadjava {-user | -u} user [@database] [options]
file.java | file.class | file.jar | file.zip |
file.sqlj | resourcefile | URL...
  [-casesensitivepub]
  [-cleargrants]
  [-debug]
  [-d | -definer]
  [-dirprefix prefix]
  [-e | -encoding encoding_scheme]
  [-fileout file]
  [-f | -force]
  [-genmissing]
  [-genmissingjar jar_file]
  [-g | -grant user [, user]...]
  [-help]
  [-jarasresource]
  [-noaction]
  [-nosynonym]
  [-nousage]
  [-noverify]
  [-o | -oci | oci8]
  [-optionfile file]
  [-optiontable table_name]
  [-publish package]
  [-pubmain number]
  [-recursivejars]
  [-r | -resolve]
  [-R | -resolver "resolver_spec"]
  [-resolveonly]
  [-S | -schema schema]
  [-stdout]
  [-stoponerror]
  [-s | -synonym]
  [-tableschema schema]
  [-t | -thin]
  [-unresolvedok]
  [-v | -verbose]
  [-jarsasdbobjects]
  [-prependjarnames]
  [-nativecompile]

引数の概要

表12-2は、loadjavaツールのコマンド引数の一覧です。オプションを変えて同じファイルを指定して複数回loadjavaツールを実行すると、最後の起動時に指定したオプションが保持されます。ただし、次の2つの例外があります。

  • ダイジェスト表のエントリに一致しているためにloadjavaツールによってファイルがロードされない場合は、コマンドラインで指定した大半のオプションがスキーマ・オブジェクトに反映されません。例外は-grant-resolveで、これらのオプションは必ず反映されます。loadjavaツールでダイジェスト表の参照をスキップするように指示するには、-forceオプションを使用する必要があります。

  • -grantオプションは累積です。特定スキーマの特定クラスに対して起動されたすべてのloadjavaツールに指定されているユーザーには、EXECUTE権限が付与されます。

表12-2 loadjavaの引数の概要

引数 説明

filenames

.java.class.sqlj.ser.jar.zipおよびリソース・ファイル名の引数を、必要な数だけ任意の順序で組み合せて指定できます。

-proxy host:port

クラス、リソースおよびJavaソースをロードするために、サーバー・ホストまたはloadjavaクライアントに物理的にアクセスできない場合、loadjavaツールでHTTP URLを使用して、JAR、クラス・ファイルまたはリソースを指定し、リモート・サーバーからクラスをロードできます。hostはホスト名またはアドレス、portはプロキシ・サーバーが使用するポートです。ロードするファイルのタイプ(JAR、クラス、リソースまたはJavaソース)をloadjavaツールで決定できるようにURLを実装する必要があります。次に例を示します。

loadjava –u HR –r –v –proxy proxy_server:1020 http://my.server.com/this/is /the/path/my.jar
Password: password

URLサポートがサーバー内で使用される場合、リモート・ソースにアクセスするための適切なJavaパーミッションが必要です。ftp:file:などのURLもサポートされます。

-casesensitivepub

公開時に、大/小文字の区別がある名前が作成されます。名前がすべて大文字でないかぎり、通常、PL/SQLでは名前を引用符で囲む必要があります。

-cleargrants

-grantオプションを指定すると、loadjavaツールはクラス、ソースおよびリソースにEXECUTE権限を付与します。ただし、権限の取消しは行いません。-cleargrantsを指定すると、loadjavaツールは、-grantオペランドで指定されたユーザーとロールに実行権限を付与する前に、すでに付与されているすべての実行権限を取り消します。たとえば、実行権限をHRのみに付与する場合、適切なオプションは次のようになります。

-grant HR -cleargrants

-debug

SQLロギングをオンにします。

-definer

デフォルトでは、クラス・スキーマ・オブジェクトはその実行者の権限で実行されます。このオプションは、定義者の権限をクラスに付与します。このオプションは、UNIXのsetuid機能に概念的に類似しています。

-dirprefix prefix

prefixで始まるファイルまたはJARエントリの場合は、スキーマ・オブジェクトの名前が決定する前に、このprefixが名前から削除されます。クラスとソースの場合、スキーマ・オブジェクトの名前はその内容によって決定されます。したがって、リソースのみがこのオプションの影響を受けます。

-encoding

コンパイラのためにソース・ファイルのエンコーディングを識別し、JAVA$OPTIONS表に一致する値がある場合はオーバーライドします。値は、javac -encodingオプションの値と同じです。コマンドラインまたはJAVA$OPTIONS表でエンコーディングを指定しない場合は、次のコードから戻される値がエンコーディング値とみなされます。

System.getProperty("file.encoding");

このオプションはソース・ファイルのロード時のみ有効です。

-fileout file

すべてのメッセージを指定のファイルに表示します。

-force

ダイジェスト表のエントリに一致する場合でも、ファイルが強制的にロードされます。

-genmissing

loadjavaツールの処理対象のクラスが参照するクラスとメソッドを判別します。データベースまたはファイル引数に存在しないクラスを欠落しているクラスと呼びます。このオプションは、欠落しているクラスに対して、参照対象のすべてのメソッドが含まれるダミーの定義を生成します。次に、生成されたクラスをデータベースにロードします。この処理は、クラスの解決の前に実行されます。

参照をソースから検出することは、参照をクラス・ファイルから検出するよりも困難であり、通常、ライブラリの配布にソースは使用しないため、loadjavaツールはこの処理をソース・ファイルに対して実行しません。

欠落しているクラスがロードされるスキーマは、参照元クラスが他のスキーマで作成された場合でも、-userオプションで指定されたスキーマになります。作成されたクラスにはフラグが設定されるため、複数のツールで認識できます。これは特に、検証機能が生成されたクラスを認識するために必要です。

-genmissingjar jar_file

このオプションは、-genmissingと同じアクションを実行します。さらに、生成されたすべてのクラスの定義が含まれるjar_fileというJARファイルを作成します。

-grant

ロードされたクラスに対するEXECUTE権限を、リスト中のユーザーに付与します。ユーザー名は、空白ではなくカンマで区切って、必要な数だけ任意の順序で組み合せて指定できます。

EXECUTE権限を別のスキーマのオブジェクトに付与するには、WITH GRANTオプションを使用して元のCREATE PROCEDURE権限が付与されている必要があります。

注意:

  • -grantは累積のオプションです。ユーザーはEXECUTE権限を持つユーザーのリストに追加されます。権限を削除するには、-cleargrantsオプションを使用します。

  • スキーマ名は必ず大文字で指定します。

-help

loadjavaツールとそのオプションの使用方法に関するメッセージを表示します。

-jarasresource

JARファイルを解凍してその中の各クラスをロードするかわりに、JARファイル全体をリソースとしてスキーマにロードします。脚注1

-noaction

ファイルに対してアクションを実行しません。これには、スキーマ・オブジェクトの作成、実行パーミッションの付与などのアクションが含まれます。このオプションは、通常、特定のクラスがJARファイルに作成されるのを抑制するために、オプション・ファイル内で使用します。コマンドラインで使用すると、オプション・ファイルでオーバーライドされないかぎり、loadjavaツールはすべてのファイルを無視します。ただし、JARファイルは検査の対象で、ファイル内にMETA-INF/loadjava-optionsエントリがあるかどうかが判別されます。エントリがある場合は、オプション・ファイルが処理されます。オプション・ファイル内の-actionオプションは、コマンドラインで指定された-noactionオプションをオーバーライドします。

-norecursivejars

他のJARファイルに含まれているJARファイルをリソースとして処理します。これはデフォルトの動作です。このオプションは、-recursivejarsオプションをオーバーライドするために使用します。

-nosynonym

クラスのPUBLICシノニムを作成しません。これはデフォルトの動作です。このオプションは、-synonymオプションをオーバーライドします。

-nousage

オプションが指定されていない場合、または-helpオプションが指定されている場合は、使用方法についての指定のメッセージを抑制します。

-noverify

クラスがバイトコードの検証なしにロードされます。このオプションを使用するには、oracle.aurora.security.JServerPermission(Verifier)を付与されていることが必要です。このオプションを効果的にするには、-resolveと併用する必要があります。

-oci | -oci8

loadjavaツールに対して、JDBC Oracle Call Interface (OCI)ドライバを使用してデータベースと通信するように指示します。-oci-thinは相互に排他的です。いずれも指定しない場合は、デフォルトで-ociが使用されます。-ociを選択すると、-user値の構文が暗黙的に使用されます。URLの指定は必要ありません。

-optionfile file

loadjavaオプションでファイルを指定できます。

-optiontable tablename

このオプションは、パターンおよびオプションのソースがファイルではなくSQL表であること以外は、-optionfileに類似しています。

-publish package

packageは、loadjavaツールによって作成または置換されます。このパッケージには、適格なメソッドのラッパーが定義されます。オプション・ファイルを使用すると、loadjavaツールの1回の起動で複数のパッケージを作成できます。各パッケージでは、メソッドと同じ名前変換が実行されます。

-pubmain number

java.lang.String[]型の単一の引数を取るメソッドに適用される特殊なケースです。SQLプロシージャまたはファンクションの複数の異体が作成され、それぞれが異なる数のVARCHAR型の引数を取ります。特に、最大でnumberの数まで引数を取る異体が作成されます。デフォルト値は3です。このオプションは、java.lang.String[]型の単一の引数を取るメソッドのほか、mainにも適用されます。

-recursivejars

通常、loadjavaツールはJARファイル内で.jar拡張子を持つエントリを検出すると、そのエントリをリソースとしてロードします。このオプションを指定すると、loadjavaツールは、該当するJARファイルをトップレベルのJARファイルと同様に処理します。つまり、エントリを読み取り、クラス、ソースおよびリソースをロードします。

-resolve

コマンドラインのすべてのクラスがロードされた後に、必要に応じて、クラス内の外部参照をコンパイルおよび解決します。-resolveオプションを指定しないと、loadjavaツールはファイルをロードしますが、コンパイルまたは解決を実行しません。

-resolver

新しくロードされたクラスにバインドされる、明示的なリゾルバ仕様を指定します。-resolverを指定しないと、カレント・ユーザーのスキーマとPUBLICを含んだデフォルトのリゾルバ仕様が使用されます。

-resolveonly

loadjavaツールで最初の作成手順をスキップします。権限付与、解決、シノニムの作成などは実行されます。

-schema

スキーマ・オブジェクトを作成するスキーマを指定します。このオプションを指定しないと、-userのスキーマが使用されます。自分のスキーマ以外にスキーマ・オブジェクトを作成するには、次の権限が必要です。

  • CREATE TABLEまたはCREATE ANY TABLE

  • CREATE INDEXまたはCREATE ANY INDEX

  • SELECT ANY TABLE

  • UPDATE ANY TABLE

  • INSERT ANY TABLE

  • DELETE ANY TABLE

  • CREATE PROCEDUREまたはCREATE ANY PROCEDURE

  • ALTER ANY PROCEDURE

さらに、クラスに対するJServerPermission loadLibraryInClassも必要です。

注意: 前述の権限を付与すると、SYSスキーマ以外のすべてのスキーマでの表の作成および操作が可能になります。セキュリティ上の理由から、これらの設定は十分に注意して使用することをお薦めします。

-stdout

stderrではなく、stdoutに出力を送信します。

-stoponerror

通常、loadjavaツールでは、ファイルの処理中にエラーが発生した場合、メッセージを発行して他のクラスの処理を継続します。このオプションを指定すると、エラーの発生時に処理を停止します。さらに、Javaオブジェクトに適用され、クラスのロード先スキーマのUSER_ERROR表に格納されているすべてのエラーをレポートします。ただし、ORA-29524エラーはレポートしません。このエラーは、参照先のクラスが解決できないため、クラスを解決できない場合に生成されます。したがって、このエラーは、参照先のクラスが未解決であるために起こった、二次的な結果になります。

-synonym

ロードされるクラスに対してPUBLICシノニムを作成し、ロード先スキーマの外側からもクラスにアクセスできるようにします。このオプションを指定するには、CREATE PUBLIC SYNONYM権限が必要です。ソース・ファイルに対して-synonymを指定すると、そのソース・ファイルからコンパイルされたクラスは、-synonymを指定してロードした場合と同様に処理されます。

-tableschema schema

Javaファイルの接続先スキーマではなく、指定したスキーマ内にloadjavaツールの内部表を作成します。

-thin

loadjavaツールに対して、JDBC Thinドライバを使用してデータベースと通信するように指示します。-thinを選択すると、-user値の構文が暗黙的に使用されます。-userオプションを使用して、適切なURLを指定する必要があります。

-unresolvedok

-resolveと組み合せると、未解決のエラーが無視されます。

-user

ユーザー名、パスワードおよびデータベース接続文字列を指定します。ファイルはこのデータベース・インスタンスにロードされます。

-verbose

loadjavaツールに対して、実行中に詳細なステータス・メッセージを表示するように指示します。-verboseオプションを使用して、ダイジェスト表のエントリに一致したためにloadjavaツールがファイルをロードしなかった場合を調べます。

-jarsasdbobjects

現在のloadjavaツール・コマンドで処理されるJARがデータベース常駐JARとしてデータベースに格納されることを示します。脚注2

-prependjarnames

-jarsasdbobjectsオプションと一緒に使用します。このオプションにより、異なるJARの同じ名前のクラスが同じスキーマ内で共存できます。これを行うには、クラス名の先頭にJARの名前のバージョンを追加して、データベース・オブジェクトの一意の名前を生成します。


脚注1この方法でJARファイルをロードする場合、これを解決や実行に使用することはできません

脚注2この方法でJARファイルをロードする場合、これを解決や実行に使用できます

引数の詳細

この項では、動作が複雑なloadjavaツールの一部の引数について、表12-2の概要よりさらに詳しく説明します。

ファイル名

.class.java.sqlj.jar.zipおよびリソース・ファイルは、必要な数だけ任意の順序で指定できます。JARファイルまたはZIPファイルを指定すると、loadjavaツールは、そのJARまたはZIPでファイルを処理します。JARまたはZIPのスキーマ・オブジェクトはありません。JARまたはZIPに別のJARまたはZIPが含まれていると、loadjavaツールはこれらのファイルを処理しません。

ファイルのロード方法としては、JARまたはZIPにファイルをまとめ、アーカイブとしてロードすることをお薦めします。アーカイブをロードすることで、リソース・スキーマ・オブジェクトのネーミングの手間を省くことができます。Java Development Kit (JDK)で使用するJARまたはZIPがある場合も、loadjavaツールでロードでき、この場合、リソース・スキーマ・オブジェクトのネーミングについては知る必要がありません。

スキーマ・オブジェクト名はファイル名とは異なり、loadjavaツールは異なるタイプのスキーマ・オブジェクトを異なる方法でネーミングします。クラス・ファイルは自己識別できるため、loadjavaツールによるクラス・ファイル名のスキーマ・オブジェクト名へのマッピングは開発者には表示されません。ソース・ファイル名のマッピングも開発者には表示されません。loadjavaツールは、ファイル内に定義されている最初のクラスの完全修飾名をスキーマ・オブジェクト名とします。JARファイルとZIPファイルにも、それぞれのファイルの名前が含まれています。

ただし、リソース・ファイルは自己認識できません。loadjavaツールは、引数で指定したとおりのリテラルなファイル名からJavaリソース・スキーマ・オブジェクト名を生成します。リソース・スキーマ・オブジェクトがクラスで使用され、リソースの正しい指定方法がわかりにくい場合があるため、コマンドラインで正しくリソース・ファイル名を指定することが重要です。

各リソース・ファイルを正確にロードする最善の方法は、パッケージ・ツリーの最上部からloadjavaツールを実行し、そのディレクトリに相対するリソース・ファイル名を指定する方法です。


注意:

パッケージ・ツリーの最上部とは、CLASSPATHで指定するディレクトリです。

この規則に従わない場合は、次のリソース・ファイル・ネーミングに従ってください。リソース・ファイルをロードすると、loadjavaツールはコマンドラインで指定したとおりのリテラルなリソース・ファイル名からリソース・スキーマ・オブジェクト名を生成します。たとえば、次のように入力したとします。

% cd /home/HR/javastuff
% loadjava options alpha/beta/x.properties
% loadjava options /home/HR/javastuff/alpha/beta/x.properties

同じファイルを相対パス名と絶対パス名で指定していますが、loadjavaツールはalpha/beta/x.propertiesROOT/home/HR/javastuff/alpha/beta/x.propertiesの2つのスキーマ・オブジェクトを作成します。リソース・スキーマ・オブジェクトの名前は、入力したとおりのファイル名から生成されます。

クラスは、リソース・ファイルを相対的に参照することも絶対的に参照することもできます。loadjavaツールとクラス・ローダーで同じスキーマ・オブジェクト名を使用するには、クラスからgetResource()またはgetResourceAsString()に渡す名前をコマンドラインに入力します。

リソース・ファイルは、次のようにJARでロードできます。この場合、名前をコマンドラインに正しく入力するために、クラスで使用するリソース名が相対名か絶対名かを記憶したり、ディレクトリを変更する必要はありません。

% cd /home/HR/javastuff
% jar -cf alpharesources.jar alpha/*.properties
% loadjava options alpharesources.jar

処理をさらに簡略化するには、クラス・ファイルとリソース・ファイルの両方をJARで格納します。これによって、次のコマンドを起動しても同じ処理を実行できます。

% loadjava options alpha.jar
% loadjava options /home/HR/javastuff/alpha.jar

前述したloadjavaツール・コマンドは、JARファイルの内容をロードするには任意のパス名が使用できることを示しています。冗長なコマンドを実行した場合でも、loadjavaツールは、ファイルを2回ロードする必要がないことをダイジェスト表を通じて認識します。したがって、loadjavaツールの前回の起動後に変更されたファイルが少ない場合でも、JARファイルの再ロードには、考えられているほどの時間はかかりません。

definer

{-definer | -d}

このオプションはストアド・プロシージャにおける定義者権限に相当し、概念的にはUNIXのsetuid機能に類似しています。ただし、setuidはプログラム全体に適用されますが、-definerオプションは各クラスに適用できます。さらに、定義者ごとに異なる権限を付与することもできます。アプリケーションは多数のクラスで構成される場合があるため、意図した結果を得るには、-definerを注意して適用する必要があります。つまり、クラスに必要以上の権限を付与しないように注意してください。

noverify

[-noverify]

このオプションを指定すると、クラスがバイトコードの検証なしにロードされます。このオプションを実行するには、oracle.aurora.security.JServerPermission(Verifier)を付与されていることが必要です。また、このオプションは、-resolveと併用する必要があります。

検証機能によって、形式が無効なJavaバイナリがサーバーにロードされて実行されるのを防止できます。ロードするJARまたはクラスが有効であることが判明している場合は、このオプションによってloadjavaツールの関連プロセスを高速化できます。検証プロセス時には、解析のパフォーマンスを向上させるためのOracle Database固有の最適化が実行されます。したがって、このオプションを使用すると、アプリケーションの解析のパフォーマンスが低下する場合があります。

optionfile

[-optionfile <file>]

このオプションを使用すると、loadjavaツールで指定できる各種オプションにファイルを指定できます。このファイルは、他のloadjavaツール・オプションが処理される前に、loadjavaツールで読み取られて処理されます。このファイルには1行以上が含まれ、各行にはパターンと一連のオプションが含まれます。各行は、改行文字(\n)で終了している必要があります。

loadjavaツールで処理されるファイルまたはJARエントリごとに、作成されるスキーマ・オブジェクトのロング名がパターンと照合してチェックされます。パターンは、任意の文字列を示すワイルドカード(*)で終了している場合があり、使用しない場合、パターンは名前と完全に一致する必要があります。

一致するJavaスキーマ・オブジェクトに適用されるオプションは、行の後半で指定します。オプションは、コマンドライン・オプションを置換するのではなく、コマンドライン・オプションに追加されます。複数の行が名前と一致する場合、一致する行はパターンの長さが短い順にソートされ、各行のオプションが追加されます。通常、loadjavaツール・オプションは累積ではありません。後から追加されたオプションは以前のオプションをオーバーライドします。つまり、長いパターンで行に指定されたオプションは、短いパターンで行に指定されたオプションをオーバーライドします。

このファイルは、java.io.StreamTokenizerで解析されます。

このファイルでJavaのコメントを使用できます。行のコメントは#で開始します。空の行は無視されます。引用文字には二重引用符(")を使用してください。つまり、空白を含むオプションは、二重引用符で囲む必要があります。-user-verboseなどの特定のオプションは、loadjavaツールの処理全体に影響を与えますが、個別のJavaスキーマ・オブジェクトに対して実行されるアクションには影響を与えません。このようなオプションがオプション・ファイルに存在する場合は無視されます。

アプリケーションをパッケージ化するために、loadjavaツールは処理対象の各JARファイルでMETA-INF/loadjava-optionsエントリを検索します。このエントリが検出された場合、そのエントリは、JARファイル内の他のすべてのエントリに適用されるオプション・ファイルとして処理されます。ただし、loadjavaツールは、JARファイルで出現する順にエントリに対する処理を実行します。

loadjavaツールがMETA-INF/loadjava-optionsを処理する前にエントリを部分的に処理した場合、適用可能なオプションに準拠するようにスキーマ・オブジェクトの変更を試みます。たとえば、loadjavaツールは、定義者権限で作成される必要があったクラスが実行者権限で作成された場合に、そのクラスを変更します。-noactionに対する修正は、作成済のスキーマ・オブジェクトを削除することです。loadjavaツールの起動前にスキーマ・オブジェクトが存在していた場合にそれが削除されることを除き、これによって正しい結果が得られます。

optiontable

[-optiontable table_name]

このオプションでは、クラスのプロパティを永続的に指定できます。表をロードする機構はありません。表名には、3つの文字型の列、PATTERN、OPTIONおよびVALUEを含める必要があります。PATTERNの値は、オプション・ファイルのパターンと同様に解釈されます。他の2つの列は、対応するコマンドライン・オプションで、オペランドを取ります。たとえば、次のコマンドを使用して表FOOを作成するとします。

create table foo (pattern varchar2(2000), option_name varchar2(2000), value varchar2(2000));

この場合、optiontableオプションを次のように使用できます。

loadjava -optiontable foo myjar.jar

オペランドを取らないオプションの場合はVALUE列をNULLにします。表の行は、オプション・ファイルの行と同様に処理されます。特定のスキーマ・オブジェクトのオプションを決定するために行が検査され、一致するとそのオプションがオプション・リストに追加されます。2つの行に、-synonymと-nosynonymなど、同じパターンだが矛盾するオプションがある場合、どちらが優先されるかは不明です。2つの行のパターン列とオプション列が同じである場合、どちらのVALUEが優先されるかは不明です。

publish

[-publish <package>]
[-pubmain <number>]

公開オプションを使用すると、loadjavaツールは処理済のクラスに含まれるメソッドのPL/SQLラッパーを作成します。通常、ユーザーは、JAR内にあるいくつかのクラスのラッパーのみを公開します。このオプションは、オプション・ファイルで指定されている場合に最も役立ちます。

公開可能にするには、メソッドが次の条件を満たす必要があります。

  • メソッドがpublicクラスのメンバーであることが必要です。

  • メソッドをpublicおよびstaticとして宣言する必要があります。

  • メソッドのシグネチャは、次の規則を満たしてマップ可能であることが必要です。

    • 引数および戻り値のJavaの算術型は、NUMBERにマップされます。

    • 引数および戻り型として使用されるcharは、VARCHARにマップされます。

    • 引数および戻り型として使用されるjava.lang.Stringは、VARCHARにマップされます。

    • メソッドの唯一の引数がjava.lang.String型である場合は、-pubmainオプションで説明したように、特別な規則が適用されます。

    • 戻り型がvoidになると、プロシージャが作成されます。

    • 戻り型が算術型、charまたはjava.lang.String型の場合は、ファンクションが作成されます。

前述の規則に該当しない引数または戻り型を取るメソッドは、適格ではありません。SQL引数のOUTIN OUTOBJECT型およびその他多数のSQL機能に対するプロビジョニングはありません。

resolve

{-resolve | -r}

以前ロードしたクラスをloadjavaツールで強制的にコンパイルおよび解決するには、-resolveを使用します。解決はロード後に個別に行われるため、-forceを指定する必要はありません。

resolver

{-resolver | -R} resolver_specification

このオプションは、loadjavaツールが作成または置換したクラス・スキーマ・オブジェクトに明示的なリゾルバ仕様を対応付けます。

リゾルバ仕様は1つ以上の項目で構成されます。各項目の内容は、次の構文で表された名前仕様とスキーマ仕様です。

"((name_spec schema_spec) [(name_spec schema_spec)] ...)"

名前仕様は、import文における名前に類似しています。Javaの完全修飾クラス名、最終要素がワイルドカード文字のアスタリスク(*)のパッケージ名、またはアスタリスク(*)のみを指定できます。ただし、名前仕様の要素間は、ピリオド(.)ではなくスラッシュ(/)で区切る必要があります。たとえば、名前仕様a/b/*は、名前がa.bで始まるすべてのクラスに一致します。特殊な名前である*はすべてのクラス名に一致します。

スキーマ仕様として、スキーマ名またはワイルドカード文字のダッシュ(-)を指定できます。ワイルドカードは、スキーマを特定するものではなく、一致する名前への参照が解決できない場合でもクラスを無効とマークしないように解決処理に対して指示するために使用します。テスト対象のクラスで参照しているクラスをロードできない、またはロードしない場合は、ダッシュ(-)を使用します。たとえば、クラスでGUIクラスを参照していても、サーバーでの実行時はGUIがないため、このGUIクラスはコールされません。

解決処理では、名前が名前仕様に一致するスキーマ・オブジェクトが、パートナ・スキーマ仕様で指定されているスキーマで検索されます。

この解決処理では、リゾルバ仕様のリスト順にスキーマが検索されます。次に例を示します。

-resolver '((* HR) (* PUBLIC))'

これは、最初にHRで、次にPUBLICで参照を検索することを意味します。参照が解決されない場合は、参照元クラスを無効とマークし、エラー・メッセージを表示します。

次の例を考えてみます。

-resolver "((* HR) (* PUBLIC) (my/gui/* -))"

これは、最初にHRで、次にPUBLICで参照を検索することを意味します。参照先がパッケージmy.gui内のクラスで、その参照が見つからない場合は、参照元クラスを有効とマークし、エラー・メッセージは表示しません。参照先がmy.gui内のクラスでなく、その参照が見つからない場合は、参照元クラスを無効とマークし、エラー・メッセージを表示します。

user

{-user | -u} user/password[@database_url]

デフォルトでは、loadjavaツールは、-userオプションで指定されたログイン・スキーマにロードされます。別のロード先スキーマを指定するには、-schemaオプションを使用します。そのスキーマにログインする必要はありませんが、スキーマを変更するパーミッションが必要になります。

@database_urlの形式は、次に説明するように、-ociを指定するか、または-thinを指定するかによって異なります。

  • -oci:@database_urlはオプションです。指定しない場合、loadjavaツールはユーザーのデフォルト・データベースを使用します。指定した場合、database_urlはTNS名またはOracle Net Servicesの名前/値リストのいずれかになります。

  • -thin:@database_urlは必須です。形式はhost:lport:SIDです。

    各項目は次のとおりです。

    • hostは、データベースが動作しているコンピュータの名前です。

    • lportは、Oracle Net Services接続のリスニング用に構成されたリスナー・ポートです。デフォルト・インストールでは5521です。

    • SIDは、データベース・インスタンスの識別子です。デフォルト・インストールではORCLです。

次に、loadjavaツールのコマンド例を示します。

  • デフォルトのOCIドライバでデフォルト・データベースに接続し、JAR内のファイルをTESTスキーマにロードしてから、ファイルを解決する場合

    loadjava -u joe -resolve -schema TEST ServerObjects.jar
    Password: password
    
  • JDBC Thinドライバで接続し、クラス・ファイルとリソース・ファイルをロードして、各クラスを解決する場合

    loadjava -thin -u HR@dbhost:5521:orcl \
      -resolve alpha.class beta.props
    Password: password
    
  • alpha.classを実行できるユーザー群にBettyとBobを追加する場合

    loadjava -thin -schema test -u HR@localhost:5521:orcl \
      -grant BETTY,BOB alpha.class
    Password: password
    
    

jarsasdbobjects

現在のloadjavaツールで処理されるJARと、それらに含まれるクラスがデータベースに格納されること、および、クラスとJARとの関連付けに関する情報がデータベースで保持されることを示します。つまり、この引数は、現在のloadjavaツールで処理されるJARが、データベース常駐JARとしてデータベースに格納されることを示します。

prependjarnames

-jarsasdbobjectsオプションと一緒に使用します。このオプションにより、異なるJARの同じ名前のクラスが同じスキーマ内で共存できます。

dropjavaツール

dropjavaツールは、loadjavaツールと逆の処理を実行します。コマンドラインでのファイル名およびJARファイルまたはZIPファイルの内容をスキーマ・オブジェクト名に変換してから、スキーマ・オブジェクトとそれに対応するダイジェスト表の行を削除します。.java.class.sqlj.ser.zip.jarおよびリソース・ファイル名をコマンドラインに任意の順序で入力できます。

また、スキーマ・オブジェクト名を、直接dropjavaツールに指定できます。.jar.zip.class.javaまたは.sqljで終わらないコマンドライン引数は、スキーマ・オブジェクト名とみなされます。複数のスキーマ・オブジェクトに該当するスキーマ・オブジェクト名を指定すると、該当するすべてのスキーマ・オブジェクトが削除されます。

クラスを削除すると、そのクラスに依存しているクラス群が無効になり、これは、上方に再帰的に連鎖します。ソースを削除すると、それから導出されたクラスが削除されます。


注意:

Javaスキーマ・オブジェクトは、最初にロードしたときと同じ方法で削除する必要があります。.sqljソース・ファイルをロードしてサーバーで変換する場合は、同じソース・ファイルでdropjavaツールを実行する必要があります。クライアントで変換してからクラスおよびリソースを直接ロードする場合は、同じクラスおよびリソースでdropjavaツールを実行します。

dropjavaツールは、コマンドラインから実行するか、またはDBMS_JAVAクラスのdropjavaメソッドを使用して実行できます。使用しているJavaアプリケーション内からdropjavaツールを実行するには、次のコマンドを使用します。

call dbms_java.dropjava('... options...');

オプションは、コマンドラインで指定する内容と同じです。各オプションは空白で区切ります。オプションをカンマで区切らないでください。ただし、-resolverオプションは例外です。接続は常にカレント・セッションに対して確立されます。したがって、-userオプションを使用して別のユーザー名を指定することはできません。

-resolverの場合は、他のすべてのオプションを最初に指定してカンマ(,)で区切り、次に-resolverオプションとその定義を指定してください。-thin-oci-userおよび-passwordの各オプションは、loadjavaツールのデータベース接続に関連しているため、指定しないでください。出力はstderrに送信されます。serveroutputをオンに設定し、必要に応じてdbms_java.set_outputをコールします。

この項の内容は、次のとおりです。

構文

dropjavaツールのコマンド構文は次のとおりです。

dropjava [options] {file.java | file.class | file.sqlj | 
file.jar | file.zip | resourcefile} ...
  -u | -user user/[password][@database]
  [-genmissingjar JARfile]
  [-jarasresource]
  [-o | -oci | -oci8]
  [-optionfile file]
  [-optiontable table_name]
  [-S | -schema schema]
  [-stdout]
  [-s | -synonym]
  [-t | -thin]
  [-v | -verbose]
 [-list]
[-listfile]

引数の概要

表12-3は、dropjavaツールの引数の一覧です。

表12-3 dropjavaの引数の概要

引数 説明

-user

ユーザー名、パスワードおよびデータベース接続文字列(オプション)を指定します。ファイルはこのデータベース・インスタンスから削除されます。

filenames

.java.class.sqlj.ser.jar.zipおよびリソース・ファイル名を、必要な数だけ組み合せて指定します。

-genmissingjar JARfile

このオプションのオペランドを処理対象のファイルとして扱います。

-jarasresource

以前にリソースとしてロードされたJARファイル全体を削除します。

-oci | -oci8

dropjavaツールに対して、OCI JDBCドライバを使用してデータベースに接続するように指示します。-ociオプションと-thinオプションは相互に排他的です。いずれも指定しない場合は、デフォルトで-ociオプションが使用されます。-ociオプションを選択すると、-user値の形式が暗黙的に使用されます。

-optionfile file

使用方法はloadjavaツールと同じです。

-optiontable table_name

使用方法はloadjavaの場合と同じです。

-schema schema

スキーマ・オブジェクトを削除するスキーマを指定します。このオプションを指定しないと、ログイン・スキーマが使用されます。他のユーザーのスキーマからスキーマ・オブジェクトを削除するには、DROP ANY PROCEDURE権限およびUPDATE ANY TABLE権限が必要です。

-stdout

stderrではなく、stdoutに出力を送信します。

-synonym

loadjavaツールを使用して作成されたPUBLICシノニムを削除します。

-thin

dropjavaツールに対して、JDBC Thinドライバを使用してデータベースと通信するように指示します。-thinオプションを選択すると、-user値の形式が暗黙的に使用されます。

-verbose

dropjavaツールに対して、実行中に詳細なステータス・メッセージを出力するように指示します。

–list

コマンドラインにリストされたクラス、Javaソースまたはリソースがクライアント・マシンまたはサーバー・マシン上に存在しない場合、これらを削除します。

-listfile

ファイルを読み取り、そのファイルにリストされたクラス、Javaソースまたはリソースがクライアント・マシンまたはサーバー・マシン上に存在しない場合はこれらを削除します。ファイルには、行ごとに完全なクラス名、Javaソース名またはリソース名の内部表現が含まれます。


引数の詳細

この項では、dropjavaツールの一部の複雑な引数について説明します。

ファイル名

dropjavaツールは、ほとんどのファイル名をloadjavaツールと同じ方法で解析します。

  • .classファイル

    ファイル内のクラス名を検索して、対応するスキーマ・オブジェクトを削除します。

  • .javaおよび.sqljファイル

    ファイル内の最初のクラス名を検索して、対応するスキーマ・オブジェクトを削除します。

  • .jarおよび.zipファイル

    アーカイブ・ファイル名を、コマンドラインに入力された場合と同様に処理します。

dropjavaツールは、これ以外の拡張子が付いているファイル名、または拡張子が付いていないファイル名をスキーマ・オブジェクト名として解析し、その名前に一致するすべてのソース・オブジェクト、クラス・オブジェクトおよびリソース・オブジェクトを削除します。

dropjavaツールは、スキーマ・オブジェクトに一致しないファイル名を検出すると、メッセージを表示し、残りのファイル名を処理します。

user

{-user | -u} user/password[@database]

@databaseの形式は、-ociを指定するか、または-thinを指定するかによって異なります。

  • -oci:@databaseはオプションです。指定しない場合、dropjavaツールはユーザーのデフォルト・データベースを使用します。指定した場合、databaseはTNS名またはOracle Net Servicesの名前/値リストのいずれかになります。

  • -thin:@databaseは必須です。形式はhost:lport:SIDです。

    各項目は次のとおりです。

    • hostは、データベースが動作しているコンピュータの名前です。

    • lportは、Oracle Net Services接続のリスニング用に構成されたリスナー・ポートです。デフォルト・インストールでは5521です。

    • SIDは、データベース・インスタンスの識別子です。デフォルト・インストールではORCLです。

次に、dropjavaツールのコマンド例を示します。

  • ServerObjects.jarからロードしたデフォルト・データベース内のTESTスキーマにある、すべてのスキーマ・オブジェクトを削除する場合

    dropjava -u HR -schema TEST ServerObjects.jar
    Password: password
    
  • JDBC Thinドライバで接続してから、クラス・ファイルとリソース・ファイルをユーザーのスキーマから削除する場合

    dropjava -thin -u HR@dbhost:5521:orcl alpha.class beta.props
    Password: password
    

リスト・ベースの削除

以前のバージョンのdropjavaツールでは、クライアント側またはサーバー側のユーティリティを実行するマシンにクラス、JAR、ソースおよびリソースが存在する必要がありました。現行バージョンのdropjavaには、クラスのリストに基づき、クライアント・マシンまたはサーバー・マシンに存在しない場合があるクラス、リソースまたはソースを削除できるオプションが用意されています。このリストは、コマンドライン上またはテキスト・ファイル内にある場合があります。次に例を示します。

dropjava –list –u HR –v this.is.my.class this.is.your.class
Password: password

このコマンドは、コマンドラインにリストされたクラスthis.is.my.classおよびthis.is.your.classがクライアント・マシンまたはサーバー・マシン上に存在しない場合、これらを削除します。

dropjava –listfile my.list –u HR –s –v
Password: password

このコマンドは、my.listにリストされたクラスのリストに基づき、クラス、リソースまたはソースおよびそのシノニムを削除し、冗長形式で表示します。


注意:

'-install'フラグは、変更不可のシステムが所有するスキーマ・オブジェクトのロードおよび削除を無視します。

これらのスキーマ・オブジェクトはCREATE JAVA COMMANDで指定されたランタイム・クラスおよびリソースです。


リソースの削除

サーバーに直接ロードされたリソースを削除する場合は注意が必要です。-ser2classオプションを使用せずにクライアントで変換した場合、このリソースにはプロファイルが含まれています。ソースやクラス・スキーマ・オブジェクト、またはサーバー側SQLJトランスレータで生成されたリソース・スキーマ・オブジェクトを削除する場合は、該当する.sqljソース・ファイルのパッケージ仕様に従ってスキーマ・オブジェクトが検索されます。ただし、クライアントで生成されてサーバーに直接ロードされたリソースのスキーマ・オブジェクトの完全修飾名は、.jarファイルのパス情報またはロード時にコマンドラインに指定したパス情報によって異なります。.jarファイルを使用してリソースをロードし、同じ.jarファイルを使用してリソースを削除する場合は問題ありません。ただし、コマンドラインを使用してリソースをロードする場合は、dropjavaツールを実行してリソースを削除するときに同じパス情報を指定するように注意してください。

ojvmjavaツール

ojvmjavaツールは、データベース・インスタンスのセッション・ネームスペースとの対話型インタフェースです。ojvmjavaツールを起動するときは、データベース接続引数を指定します。これによって、プロンプトが表示され、コマンドを入力できる状態になります。

シェルは実行可能プログラム、つまり、static main()メソッドを持つクラスを起動できます。起動するには、コマンドライン・インタフェースを使用するか、データベース常駐クラスをコールします。データベース常駐クラスをコールする場合、実行可能ファイルは、loadjavaツールを使用してロードしておく必要があります。

この項の内容は、次のとおりです。

構文

ojvmjavaツールのコマンド構文は次のとおりです。

ojvmjava {-user user[/password@database ] [options]
  [@filename]
  [-batch]
  [-c | -command command args]
  [-debug]
  [-d | -database conn_string]
  [-fileout filename]
  [-o | -oci | -oci8]
  [-oschema schema]
  [-t | -thin]
  [-version | -v]
 -runjava [server_file_system]
 -jdwp port [host]
 -verbose

引数の概要

表12-4は、ojvmjavaツールの引数の一覧です。

表12-4 ojvmjavaの引数の概要

引数 説明

-user | -u

データベースに接続するためのユーザー名を指定します。この名前は大/小文字の区別がありません。名前は常に大文字に変換されます。データベース情報を指定した場合、デフォルトで使用される構文はOCIです。また、デフォルト・データベースを指定することもできます。

-password | -p

データベースに接続するためのパスワードを指定します。

@filename

実行するojvmjavaツールのコマンドを含むスクリプト・ファイルを指定します。

-batch

スクリーンに表示されたすべてのメッセージを無効にします。ヘルプ・メッセージまたはプロンプトは表示されません。入力したコマンドへの応答のみが表示されます。

-command

任意のコマンドを実行します。ojvmjavaツールをインタプリタ・モードで実行するのではなく、1つのコマンドのみ実行する場合は、このオプションの後にコマンドと引数を含む文字列を指定して実行します。指定したコマンドが実行されると、ojvmjavaツールは終了します。

-debug

デバッグ情報を表示します。

-d | -database conn_string

データベース接続文字列を指定します。

-fileout file

出力を指定のファイルにリダイレクトします。

-o | -oci | -oci8

JDBC OCIドライバを使用します。OCIドライバがデフォルトです。このフラグを使用して、@databaseまたは-databaseオプションのいずれかで使用する構文を指定します。

-o schema schema

このスキーマを使用してクラスを参照します。

-t | -thin

JDBC Thinドライバ用のデータベース構文を使用するように指定します。データベース接続文字列は、host:port:SIDの形式で指定するか、またはOracle Net Servicesの名前/値リストになります。

-verbose

接続情報を表示します。

-version

バージョンを表示します。

-runjava

Javaコマンドを実行する際にDBMS_JAVA.runjavaを使用します。引数を指定しない場合、クライアント・ファイルシステムの参照として-classpathを解析します。引数server_file_systemを指定すると、DBMS_JAVA.runjavaが通常行うように、Oracleサーバーが稼働しているファイルシステムの参照として-classpathを解析します。

-jdwp

接続が、指定のポートおよびホストでデバッガ接続をリスニングするようにします。ホストのデフォルト値はlocalhostです。


次に示すように、データベースorclのセッション・ネームスペース上のシェルを、ホストdbserverのリスナー・ポート2481に対してオープンします。

ojvmjava -thin -user HR@dbserver:2481:orcl
Password: password

機能

ojvmjavaツールのコマンドには様々なタイプの機能があり、次のようにグループ化されます。

ojvmjavaツールのコマンドライン・オプション

この項では、ojvmjavaツールのコマンドで使用できる次のオプションについて説明します。

@filenameオプションでのojvmjavaツール・コマンドのスクリプト

この@filenameオプションは、1つ以上のojvmjavaツール・コマンドを含むスクリプト・ファイルを指定します。指定されたスクリプト・ファイルは、クライアント上に配置されます。ojvmjavaツールはファイルを読み取り、指定されたサーバー上ですべてのコマンドを実行します。さらに、スクリプト・ファイルはサーバー上で実行されるため、ファイルへの出力のリダイレクトや別のスクリプトの実行など、そのスクリプト・ファイルでのオペレーティング・システムとの対話はすべてサーバー上で行われます。別のスクリプト・ファイルを実行するようにojvmjavaツールに指示する場合、そのファイルはサーバー上の$ORACLE_HOMEに存在する必要があります。

ojvmjavaツール・コマンドの後に任意のオプションと必要な入力引数を入力する必要があります。スクリプト・ファイルには、ojvmjavaツール・コマンドおよびそれに続くオプションと入力パラメータが含まれています。入力パラメータは、コマンドラインでojvmjavaツールに渡すことができます。ojvmjavaツールは、既知のオプションをすべて処理し、その他のオプションと引数をスクリプト・ファイルに渡します。

次の例は、スクリプト・ファイルexecShellの内容を示します。

java myclass a b c

このファイルを実行するには、次のコマンドを使用します。

ojvmjava -user HR -thin -database dbserver:2481:orcl @commands
Password: password

ojvmjavaツールは既知のオプションをすべて処理し、スクリプト・ファイル内のコマンドが使用する他の入力パラメータを渡します。次の例では、パラメータは、スクリプト・ファイル内のjavaコマンドに渡されます。

スクリプト・ファイルには、ハッシュ記号(#)を使用してコメントを追加できます。コメントはojvmjavaツールでは無視されます。次に例を示します。

#this whole line is ignored by ojvmjava

-runjava

このオプションは、ojvmjavaツールのシェル・コマンドJavaがコマンドライン・インタフェースまたはデータベース常駐クラスのどちらを使用して実行可能なクラスを実行するかを制御します。-runjavaオプションが存在する場合、コマンドライン・インタフェースが使用されます。それ以外の場合、実行可能ファイルはloadjavaツールで以前にロードされたデータベース常駐クラスになります。オプションの引数server_file_systemを使用する場合、-classpath表現がOracleサーバーを実行するマシンのファイルシステム上にあることを意味します。それ以外の場合、ojvmjavaツールを実行するマシンのファイルシステム上にあるものとして解析されます。

-jdwp

このオプションは、シェル・コマンドjavaが実行可能ファイルの実行に使用される場合にリスニングするデバッガ接続を指定します。実行可能ファイルのデバッグを許可します。引数はポートおよびホストを指定します。ホストの引数のデフォルト値はlocalhostです。これらを使用して、実行可能ファイルが実行されるRDBMSセッションからDBMS_DEBUG_JDWP.CONNECT_TCPのコールを実行します。

シェル・コマンド

この項では、ojvmjavaシェル内で使用できる次のコマンドについて説明します。


注意:

サポートされていないコマンドを入力すると、エラーがレポートされます。

表12-5に、1つ以上の共通オプションを共有するコマンドの概要を示し、共通オプションの概要を表12-5に示します。

表12-5 ojvmjavaコマンドの共通オプション

オプション 説明

-describe | -d

ツールの操作方法を要約表示します。

-help | -h

ツールの構文を要約表示します。

-version

バージョンを表示します。


echo

このコマンドは、指定された対象を正確にstdoutに表示します。これは、ほとんどの場合、スクリプト・ファイルで使用します。

構文は次のとおりです。

echo [echo_string] [args]

echo_stringは、シェル・スクリプトの起動時にスクリーンに書き込むテキストが含まれる文字列で、argsは、ユーザーが指定する入力引数です。たとえば、次のコマンドは通知を表示します。

echo "Adding an owner to the schema" &1

入力引数がHRの場合、出力は次のようになります。

Adding an owner to the schema HR

exit

このコマンドは、ojvmjavaを終了します。構文は次のとおりです。

exit

たとえば、シェルを終了するには次のコマンドを使用します。

$ exit
%

help

このコマンドは、シェル・コマンドの構文の要約を表示します。また、helpコマンドを使用すると、特定のコマンドについてオプションの要約も表示できます。構文は次のとおりです。

help [command]

java

このコマンドは、JDKのjavaコマンドに類似しています。これは、クラスのstatic main()メソッドをコールします。これを行うには、runjavaモードの設定に応じて、コマンドライン・インタフェースを使用するか、データベース常駐クラスを使用します。後者の場合、クラスはloadjavaツールを使用して以前にロードしたものである必要があります。このコマンドは、データベースで実行されるJavaコードのテストに便利です。特に、このコマンドは例外を捕捉し、クラスの標準出力と標準エラーをシェルにリダイレクトして、他のコマンド出力の場合と同様に表示します。データベース内で実行されるJavaクラスの標準出力と標準エラーの出力先は、データベース・サーバー・プロセスの1つ以上のトレース・ファイルで、これは読みにくく、また読むためにはDBA権限が必要な場合があります。

runjavaモードがオフのコマンドの構文は次のとおりです。

java [-schema schema] class [arg1 ... argn]

runjavaモードがオンのコマンドの構文は次のとおりです。

java [command-line options] class [arg1 ... argn]

コマンドライン・オプションは、表3-1で説明したいずれかのオプションになります。

表12-6は、このコマンドの引数の一覧です。

表12-6 javaの引数の概要

引数 説明

class

実行するJavaクラス・スキーマ・オブジェクトの名前を指定します。

-schema

実行するクラスを含むスキーマ名を指定します。デフォルトは実行者のスキーマです。スキーマ名は、大/小文字の区別があります。

arg1 ... argn

クラスのstatic main()メソッドに渡す引数。


次のJavaファイルWorld.javaについて考えます。

package hello;
public class World
{
  public World()
  {
    super();
  }

  public static void main(String[] argv)
  {
    System.out.println("Hello from Oracle Database");
    if (argv.length != 0)
      System.out.println("You supplied " + argv.length + " arguments: ");
    for (int i = 0; i < argv.length; i++)
      System.out.println(" arg[" + i + "] : " + argv[i]);
  }
}

次のように、クラスをコンパイル、ロード、公開および実行します。

% javac hello/World.java

% loadjava -r -user HR@localhost:2481:orcl hello/World.class
Password: password
% ojvmjava -user HR -database localhost:2481:orcl
Password: password
$ java hello.World alpha beta
Hello from Oracle Database
You supplied 2 arguments:
arg[0] : alpha
arg[1] : beta

version

このコマンドは、ojvmjavaツールのバージョンを表示します。また、指定したコマンドのバージョンも表示できます。このコマンドの構文は次のとおりです。

version [options] [command]

たとえば、次のように、シェルのバージョンを表示できます。

$ version
1.0

whoami

このコマンドは、カレント・セッションにログインしているユーザーのユーザー名を表示します。このコマンドの構文は次のとおりです。

whoami

connect

このコマンドを使用すると、クライアントで現在の接続を削除し、別の接続の説明でojvmjavaツールを再起動せずに別のデータベースに接続できます。

このコマンドの構文は次のとおりです。

connect [-service service] [-user user][-password password]

このコマンドは、次の例のように使用できます。

connect -s thin@locahost:5521:orcl -u HR/<password>
connect -s oci@locahost:5521:orcl -u HR -p <password>

表12-7は、このコマンドの引数の一覧です。

表12-7 connectの引数の概要

引数 説明

-service | -s

有効なJDBCドライバのURL(oci @<connection descriptor>およびthin@<host:port:db>)

-user | -u

接続するユーザー

-password | -p

接続に使用するパスワード


runjava

このコマンドは、runjavaモードの問合せや変更を行います。runjavaモードは、javaコマンドがコマンドライン・インタフェースを使用して実行可能ファイルを実行するかどうかを決定します。javaコマンドは次のように動作します。

  • runjavaモードがオンの場合はコマンドライン・インタフェースを使用します。

  • runjavaモードがオフの場合はデータベース常駐の実行可能ファイルを使用します。

引数を指定せずにrunjavaコマンドを使用すると、runjavaモードの現在の設定が表示されます。

表12-8は、このコマンドの引数の一覧です。

表12-8 runjavaの引数の概要

引数 説明

off

runjavaモードをオフにします。

on

runjavaモードをオンにします。

server_file_system

runjavaモードをオンにします。このオプションを使用する場合、-classpath表現がOracleサーバーが実行されているマシンのファイルシステム上にあることを意味します。それ以外の場合、ojvmjavaツールを実行するマシンのファイルシステム上にあるものとして解析されます。


jdwp

このコマンドは、実行可能ファイルがJavaコマンドで実行される場合にデバッガ接続がリスニングされるかどうか、およびそのリスニングの状況の問合せや変更を行います。


注意:

RDBMSセッションは、実行可能ファイルを起動する前に、指定のポートおよびホストでDBMS_DEBUG_JDWP.CONNECT_TCPコールを実行します。これはリスニングと呼ばれます。

引数を指定せずにこのコマンドを使用すると、現在の設定が表示されます。

表12-9は、このコマンドの引数の一覧です。

表12-9 jdwpの引数の概要

引数 説明

off

今後の実行可能ファイルでのリスニングを停止します。

port

リスニングを有効にして、使用するポートを指定します。

host

リスニングを有効にして、使用するホストを指定します。この引数のデフォルト値はlocalhostです。