12.6 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

内容は次のとおりです。

12.6.1 loadjavaツールの構文

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.6.2 loadjavaツールの引数の概要

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

-jarsasdbobjects

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

-prependjarnames

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

脚注1

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

脚注2

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

12.6.3 loadjavaツールの引数の詳細

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

ファイル名

.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 | -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の同じ名前のクラスが同じスキーマ内で共存できます。