この章では、Oracle Database Java環境で使用するスキーマ・オブジェクトおよびOracle JVMユーティリティについて説明します。これらのユーティリティは、UNIXシェルまたはMicrosoft社のWindowsのDOSプロンプトから実行します。
|
注意: ツールに指定されている名前は、すべて大/小文字の区別があります。このため、スキーマ、ユーザー名およびパスワードは大文字に変換されません。 |
この章の内容は、次のとおりです。
従来のJava仮想マシン(JVM)では、Javaファイルをコンパイルおよびロードしていましたが、Oracle JVMではスキーマ・オブジェクトをコンパイルおよびロードします。次の種類の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 10gでは、ほとんどのコードをデータベースの外でコンパイルおよびデバッグしてから、.classファイルをロードするのが最も能率的な方法です。特定のJavaクラスに対して、.classファイルまたは対応する.javaファイルのいずれかをロードできますが、両方はロードできません。
loadjavaツールは、ソース・ファイルとリソース・ファイル、またはクラス・ファイルとリソース・ファイルのいずれかを含むJavaアーカイブ(JAR)ファイルを受け入れます。loadjavaツールにJARファイルまたはZIPファイルを渡すと、loadjavaツールはアーカイブをオープンし、そのメンバーを個別にロードします。JARまたはZIPのスキーマ・オブジェクトはありません。
前回のロード時から変更されていないファイルは、再ロードされません。このため、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ツールはクラスへの参照を解決しますが、リソースへの参照は解決しません。したがって、クラスに必要なリソース・ファイルを正しくロードする必要があります。 |
可能な場合は、すべてのクラスのロードが完了するまで、解決を延期してください。延期することによって、使用するクラスがロードされていないために、リゾルバによりそのクラスが無効とマークされるのを回避できます。
スキーマ・オブジェクトのダイジェスト表による最適化は、通常、開発者には表示されません。loadjavaツールは、このダイジェスト表に基づいて、前回のロード時から変更されていないファイルをスキップします。ファイルのコレクションの一部を再ロードする必要がある場合は、この機能によって、loadjavaツールをコールするMakeファイルとスクリプトのパフォーマンスを改善できます。これは、再ロードするアーカイブ・ファイルには、前回のロード時から変更されているファイルと変更されていないファイルが混在している場合があるためです。
loadjavaツールは、各スキーマのダイジェスト表を保守することで、変更されていないファイルを検出します。ダイジェスト表によって、ファイル名がダイジェスト、つまり、ファイル内容の短縮表現(ハッシュ)に対応付けられます。同一ファイルに対して異なる時期に作成されたダイジェストを比較することによって、ファイル内容の変更を高速に検出できます。この方法は、ファイル内の各バイトを比較するよりはるかに高速です。loadjavaツールは、処理対象のファイルごとにファイル内容のダイジェストを作成してから、ダイジェスト表でファイル名を検索します。ダイジェスト表に同じダイジェストのファイル名のエントリがある場合は、対応するスキーマ・オブジェクトの最新版が存在するため、loadjavaツールはそのファイルをロードしません。-verboseオプションを指定してloadjavaツールをコールすると、ダイジェスト表の検索結果が表示されます。
通常、ダイジェスト表は開発者には表示されません。これは、loadjavaツールとdropjavaツールによって、ダイジェスト表がスキーマ・オブジェクトの追加、変更および削除と同期化されているためです。したがって、loadjavaツールで作成したスキーマ・オブジェクトは、必ずdropjavaを使用して削除し、DDLは使用しないでください。
ソース・ファイルをロードすると、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表のエントリもコマンドラインのオプション値もない場合、コンパイラは次のデフォルト値を使用します。
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.jar、classdir/lib1.jarおよびclassdir/lib2.jarを使用して、app.jarの参照を解決します。rt.jarにあるクラスを除き、調査対象のクラスはすべてset.jarに追加されます。
次に、別の例を示します。
ojvmtc -server thin@scott:localhost:5521:orcl -classpath jar1:jar2 -list app2.jar
Password:password
この例では、接続文字列で指定されたサーバーにあるクラスと、jar1およびjar2を使用して、app2.jarを解決します。欠落している参照がすべてstdoutに表示されます。
表11-1は、このコマンドの引数の一覧です。
表11-1 ojvmtcの引数の概要
| 引数 | 説明 |
|---|---|
|
|
クロージャ・セットの指定のJARおよびクラスを使用します。 |
|
|
クロージャの指定のクラスを使用します。ただし、クロージャ・セットにこれらのクラスを含めません。 |
|
|
|
|
|
特定の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に書き込み、欠落しているクラスのスタブを生成します。 |
|
|
欠落しているクラスの一覧を作成します。 |
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ツールのコマンド構文は次のとおりです。
loadjava {-user | -u} user/[password][@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]
[-norecursivejars]
[-nosynonym]
[-nousage]
[-noverify]
[-o | -oci | oci8]
[-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]
表11-2は、loadjavaツールのコマンド引数の一覧です。オプションを変えて同じファイルを指定して複数回loadjavaツールを実行すると、最後の起動時に指定したオプションが保持されます。ただし、次の2つの例外があります。
ダイジェスト表のエントリに一致しているためにloadjavaツールによってファイルがロードされない場合は、コマンドラインで指定した大半のオプションがスキーマ・オブジェクトに反映されません。例外は-grantと-resolveで、これらのオプションは必ず反映されます。loadjavaツールでダイジェスト表の参照をスキップするように指示するには、-forceオプションを使用する必要があります。
-grantオプションは累積です。特定スキーマの特定クラスに対して起動されたすべてのloadjavaツールに指定されているユーザーには、EXECUTE権限が付与されます。
表11-2 loadjavaの引数の概要
この項では、動作が複雑なloadjavaツールの一部の引数について、表11-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/scott/javastuff % loadjava options alpha/beta/x.properties % loadjava options /home/scott/javastuff/alpha/beta/x.properties
同じファイルを相対パス名と絶対パス名で指定していますが、loadjavaツールはalpha/beta/x.propertiesとROOT/home/scott/javastuff/alpha/beta/x.propertiesの2つのスキーマ・オブジェクトを作成します。リソース・スキーマ・オブジェクトの名前は、入力したとおりのファイル名から生成されます。
クラスは、リソース・ファイルを相対的に参照することも絶対的に参照することもできます。loadjavaツールとクラス・ローダーで同じスキーマ・オブジェクト名を使用するには、クラスからgetResource()またはgetResourceAsString()に渡す名前をコマンドラインに入力します。
リソース・ファイルは、次のようにJARでロードできます。この場合、名前をコマンドラインに正しく入力するために、クラスで使用するリソース名が相対名か絶対名かを記憶したり、ディレクトリを変更する必要はありません。
% cd /home/scott/javastuff % jar -cf alpharesources.jar alpha/*.properties % loadjava options alpharesources.jar
処理をさらに簡略化するには、クラス・ファイルとリソース・ファイルの両方をJARで格納します。これによって、次のコマンドを起動しても同じ処理を実行できます。
% loadjava options alpha.jar % loadjava options /home/scott/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エントリを検索します。このエントリが検出された場合、そのエントリは、オプション・ファイル内の他の全エントリに適用されるオプション・ファイルとして処理されます。ただし、loadjavaツールは、JARファイルで出現する順にエントリに対する処理を実行します。
loadjavaツールがMETA-INF/loadjava-optionsを処理する前にエントリを部分的に処理した場合、loadjavaツールは適用可能なオプションに準拠するようにスキーマ・オブジェクトの変更を試みます。たとえば、loadjavaツールは、定義者権限で作成される必要があったクラスが実行者権限で作成された場合に、そのクラスを変更します。-noactionに対する修正は、作成済のスキーマ・オブジェクトを削除することです。これによって正しい結果が得られます。ただし、loadjavaツールの起動前にスキーマ・オブジェクトが存在していた場合を除きます。この場合、そのスキーマ・オブジェクトは削除されます。
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引数のOUTとIN OUT、OBJECT型およびその他多数の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 '((* SCOTT) (* PUBLIC))'
これは、最初にSCOTTで、次にPUBLICで参照を検索することを意味します。参照が解決されない場合は、参照元クラスを無効とマークし、エラー・メッセージを表示します。
次の例を考えてみます。
-resolver "((* SCOTT) (* PUBLIC) (my/gui/* -))"
これは、最初にSCOTTで、次に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 SCOTT@dbhost:5521:orcl \
-resolve alpha.class beta.props
Password: password
alpha.classを実行できるユーザー群にBettyとBobを追加する場合
loadjava -thin -schema test -u SCOTT@localhost:5521:orcl \ -grant BETTY,BOB alpha.class Password: password
jarsasdbobjects
現在のloadjavaツールで処理されるJARと、それらのJARに含まれるクラスがデータベースに格納されることを示します。また、クラスとJARとの関連付けに関する情報がデータベースで保持されることを示します。つまり、この引数は、現在のloadjavaツールで処理されるJARが、データベース常駐JARとしてデータベースに格納されることを示します。
prependjarnames
-jarsasdbobjectsオプションと一緒に使用します。このオプションにより、異なるJARの同じ名前のクラスが同じスキーマ内で共存できます。
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]
[-S | -schema schema]
[-stdout]
[-s | -synonym]
[-t | -thin]
[-v | -verbose]
表11-3は、dropjavaツールの引数の一覧です。
表11-3 dropjavaの引数の概要
| 引数 | 説明 |
|---|---|
|
|
ユーザー名、パスワードおよびデータベース接続文字列(オプション)を指定します。ファイルはこのデータベース・インスタンスから削除されます。 |
|
|
|
|
|
このオプションのオペランドを処理対象のファイルとして扱います。 |
|
|
以前にリソースとしてロードされたJARファイル全体を削除します。 |
|
|
|
|
|
使用方法は |
|
|
スキーマ・オブジェクトを削除するスキーマを指定します。このオプションを指定しないと、ログイン・スキーマが使用されます。他のユーザーのスキーマからスキーマ・オブジェクトを削除するには、 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
コマンドラインにリストされたクラス、Javaソースまたはリソースがクライアント・マシンまたはサーバー・マシン上に存在しない場合、これらを削除します。 |
|
|
ファイルを読み取り、そのファイルにリストされたクラス、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 SCOTT -schema TEST ServerObjects.jar
Password: password
JDBC Thinドライバで接続してから、クラス・ファイルとリソース・ファイルをユーザーのスキーマから削除する場合
dropjava -thin -u SCOTT@dbhost:5521:orcl alpha.class beta.props
Password: password
リスト・ベースの削除
以前のバージョンのdropjavaツールでは、クライアント側またはサーバー側のユーティリティを実行するマシンにクラス、JAR、ソースおよびリソースが存在する必要がありました。現行バージョンのdropjavaには、クラスのリストに基づき、クライアント・マシンまたはサーバー・マシンに存在しない場合があるクラス、リソースまたはソースを削除できるオプションが用意されています。このリストは、コマンドライン上またはテキスト・ファイル内にある場合があります。次に例を示します。
dropjava –list –u scott –v this.is.my.class this.is.your.class
Password: password
このコマンドは、コマンドラインにリストされたクラスthis.is.my.classおよびthis.is.your.classがクライアント・マシンまたはサーバー・マシン上に存在しない場合、これらを削除します。
dropjava –listfile my.list –u scott –s –v
Password: password
このコマンドは、my.listにリストされたクラスのリストに基づき、クラス、リソースまたはソースおよびそのシノニムを削除し、冗長形式で表示します。
サーバーに直接ロードされたリソースを削除する場合は注意が必要です。-ser2classオプションを使用せずにクライアントで変換した場合、このリソースにはプロファイルが含まれています。ソースやクラス・スキーマ・オブジェクト、またはサーバー側SQLJトランスレータで生成されたリソース・スキーマ・オブジェクトを削除する場合は、該当する.sqljソース・ファイルのパッケージ仕様に従ってスキーマ・オブジェクトが検索されます。ただし、クライアントで生成されてサーバーに直接ロードされたリソースのスキーマ・オブジェクトの完全修飾名は、.jarファイルのパス情報またはロード時にコマンドラインに指定したパス情報によって異なります。.jarファイルを使用してリソースをロードし、同じ.jarファイルを使用してリソースを削除する場合は問題ありません。ただし、コマンドラインを使用してリソースをロードする場合は、dropjavaツールを実行してリソースを削除するときに同じパス情報を指定するように注意してください。
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
表11-4は、ojvmjavaツールの引数の一覧です。
表11-4 ojvmjavaの引数の概要
| 引数 | 説明 |
|---|---|
|
|
データベースに接続するためのユーザー名を指定します。この名前は大/小文字の区別がありません。名前は常に大文字に変換されます。データベース情報を指定した場合、デフォルトで使用される構文はOCIです。また、デフォルト・データベースを指定することもできます。 |
|
|
データベースに接続するためのパスワードを指定します。この名前は大/小文字の区別がないため、常に大文字に変換されます。 |
|
|
実行する |
|
|
スクリーンに表示されたすべてのメッセージを無効にします。ヘルプ・メッセージまたはプロンプトは表示されません。入力したコマンドへの応答のみが表示されます。 |
|
|
任意のコマンドを実行します。 |
|
|
デバッグ情報を表示します。 |
|
|
データベース接続文字列を指定します。 |
|
|
出力を指定のファイルにリダイレクトします。 |
|
|
JDBC OCIドライバを使用します。OCIドライバがデフォルトです。このフラグを使用して、 |
|
|
このスキーマを使用してクラスを参照します。 |
|
|
JDBC Thinドライバ用のデータベース構文を使用するように指定します。データベース接続文字列は、 |
|
|
接続情報を表示します。 |
|
|
バージョンを表示します。 |
|
|
Javaコマンドを実行する際に |
|
|
接続が、指定のポートおよびホストでデバッガ接続をリスニングするようにします。ホストのデフォルト値は |
次に示すように、データベースorclのセッション・ネームスペース上のシェルを、ホストdbserverのリスナー・ポート2481に対してオープンします。
ojvmjava -thin -user SCOTT@dbserver:2481:orcl
Password: password
ojvmjavaツールのコマンドには様々なタイプの機能があり、次のようにグループ化されます。
この項では、ojvmjavaツールのコマンド・オプションについて説明します。
ojvmjavaツールの出力リダイレクション
コマンド・オプションの最後に&>filenameを追加して、ojvmjavaツールで生成された出力をファイルに送信できます。次のコマンドでは、すべての出力がlistDirファイルに送信されます。
ls -lR &>/tmp/listDir
@filenameオプションでのojvmjavaツール・コマンドのスクリプト
この@filenameオプションは、1つ以上のojvmjavaツール・コマンドを含むスクリプト・ファイルを指定します。指定されたスクリプト・ファイルは、クライアント上に配置されます。ojvmjavaツールはファイルを読み取り、指定されたサーバー上ですべてのコマンドを実行します。さらに、スクリプト・ファイルはサーバー上で実行されるため、ファイルへの出力のリダイレクトや別のスクリプトの実行など、そのスクリプト・ファイルでのオペレーティング・システムとの対話はすべてサーバー上で行われます。別のスクリプト・ファイルを実行するようにojvmjavaツールに指示する場合、そのファイルはサーバー上の$ORACLE_HOMEに存在する必要があります。
ojvmjavaツール・コマンドの後に任意のオプションと必要な入力引数を入力します。
スクリプト・ファイルには、ojvmjavaツール・コマンドおよびそれに続くオプションと入力パラメータが含まれています。入力パラメータは、コマンドラインでojvmjavaツールに渡すことができます。ojvmjavaツールは、既知のオプションをすべて処理し、その他のオプションと引数をスクリプト・ファイルに渡します。
スクリプト・ファイルにあるコマンド内の引数にアクセスするには、&1...&nを使用して引数を示します。すべての入力パラメータが1つのコマンドに渡される場合は、&*を入力して、すべての入力パラメータがこのコマンドに渡されることを示すことができます。
次の例は、スクリプト・ファイルexecShellの内容を示します。
chmod +x SCOTT nancy /alpha/beta/gamma chown SCOTT /alpha/beta/gamma java hello.World &*
必要な入力引数は2つであるため、次のように、Javaコマンドの入力パラメータを実装できます。
java hello.World &1 &2
|
注意: 同じ方法で、-commandオプションに引数を指定することもできます。次に例を示します。
ojvmjava ... -command "cd &1" contexts
|
このファイルを実行するには、次のように指定します。
ojvmjava -user SCOTT -thin -database dbserver:2481:orcl \
@execShell alpha beta
Password: password
ojvmjavaツールは既知のオプションをすべて処理し、スクリプト・ファイル内のコマンドが使用する他の入力パラメータを渡します。次の例では、パラメータのalphaとbetaは、スクリプト・ファイル内のjavaコマンドに渡されます。実際に実行されるコマンドは次のようになります。
java hello.World alpha beta
スクリプト・ファイルには、ハッシュ(#)を使用してコメントを追加できます。コメントは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のコールを実行します。
アプリケーション内でのsess_shの実行
sess_shコマンドは、次のコマンドを使用してJavaまたはPL/SQLアプリケーション内から実行できます。
| アプリケーション・タイプ | コマンドおよび説明 |
|---|---|
| PL/SQLアプリケーション |
dbms_namespace.shell(in command VARCHAR2)使用しているアプリケーションで、固有のセッション・インスタンスで個々のコマンドを実行できます。シェルの状態は、同じセッション内で sess_shがコールされるたびに保持されます。次の例では、PL/SQLアプリケーション内でsess_shツールのcdコマンドを実行します。
dbms_namespace.shell('cd /webdomains');
dbms_namespace.shell('ls &> /tmp/test');
シェル・インスタンスの状態をリセットするには、次のように
dbms_namespace.shell('exit');
|
| Javaアプリケーション | Javaサーバー・オブジェクト内でoracle.aurora.namespace.shell.Shellをインスタンス化します。作成した後は、initializeメソッドを使用してShellオブジェクトを初期化する必要があります。初期化した後は、次のようにsess_shコマンドを実行できます。
String commands="cd /webdomains\nls -l";
StringReader commandReader = new StringReader(commands);
Shell sh = new oracle.aurora.namespace.shell.Shell();
try
{
sh.initialize();
sh.invoke(new BufferedReader(commandReader), false);
}
catch (ToolsException te)
{
//Error executing the commands
}
|
この項では、ojvmjavaシェル内で使用できる次のコマンドについて説明します。
|
注意: サポートされていないコマンドを入力すると、エラーがレポートされます。 |
表11-5に、1つ以上の共通オプションを共有するコマンドの概要を示します。表11-5は、共通オプションの一覧です。
表11-5 ojvmjavaコマンドの共通オプション
| オプション | 説明 |
|---|---|
|
|
ツールの操作方法を要約表示します。 |
|
|
ツールの構文を要約表示します。 |
|
|
バージョンを表示します。 |
このコマンドは、指定された対象を正確にstdoutに表示します。これは、ほとんどの場合、スクリプト・ファイルで使用します。
構文は次のとおりです。
echo [echo_string] [args]
echo_stringは、シェル・スクリプトの起動時にスクリーンに書き込むテキストが含まれる文字列です。argsは、ユーザーが指定する入力引数です。たとえば、次のコマンドは通知を表示します。
echo "Adding an owner to the schema" &1
入力引数がSCOTTの場合、出力は次のようになります。
Adding an owner to the schema SCOTT
このコマンドは、ojvmjavaを終了します。構文は次のとおりです。
exit
たとえば、シェルを終了するには次のコマンドを使用します。
$ exit %
このコマンドは、シェル・コマンドの構文の要約を表示します。また、helpコマンドを使用すると、特定のコマンドについてオプションの要約も表示できます。構文は次のとおりです。
help [command]
このコマンドは、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で説明したいずれかのオプションになります。
表11-6は、このコマンドの引数の一覧です。
表11-6 javaの引数の概要
| 引数 | 説明 |
|---|---|
|
|
実行するJavaクラス・スキーマ・オブジェクトの名前を指定します。 |
|
|
実行するクラスを含むスキーマ名を指定します。デフォルトは実行者のスキーマです。スキーマ名は、大/小文字の区別があります。 |
|
|
クラスの |
次の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 SCOTT@localhost:2481:orcl hello/World.class
Password: password
% ojvmjava -user SCOTT -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
このコマンドは、ojvmjavaツールのバージョンを表示します。また、指定したコマンドのバージョンも表示できます。このコマンドの構文は次のとおりです。
version [options] [command]
たとえば、次のように、シェルのバージョンを表示できます。
$ version 1.0
このコマンドは、カレント・セッションにログインしているユーザーのユーザー名を表示します。このコマンドの構文は次のとおりです。
whoami
connect
このコマンドを使用すると、クライアントで現在の接続を削除し、別の接続の説明でojvmjavaツールを再起動せずに別のデータベースに接続できます。
このコマンドの構文は次のとおりです。
connect [-service service] [-user user][-password password]
このコマンドは、次の例のように使用できます。
connect -s thin@locahost:5521:orcl -u scott/tiger connect -s oci@locahost:5521:orcl -u scott -p tiger
表11-7は、このコマンドの引数の一覧です。
表11-7 connectの引数の概要
| 引数 | 説明 |
|---|---|
|
-service | -s |
有効なJDBCドライバのURL(oci @<connection descriptor>およびthin@<host:port:db>) |
|
|
接続するユーザー |
|
-password | -p |
接続に使用するパスワード |
runjava
このコマンドは、runjavaモードの問合せや変更を行います。runjavaモードは、javaコマンドがコマンドライン・インタフェースを使用して実行可能ファイルを実行するかどうかを決定します。javaコマンドは次のように動作します。
runjavaモードがオンの場合はコマンドライン・インタフェースを使用します。
runjavaモードがオフの場合はデータベース常駐の実行可能ファイルを使用します。
引数を指定せずにrunjavaコマンドを使用すると、runjavaモードの現在の設定が表示されます。
表11-8は、このコマンドの引数の一覧です。
表11-8 runjavaの引数の概要
| 引数 | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
jdwp
このコマンドは、実行可能ファイルがJavaコマンドで実行される場合にデバッガ接続がリスニングされるかどうか、およびそのリスニングの状況の問合せや変更を行います。
|
注意: RDBMSセッションは、実行可能ファイルを起動する前に、指定のポートおよびホストでDBMS_DEBUG_JDWP.CONNECT_TCPコールを実行します。これはリスニングと呼ばれます。 |
引数を指定せずにこのコマンドを使用すると、現在の設定が表示されます。
表11-9は、このコマンドの引数の一覧です。