この章では、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 11gでは、ほとんどのコードをデータベースの外でコンパイルおよびデバッグしてから、.class
ファイルをロードするのが最も能率的な方法です。特定のJavaクラスに対して、.class
ファイルまたは対応する.java
ファイルのいずれかをロードできますが、両方はロードできません。
loadjava
ツールは、ソース・ファイルとリソース・ファイル、またはクラス・ファイルとリソース・ファイルのいずれかを含むJavaアーカイブ(JAR)ファイルを受け入れます。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 ツールはクラスへの参照を解決しますが、リソースへの参照は解決しません。したがって、クラスに必要なリソース・ファイルを正しくロードする必要があります。 |
可能な場合は、すべてのクラスのロードが完了するまで、解決を延期してください。延期することによって、使用するクラスがロードされていないために、リゾルバによりそのクラスが無効とマークされるのを回避できます。
ソース・ファイルをロードすると、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]Foot 1 [-genmissingjar jar_file]Footref 1 [-g | -grant user [, user]...] [-help] [-jarasresource] [-noaction] [-norecursivejars] [-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]
表11-2は、loadjava
ツールのコマンド引数の一覧です。オプションを変えて同じファイルを指定して複数回loadjava
ツールを実行すると、最後の起動時に指定したオプションが保持されます。ただし、次の2つの例外があります。
ダイジェスト表のエントリに一致しているためにloadjava
ツールによってファイルがロードされない場合は、コマンドラインで指定した大半のオプションがスキーマ・オブジェクトに反映されません。例外は-grant
と-resolve
で、これらのオプションは必ず反映されます。loadjava
ツールでダイジェスト表の参照をスキップするように指示するには、-force
オプションを使用する必要があります。
-grant
オプションは累積です。特定スキーマの特定クラスに対して起動されたすべてのloadjava
ツールに指定されているユーザーには、EXECUTE
権限が付与されます。
表11-2 loadjavaの引数の概要
引数 | 説明 |
---|---|
|
|
|
クラス、リソースおよびJavaソースをロードするために、サーバー・ホストまたは
loadjava –u scott –r –v –proxy proxy_server:1020 http://my.server.com/this/is /the/path/my.jar
Password: password
URLサポートがサーバー内で使用される場合、リモート・ソースにアクセスするための適切なJavaパーミッションが必要です。 |
|
公開時に、大/小文字の区別がある名前が作成されます。名前がすべて大文字でないかぎり、通常、PL/SQLでは名前を引用符で囲む必要があります。 |
|
-grant SCOTT -cleargrants |
|
SQLロギングをオンにします。 |
|
デフォルトでは、クラス・スキーマ・オブジェクトはその実行者の権限で実行されます。このオプションは、定義者の権限をクラスに付与します。このオプションは、UNIXの |
|
|
|
コンパイラのためにソース・ファイルのエンコーディングを識別し、 System.getProperty("file.encoding"); このオプションはソース・ファイルのロード時のみ有効です。 |
|
すべてのメッセージを指定のファイルに表示します。 |
|
ダイジェスト表のエントリに一致する場合でも、ファイルが強制的にロードされます。 |
|
参照をソースから検出することは、参照をクラス・ファイルから検出するよりも困難であり、通常、ライブラリの配布にソースは使用しないため、 欠落しているクラスがロードされるスキーマは、参照元クラスが他のスキーマで作成された場合でも、 |
|
このオプションは、 |
|
ロードされたクラスに対する
注意:
|
|
|
|
JARファイルを解凍してその中の各クラスをロードするかわりに、JARファイル全体をリソースとしてスキーマにロードします。 |
|
ファイルに対してアクションを実行しません。これには、スキーマ・オブジェクトの作成、実行パーミッションの付与などのアクションが含まれます。このオプションは、通常、特定のクラスがJARファイルに作成されるのを抑制するために、オプション・ファイル内で使用します。コマンドラインで使用すると、オプション・ファイルでオーバーライドされないかぎり、 |
|
他のJARファイルに含まれているJARファイルをリソースとして処理します。これはデフォルトの動作です。このオプションは、 |
|
クラスのPUBLICシノニムを作成しません。これはデフォルトの動作です。このオプションは、 |
|
オプションが指定されていない場合、または |
|
クラスがバイトコードの検証なしにロードされます。このオプションを使用するには、 |
|
|
|
|
|
このオプションは、パターンおよびオプションのソースがファイルではなくSQL表であること以外は、 |
|
|
|
|
|
通常、 |
|
コマンドラインのすべてのクラスがロードされた後に、必要に応じて、クラス内の外部参照をコンパイルおよび解決します。 |
|
新しくロードされたクラスにバインドされる、明示的なリゾルバ仕様を指定します。 |
|
|
|
スキーマ・オブジェクトを作成するスキーマを指定します。このオプションを指定しないと、
さらに、クラスに対する 注意: 前述の権限を付与すると、SYSスキーマ以外のすべてのスキーマでの表の作成および操作が可能になります。セキュリティ上の理由から、これらの設定は十分に注意して使用することをお薦めします。 |
|
|
|
通常、 |
|
ロードされるクラスに対して |
|
Javaファイルの接続先スキーマではなく、指定したスキーマ内に |
|
|
|
|
|
ユーザー名、パスワードおよびデータベース接続文字列を指定します。ファイルはこのデータベース・インスタンスにロードされます。 |
|
|
|
現在の |
|
|
この項では、動作が複雑な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
エントリを検索します。このエントリが検出された場合、そのエントリは、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引数の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との関連付けに関する情報がデータベースで保持されることを示します。つまり、この引数は、現在の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]Footref 1 [-jarasresource] [-o | -oci | -oci8] [-optionfile file] [-optiontable table_name] [-S | -schema schema] [-stdout] [-s | -synonym] [-t | -thin] [-v | -verbose] [-list] [-listfile]
表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、ソースおよびリソースが存在する必要がありました。現行バージョンのdropjav
には、クラスのリストに基づき、クライアント・コンピュータまたはサーバー・コンピュータに存在しない場合があるクラス、リソースまたはソースを削除できるオプションが用意されています。このリストは、コマンドライン上またはテキスト・ファイル内にある場合があります。次に例を示します。
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
ツールのコマンドで使用できる次のオプションについて説明します。
@filenameオプションでのojvmjavaツール・コマンドのスクリプト
この@
filename
オプションは、1つ以上のojvmjava
ツール・コマンドを含むスクリプト・ファイルを指定します。指定されたスクリプト・ファイルは、クライアント上に配置されます。ojvmjava
ツールはファイルを読み取り、指定されたサーバー上ですべてのコマンドを実行します。さらに、スクリプト・ファイルはサーバー上で実行されるため、ファイルへの出力のリダイレクトや別のスクリプトの実行など、そのスクリプト・ファイルでのオペレーティング・システムとの対話はすべてサーバー上で行われます。別のスクリプト・ファイルを実行するようにojvmjava
ツールに指示する場合、そのファイルはサーバー上の$ORACLE_HOME
に存在する必要があります。
ojvmjava
ツール・コマンドの後に任意のオプションと必要な入力引数を入力する必要があります。スクリプト・ファイルには、ojvmjava
ツール・コマンドおよびそれに続くオプションと入力パラメータが含まれています。入力パラメータは、コマンドラインでojvmjava
ツールに渡すことができます。ojvmjava
ツールは、既知のオプションをすべて処理し、その他のオプションと引数をスクリプト・ファイルに渡します。
次の例は、スクリプト・ファイルexecShell
の内容を示します。
java myclass a b c
このファイルを実行するには、次のコマンドを使用します。
ojvmjava -user SCOTT -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
シェル内で使用できる次のコマンドについて説明します。
注意: サポートされていないコマンドを入力すると、エラーがレポートされます。 |
表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は、このコマンドの引数の一覧です。
脚注の凡例
脚注 1:-genmissing
引数および-genmissing jar
引数は、オプション・ファイルまたはオプション表では使用できません。これらの引数は、すべてのクラスのロードには適用可能で、特定のクラスにのみ使用することはできません。