この章では、プログラムの動作を指定するJPublisherのオプション設定および入力ファイルの使用方法と構文の詳細について説明します。この章の内容は、次のとおりです。
この項では、JPublisherのコマンドライン・オプションについて説明します。この項の内容は、次のとおりです。
表6-1に、JPublisherのオプションを示します。「デフォルト値」列の「NA」は適用外(not applicable)を表します。「カテゴリ」列は、この章内でそのオプションの概要を説明している項を示しています。
表6-1 JPublisherのオプションのサマリー
| オプション名 | 説明 | デフォルト値 | カテゴリ |
|---|---|---|---|
|
|
JPublisherにより生成されたメソッド定義に組み込まれるアクセス修飾子を指定します。 |
|
Javaコード生成 |
|
|
JPublisherのデフォルトの型マップにエントリを追加します。 |
NA |
型マップ |
|
|
JPublisherのユーザー型マップにエントリを追加します。 |
NA |
型マップ |
|
|
数値またはラージ・オブジェクト(LOB)以外の組込みデータ型のデータ型マッピング( |
|
データ型マッピング |
|
|
JPublisherで生成されるJava識別名の大/小文字を指定します。 |
|
Javaコード生成 |
|
|
JPublisherで変換時およびコンパイル時にJavaソースおよびクラスを解決できるように、JavaのCLASSPATHへ追加します。 |
空 |
Java環境 |
|
|
互換モードを指定し、 関連項目: 「JPublisherの下位互換性モードと設定」 |
|
下位互換性 |
|
|
Javaのコンパイルを進行させるか抑制するかを指定します。このオプションは、下位互換性モードにおけるSQLJ変換にも影響します。 |
|
出入力 |
|
|
デフォルト以外のバージョンを使用する場合のJavaコンパイラのバージョンを指定します。 |
NA |
Java環境 |
|
|
JPublisherでSQLJ接続コンテキストに使用するクラスを指定します。 |
|
接続 |
|
|
JPublisherで使用するデフォルトの型マップを設定します。 |
「JPublisherのユーザー型マップとデフォルトの型マップ」を参照してください。 |
型マップ |
|
|
コンパイル済クラス・ファイルの格納に使用するルート・ディレクトリを指定します。 |
空(カレント・ディレクトリに直接存在するすべてのファイル) |
出入力 |
|
|
生成されるソース・ファイルの格納に使用するルート・ディレクトリを指定します。 |
空(カレント・ディレクトリに直接存在するすべてのファイル) |
出入力 |
|
|
JPublisherでデータベースへのJava Database Connectivity(JDBC)接続に使用するドライバのクラスを指定します。 |
|
接続 |
|
|
JPublisherの入力および出力ファイルのJavaにおける文字のエンコーディングを指定します。 |
システム・プロパティ |
出入力 |
|
|
Webサービスのエンドポイントを指定します。このオプションは、 |
NA |
Webサービス |
|
|
指定したパラメータ・モードに従ってコード生成をフィルタ処理します。 |
NA |
Javaコード生成 |
|
|
指定したパラメータ型に従ってコード生成をフィルタ処理します。 |
NA |
Javaコード生成 |
|
|
生成されるコードがJavaBeans仕様に準拠することを保証します。 |
|
Javaコード生成 |
|
|
生成されるコードのネーミング・パターンを定義します。 |
NA |
Javaコード生成 |
|
|
ユーザー・サブクラス用のスタブ・コードを生成するかどうかと生成方法を指定します。 |
|
Javaコード生成 |
|
|
ファイアウォールを介してアクセスできるように、Webサービス定義言語(WSDL)ドキュメントのURLを解決するプロキシURLを指定します。このオプションは、 |
NA |
Webサービス |
|
|
JPublisherで変換する型およびパッケージをリストするファイルを指定します。 |
NA |
入力ファイル/項目 |
|
|
JPublisherでクライアント・サイド・クラスの生成に使用するサーバー・サイドJavaクラスを指定します。 |
NA |
入力ファイル/項目 |
|
|
JPublisherで |
|
データ型マッピング |
|
|
オブジェクト属性の型とメソッドの引数の型について、生成されたメソッドでサポートするマッピングを指定します。 注意: このオプションは、 |
|
データ型マッピング |
|
|
JPublisherで変換済SQLオブジェクトとPL/SQLパッケージのストアド・プロシージャ用にラッパー・メソッドを生成するかどうかを指定します。このオプションは、JPublisherでSQLJクラスと非SQLJクラスのどちらを生成するか、またPL/SQLラッパー・クラスを生成するかどうかも指定します。オーバーロードされたメソッドを許可するかどうかを指定する設定が用意されています。 |
|
Javaコード生成 |
|
|
JPublisherで数値データ型に使用するデータ型マッピング( |
|
データ型マッピング |
|
|
JPublisherに対して、生成されるコードでSQL型の名前の参照にスキーマを含めないように指定します。 |
使用禁止(スキーマ名を型名に含めます) |
Javaコード生成 |
|
|
PL/SQL出力パラメータのJava実装に使用するホルダーの型(配列、Java API for XML-based Remote Procedure Call(JAX-RPC)ホルダーまたはファンクション・コールの戻り値)を指定します。 |
|
Javaコード生成 |
|
|
SQL型の作成時に名前の競合を無視するかどうかを指定します。 |
|
PL/SQLコード生成 |
|
|
JPublisherでJavaラッパー・クラスが生成されるJavaパッケージの名前を指定します。 |
NA |
Javaコード生成 |
|
|
JPublisherで生成済のPL/SQLコードに使用されるPL/SQL型とPL/SQLパッケージについて、SQL変換タイプを作成するラッパー・スクリプトと削除する削除スクリプトを指定します。 |
|
PL/SQLコード生成 |
|
|
PL/SQL型を使用するストアド・プロシージャのPL/SQLラッパー・ファンクションを生成するかどうかを指定します。 |
|
PL/SQLコード生成 |
|
|
JPublisherでコール仕様、変換ファンクションおよびラッパー・ファンクションなどのPL/SQLコードを生成するPL/SQLパッケージを指定します。 |
|
PL/SQLコード生成 |
|
|
コマンドラインにリストされているオプション以外のJPublisherオプションを含むファイルを指定します。 |
NA |
入力ファイル/項目 |
|
|
JPublisherで |
NA |
Webサービス |
|
|
JavaラッパーとPL/SQLラッパーの必須レイヤーおよび追加の関連設定を指定します。
|
|
Webサービス |
|
|
Webサービスのクライアント・プロキシ・クラスおよび関連Javaラッパー・クラスがPL/SQLラッパーとともに生成されるWSDLドキュメントのURLを指定します。 |
NA |
Webサービス |
|
|
オブジェクト型用に生成されたコードで |
|
Javaコード生成 |
|
|
JPublisherでJavaクラスおよびオプションでサブクラスとインタフェースを生成するオブジェクト型、パッケージまたはパッケージのサブセットを指定します。 |
NA |
入力ファイル/項目 |
|
|
JPublisherでSQLJ Translatorの起動に使用するSQLJオプションの設定を指定します。 |
NA |
SQLJ |
|
|
JPublisherで、該当するメソッドを持つJavaクラス(およびオプションでサブクラスとインタフェース)を生成する対象のSQL問合せまたはデータ操作言語(DML)文を指定します。 |
NA |
入力ファイル/項目 |
|
|
Java間の型マッピングに使用するスタイル・ファイルの名前を指定します。 |
NA |
データ型マッピング |
|
|
データベース内でWebサービスのクライアント・プロキシ・クラスにアクセスするラッパーを実行するためのパーミッションの付与に使用できる、スーパーユーザー・アカウントの名前とパスワードを指定します。 |
NA |
Webサービス |
|
|
オブジェクト型用の |
|
Javaコード生成 |
|
|
JPublisherの型マップを指定します。 |
空 |
型マップ |
|
|
JPublisherでコードを生成するオブジェクト型を指定します。 注意: このオプションは |
NA |
入力ファイル/項目 |
|
|
JPublisherでデータベースの接続に使用するURLを指定します。 |
|
接続 |
|
|
接続に使用するOracleユーザー名およびパスワードを指定します。 |
NA |
接続 |
|
|
JPublisherでユーザー定義のSQL型に使用する |
|
データ型マッピング |
|
|
デフォルト以外のバージョンを使用する場合のJavaのバージョンを指定します。 |
NA |
Java環境 |
JPublisherオプションには、次のような使用上の注意があります。
JPublisherでは、常に-userオプションまたはその短縮形の-uが必要です。
オプションはその出現順に処理されます。INPUTファイルからのオプションは、-inputまたは-iオプションが出現した時点で処理されます。同様に、プロパティ・ファイルからのオプションは、-propsまたは-pオプションが出現した時点で処理されます。
特定のオプションが複数回出現すると、通常、JPublisherではそのオプションで最後に出現した値が使用されます。ただし、次のオプションの場合は累積されます。
-sql
-types(使用不可)
-java
-addtypemapまたは-adddefaulttypemap
-style
通常、オプションと対応するオプション値は等号(=)で区切ります。ただし、次のオプションをコマンドラインで指定する場合は、セパレータとして空白も使用できます。
-sqlまたは-s、-userまたは-u、-propsまたは-p、および-inputまたは-i
-sqljオプションを使用する場合は、-sqljオプションに続くSQLJ設定で等号を使用するため、等号のかわりに空白を使用する必要があります。次の例を考えてみます。-sqljの後の各エントリはSQLJオプションです。
% jpub -user=scott -sql=PERSON:Person -sqlj -optcols=true -optparams=true -optparamdefaults=datatype1(size1),datatype2(size) Enter scott password: password
コマンドラインまたはプロパティ・ファイルで-packageオプションを使用して、生成されたクラス用のJavaパッケージを指定することをお薦めします。たとえば、コマンドラインでは次のように入力できます。
% jpub -sql=Person -package=e.f ...
または、プロパティ・ファイルに次のように入力できます。
jpub.sql=Person jpub.package=e.f ...
これらの文により、Javaパッケージe.f内のクラスPerson(つまり、クラスe.f.Person)の作成をJPublisherに指示します。
INPUTファイルまたはコマンドラインで型またはパッケージを指定しない場合、JPublisherではユーザーのスキーマのすべての型およびパッケージが、コマンドラインまたはプロパティ・ファイルで指定したオプションに従って変換されます。
後続の項で使用されるJPublisherオプション構文は、次の表記規則に従います。
中カッコ{...}は選択可能な値のリストを囲みます。中カッコ内の値から1つのみを指定します。
縦線|は中カッコ内の複数の選択項目を区切ります。
イタリック体の部分はユーザー入力項目です。実際の値または文字列を指定します。
太字の部分はデフォルト値を示します。
大カッコ[...]はオプション項目を囲みます。ただし、大カッコや丸カッコが構文の一部になっていて、そのとおりの入力が必要な場合があります。その場合、このマニュアルでは太字の[...]または(...)を使用しています。
項目(またはカッコで囲まれた複数の項目)の直後に省略記号...がある場合は、その項目を何回でも繰り返すことができます。
このマニュアルでは、この項で説明されている記号以外の記号は示されたとおりに入力します。たとえば、「.(ピリオド)」や「@」などです。
この項では、主要な入力を指定する次のJPublisherオプションについて説明します。主要な入力とは、JPublisherの入力ファイル(INPUTファイルやプロパティ・ファイルなど)、あるいは公開する項目(SQLオブジェクト、PL/SQLパッケージ、SQL問合せ、SQL DML文またはサーバー・サイドJavaクラスなど)です。
入力ファイルのオプション: -input、-props
公開する項目のオプション: -java、-sql、-sqlstatement、-types
これらのオプションについてアルファベット順に説明します。
-inputオプションでは、JPublisherで公開するSQLエンティティ、PL/SQLエンティティまたはサーバー・サイドJavaクラスの名前を読み取るファイルの名前と、関連情報または指示を指定します。JPublisherでは、リストに指定した各項目が公開されます。INPUTファイルは、Javaクラス定義を必要とする型を示す型宣言のMakeファイルとみなすことができます。
-inputオプションの構文は次のとおりです。
-input=filename -i filename
この2つの書式はシノニムです。2番目の書式は、便利なコマンドライン短縮形です。
JPublisherでは、INPUTファイルにない他のクラスの変換が必要な場合があります。これは、変換実行前にINPUTファイル内の型の依存関係が分析されて、必要に応じて他の型が変換されるためです。
INPUTファイルまたはコマンドラインで公開する項目を指定していない場合、JPublisherは、接続先のデータベース・スキーマで宣言されているユーザー定義のSQL型とPL/SQLパッケージをすべて変換します。
-javaオプションを使用すると、サーバー・サイド・クラスにアクセスするクライアント・サイド・スタブ・クラスを作成できます。これは以前のリリースのJPublisherからの改善点です。以前のリリースでは、データベース・クライアントからJavaストアド・プロシージャおよびファンクションをコールするには、関連PL/SQLラッパーへのJDBCコールが必要でした。
-javaオプションの構文は次のとおりです。
-java=class_or_package_list
-javaオプションの機能は、-sqlオプションの機能をミラー化したものです。サーバー・サイドSQLオブジェクトまたはPL/SQLパッケージにアクセスするクライアント・サイドJavaクラスが作成されるのではなく、サーバー・サイドJavaクラスにアクセスするクライアント・サイドJavaスタブ・クラスが作成されます。
-javaオプションを使用する場合は、サーバー・サイドJavaクラスまたはパッケージのカンマ区切りのリストを指定します。
|
注意:
|
たとえば、次のようにします。
-java=foo.bar.Baz,foo.baz.*
または、デフォルトでサーバー・サイド名を使用するかわりに、Bazに対応するクライアント・サイド・クラス名を指定するには、次のようにします。
-java=foo.bar.Baz:MyBaz,foo.baz.*
この設定では、foo.bar.MyBazではなくMyBazが作成されます。
または
-java=foo.bar.Baz:foo.bar.MyBaz,foo.baz.*
また、スキーマも指定できます。
-java=foo.bar.Baz@SCOTT
スキーマを指定すると、そのスキーマのみが検索されます。スキーマを指定しない場合は、ログイン・ユーザーのスキーマが-userオプションの設定に従って検索されます。これが最も一般的な使用例です。
たとえば、サーバー上の次のメソッドをコールする必要があるとします。
public String oracle.sqlj.checker.JdbcVersion.to_string();
次の-java設定を使用します。
-java=oracle.sqlj.checker.JdbcVersion
|
注意: JPublisherでは、スキーマ(指定のスキーマまたはログイン・ユーザーのスキーマ)内で指定のクラスが見つからない場合、Class.forName()メソッドを使用してJava仮想マシン(JVM)内のシステム・クラス(通常はJava実行環境(JRE)クラスまたはJDKクラス)でクラスが検索されます。 |
-javaオプション用のコード生成 -javaオプションを使用する際、生成されたコードでは次のAPIが使用されます。
public class Client
{
public static String getSignature(Class[]);
public static Object invoke(Connection, String, String,
String, Object[]);
public static Object invoke(Connection, String, String,
Class[], Object[]);
}
このAPIのクラスはoracle.jpub.reflectパッケージにあるため、クライアント・アプリケーションではこのパッケージをインポートする必要があります。
-java=oracle.sqlj.checker.JdbcVersionに設定すると、JPublisherで生成されるコードには次のコールが含まれます。
Connection conn = ...;
String serverSqljVersion = (String)
Client.invoke(conn, "oracle.sqlj.checker.JdbcVersion",
"to_string", new Class[]{}, new Object[]{});
Class[]配列はメソッドのパラメータ型用で、Object[]配列はパラメータ値用です。この場合、to_stringにはパラメータがないため、各配列は空です。
次の点に注意してください。
シリアライズ可能な型(int[]やString[]など)を引数として渡すことができます。
このAPIのセマンティクスは、PL/SQLラッパーを介してJavaストアド・プロシージャまたはファンクションをコールする場合のセマンティクスとは次のように異なります。
引数にはOUTまたはIN OUTを使用できません。戻り値は、すべてファンクションの結果の一部である必要があります。
例外は正常に戻されます。
メソッドのコールには、実行者権限が使用されます。定義者権限を取得するためのチューニング機能は用意されていません。
|
関連項目: 実行者権限と定義者権限の詳細は、『Oracle Database Java開発者ガイド』を参照してください。 |
サーバー・サイドJavaクラスの公開に関連するオプションは、次のとおりです。
-dbajva=class_list
-proxyopts=single|multiple|static|arrayin|arrayout|arrayinout |arrayall|noload
-compatible=10.1
-sysuser=user/password
-plsqlfile=wrapper[,dropper]
-plsqlpackage=name
Oracle Database 10gリリース1(10.1)には、サーバー・サイドJavaクラスを公開するための-javaオプションが導入されています。Oracle Database 10gリリース2(10.2)には、サーバー・サイドJavaクラスの公開に対して新しい方法が導入されています。-dbjavaオプションを使用すると、サーバー・サイドJavaクラスをPL/SQLまたはクライアント・サイドJavaクラスに公開できます。class_list指定は、指定したサーバーにあるサーバー・サイド・クラスのカンマ区切りのリストです。class_list項目の書式は、classname[:name[#interface]]です。パッケージ名でもかまいません。次のオプションを考えてみます。
-dbajva=classname[:name[#interface]]
nameを指定しない場合、サーバー・サイドJavaクラスclassnameがPL/SQLに公開されます。指定した場合は、nameというクライアント・サイドJavaクラスに公開されます。interfaceを指定した場合は、クライアント・サイドJavaクラス用にインタフェース・ファイルが生成されます。
-proxyoptsオプションを-dbjavaと併用すると、インスタンス・メソッドのマップにシングルトン・インスタンスを使用するか複数インスタンスを使用するかが示されます。また、配列パラメータを持つメソッドをマップするかどうかも示します。この場合、配列はIN、OUT、IN OUT、または全モードと想定されます。-proxyopts=static設定は、静的メソッドのみが公開されることを指定します。デフォルト設定の-proxyopts=single,arrayinは、インスタンス・メソッドがシングルトン・インスタンスを使用してコールされ、配列パラメータが入力とみなされるということを示します。-proxyopts=noload設定は、JPublisherに対して、生成されたPL/SQLラッパーおよびJavaストアド・プロシージャ・ラッパーのロードを禁止します。
-compatible=10.1オプションにより、-dbjavaが-javaに等しくなります。
サーバー・サイドJavaクラスの公開に関連するオプションは、次のとおりです。
-proxyclasses=class_or_jar_list
-proxyopts=single|multiple|static|arrayin|arrayout|arrayinout |arrayall
-plsqlfile=wrapper[,dropper]
-plsqlpackage=name
-proxyclassesオプションは-dbjavaとよく似ています。-dbjavaでは公開対象のクラスがデータベース内に存在する必要がありますが、-proxyclassesではクラスがCLASSPATH内に存在する必要があります。通常、-proxyclassesを使用すると、公開済クラスおよび生成済ラッパーを後でデータベースにロードできます。
-proxyclassesオプションにより生成されるのは、PL/SQLラッパーのみです。-dbjavaとは異なり、サーバー・サイドJavaクラス用のクライアント・サイドJavaコードは生成されません。また-dbjavaとは異なり、-proxyclassesでは生成されたJavaストアド・プロシージャをデータベースにロードしません。
-proxyclassesオプションを使用すると、JPublisherでPL/SQLラッパーを作成するJavaクラス(緩やかなクラスまたはJava Archive(JAR)ファイル)のカンマ区切りのリストを指定できます。状況によっては、PL/SQLからのアクセス用にJPublisherでJavaラッパー・クラスも作成される場合があります。処理される各クラスにはパブリック・メソッドまたは静的メソッドが必要で、インスタンス・メソッドを公開するクラスの場合は引数のないpublicコンストラクタが必要です。
まとめると、-proxyoptsオプションの設定に応じて、処理されるクラスごとに次が生成されます。
PL/SQLからのアクセスを可能にするPL/SQLラッパー。これは常に生成されます。
公開するインスタンス・メソッドが存在する場合、Javaインスタンス・メソッドを静的メソッドとして公開するラッパー・クラス。
インスタンスのメソッドは、PL/SQLからアクセスできるように静的メソッドとして公開する必要があります。また、ラップするクラスのメソッド・コール順序にJavaプリミティブ型以外が使用されている場合も、ラッパー・クラスが必要になります。
-proxyclassesオプションを直接使用している場合は、JARファイルおよびCLASSPATH内に存在するJavaクラスを指定できます。クラスとJARファイルは、次のように指定できます。
クラス名。foo.bar.Bazまたはfoo.bar.Baz.classなど。
パッケージ名。foo.bar.*(@serverモードの場合のみ)など。
JARまたはZIPファイル名。foo/bar/baz.jarまたはBaz.zipなど。
JARまたはZIPファイル名とそれに続くクラスまたはパッケージをカッコで囲んだリスト。baz.jar (foo.MyClass1, foo.bar.MyClass2, foo1.*)など。
-proxyoptsオプションは、-dbjava、-proxywsdlおよび-proxyclassesオプションで入力として使用され、サーバー・サイドJavaクラスのラッパー・クラスおよびPL/SQLラッパーの生成時のJPublisher動作を指定します。
-proxyoptsオプションの構文は次のとおりです。
-proxyopts=setting1,setting2,...
このオプションでは、後述する基本設定を個別にまたは組み合せて使用します。この説明で、処理対象クラスとは、-dbjavaオプション、-proxywsdlオプションまたは-proxyclassesオプションを使用してラップされたクラスを意味します。
Javaラッパー・クラスが生成される場合、-packageオプションの設定によりパッケージがオーバーライドされないかぎり、foo.bar.MyClassクラスのラッパー・クラスはfoo.bar.MyClassJPubとなります。
基本の-proxyoptsの設定は次のように使用できます。
static設定を使用すると、処理対象クラスの静的メソッドの取扱い処理を指定できます。
この設定を使用すると、PL/SQLラッパーには、静的メソッドごとにラッパー・プロシージャが生成されます。この設定を使用しない場合、静的メソッドは無視されます。静的メソッドのみを含むクラスの場合は、メソッドのコール順序にJavaプリミティブ型のみを使用する処理対象クラスに、ラッパー・クラスは不要です。
multipleまたはsingle設定を使用すると、インスタンスのメソッドを静的メソッドとして公開する場合に、処理対象クラスのインスタンス・メソッドの取扱いを指定できます。どちらの場合も、処理対象クラスごとに、PL/SQLラッパーが生成されるのみではなく、インスタンス・メソッドを静的メソッドでラップする中間的なJavaクラスが生成されます。
instance設定を使用すると、インスタンスのメソッドをそのまま維持する場合に、処理対象クラスのインスタンス・メソッドの取扱いを指定できます。
これらの設定の機能は次のとおりです。
multiple
処理対象クラスごとに、Javaラッパー・クラスにはハンドルを使用して各インスタンス・メソッドと同等の静的メソッドが含められ、各ハンドルにより、ラップされるクラスのインスタンスが識別されます。
single
実行時に、ラップされるクラスごとにデフォルトのインスタンスが1つのみ使用されます。処理対象クラスごとに、Javaラッパー・クラスにはインスタンス・メソッドの静的ラッパー・メソッドが含まれ、ハンドルを使用する必要はありません。これはシングルトン・メカニズムです。
instance
インスタンス・メソッドは、Javaラッパー・クラス内でインスタンス・メソッドとしてラップされます。
|
注意: instance設定はWebサービスには該当しません。 |
前述の設定のいずれか、あるいは、singleを暗黙的に示すjaxrpcまたはsoap設定が指定されていない場合、インスタンス・メソッドは無視されます。いずれかを設定した場合は、引数のないパブリック・コンストラクタを提供するクラスのみが処理されます。両方の設定を使用すると、両方のスタイルによるラッパー・クラスを生成できます。
jaxrpcまたはsoap設定を使用すると、Webサービス・クライアント・プロキシ・クラスのインスタンスのメソッドを公開できます。これらの設定の機能は次のとおりです。
jaxrpc
これはデフォルト設定です。これはJAX-RPCクライアント・プロキシ・クラスをラップする場合に便利な設定で、Oracle Application Server 10g リリース10.0.1以降で使用する場合に適しています。処理対象クラスごとにJavaラッパー・クラスが作成され、PL/SQLラッパーも作成されます。クライアント・プロキシ・クラスには公開対象の静的メソッドがなく、デフォルトではシングルトン・メカニズムを使用してインスタンス・メソッドが公開されます。したがって、JAX-RPCクライアント・プロキシ・クラスを処理する場合は、-proxyopts=jaxrpcに設定すると-proxyopts=singleが暗黙的に設定されます。jaxrpc設定でも、JAX-RPCクライアント固有の特殊コードが生成されます。
soap
この設定はjaxrpc設定と等価ですが、JAX-RPCクライアント・プロキシ・クラスではなくSOAPクライアント・プロキシ・クラスがラップされます。これは、Oracle Application Server 10g(9.0.4)以前のリリースで使用する場合に適しています。
-proxyoptsオプションの基本的な使用方法を次に示します。
-proxyopts=jaxrpc -proxyopts=soap -proxyopts=static -proxyopts=static,instance -proxyopts=single -proxyopts=single,multiple -proxyopts=static,multiple
static,instance設定では、静的メソッドとインスタンス・メソッドが公開されます。single,multiple設定では、シングルトン・メカニズムおよびハンドル・メカニズムの両方を使用して、インスタンス・メソッドのみが公開されます。static,multiple設定では、静的メソッドおよびインスタンス・メソッドが公開されます。この場合、ハンドル・メカニズムを使用して、インスタンス・メソッドは静的メソッドとして公開されます。
|
注意: -proxyoptsオプションは、-proxywsdlオプションと併用するよりも、-proxyclassesオプションと明示的に併用する方が一般的です。-proxywsdlをOracle Application Server 10g リリース10.0.xで使用する場合は、デフォルトの-proxyopts=jaxrpc設定で十分です。 |
その他に、より高度な-proxyopts設定も用意されています。各設定の機能は次のとおりです。
noload
この設定を使用して、生成されるコードをデータベースにロードする必要がないことを示します。デフォルトでは、生成されるコードはロードされます。
recursive
この設定を使用して、別のクラスを拡張するクラスを処理するときに、継承されるメソッドのPL/SQLラッパーとJavaラッパー(該当する場合)も作成することを示します。
tabfun
この設定をjaxrpcまたはsoap設定と使用すると、JPublisherではラップされるWebサービス操作ごとにPL/SQLパッケージ用のPL/SQLテーブル・ファンクションが生成されます。これにより、データはストアド・プロシージャまたはファンクションではなく、データベース表を介して公開されます。
deterministic
この設定を使用して、生成されるPL/SQLラッパーにラップされるメソッドがDETERMINISTICであることを示します。通常は、この設定をtabfun設定とともに使用します。DETERMINISTICはPL/SQLの注釈です。
|
関連項目: DETERMINISTICファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 |
main(0,...)
この設定をstatic設定とともに使用して、クラスにpublic void String main(String[])メソッドがある場合に生成されるラッパー・メソッドを定義します。サポートする引数の数ごとに、別個のメソッドが生成されます。次の例に示すように、引数の数を示すときはカンマまたはハイフンを使用できます。
mainまたはmain(0)の場合は、引数が0(ゼロ)個のときにのみラッパー・メソッドが生成されます。
main(0,1)の場合は、引数が0(ゼロ)個および1個のときにラッパー・メソッドが生成されます。これはデフォルト設定です。
main(0-3)の場合は、引数が0(ゼロ)個、1個、2個および3個のときにラッパー・メソッドが生成されます。
main(0,2-4)の場合は、引数が0(ゼロ)個、2個、3個および4個のときにラッパー・メソッドが生成されます。
main()メソッドのラッパー・メソッドの引数の最大数は、PL/SQLの制限に従います。
次の例では、デフォルトでjaxrpcの基本設定を使用します。この例では、テーブル・ファンクションも使用し、ラップされるメソッドがDETERMINISTICであると指定しています。
-proxyopts=tabfun,deterministic
次の例では、staticモードを明示的に設定し、クライアント・プロキシ・クラスではないクラスを処理し、生成されるコードをデータベースにロードしないように指定しています。
-proxyopts=static,noload
-propsオプションは、JPublisherオプション設定を指定するJPublisherプロパティ・ファイルの名前を指定します。JPublisherでは、-propsオプションが指定されているコマンドラインからプロパティ・ファイルの内容が順序どおり挿入されたかのように処理されます。
-propsオプションの構文は次のとおりです。
-props=filename -p filename
この2つの書式はシノニムです。2番目の書式は、便利なコマンドライン短縮形です。
複数のプロパティ・ファイルがコマンドラインにある場合、JPublisherでは他のコマンドライン・オプションとともに、それらのプロパティ・ファイルが表示順に処理されます。
|
注意: エンコーディング設定は、JPublisherの-encodingオプションとJavaのfile.encoding設定のいずれを使用して設定する場合にも、Javaプロパティ・ファイルには適用しないでください。プロパティ・ファイルでは、常に8859_1エンコーディングが使用されます。これは、JPublisher固有の機能ではなくJava全般の機能です。ただし、プロパティ・ファイルではUnicodeエスケープ・シーケンスを使用できます。 |
-sqlオプションを使用して、公開する必要のあるSQLユーザー定義型(オブジェクトまたはコレクションなど)あるいはPL/SQLパッケージを指定します。オプションで、生成する必要のあるユーザー・サブクラスやインタフェースも指定できます。PL/SQLパッケージ全体または指定したサブセットを公開できます。
-sqlオプションの構文は次のとおりです。
-sql={toplevel|object_type_and_package_translation_syntax}
-s {toplevel|object_type_and_package_translation_syntax}
このオプションの2つの書式(-sqlおよび-s)はシノニムです。書式-sは、便利なコマンドラインの短縮形として使用できるように用意されています。
INPUTファイルを汎用的に使用する必要がない場合は、-sqlオプションを使用できます。-sqlオプションを使用すると、JPublisherで変換する、SQLで宣言された1つ以上のデータベース・エンティティをリストできます。または、同じコマンドラインに複数の-sqlオプションを指定する方法や、プロパティ・ファイル内で複数のjpub.sqlオプションを指定する方法があります。
同じ-sql宣言内では、ユーザー定義型の名前とパッケージ名を混在できます。JPublisherでは、それぞれの項目がオブジェクト型かパッケージであるかを検出できます。また、キーワードtoplevel付きの-sqlオプションを使用して、スキーマ内のすべてのパッケージに属さないPL/SQLプロシージャ・ファンクションを変換できます。toplevelキーワードは大/小文字を区別しません。
INPUTファイルまたはコマンドラインに変換対象の型やパッケージを入力しない場合、JPublisherでは接続先のスキーマ内にあるすべての型およびパッケージが変換されます。この項では、-sqlオプションを等価のINPUTファイル構文に変換して説明します。
-sql=name_a
JPublisherでは、生成されたクラスにデフォルト設定に従って名前が与えられ、name_aが公開されます。INPUTファイルでは、このオプションは次のように指定します。
SQL name_a
-sql=name_a:class_c
生成されたJavaクラスclass_cとしてname_aが公開されます。INPUTファイルでは、このオプションは次のように指定します。
SQL name_a AS class_c
-sql=name_a:class_b:class_c
この場合、name_aはオブジェクト型を表す必要があります。Javaクラスclass_bと、class_bを拡張するスタブ・クラスclass_cが生成されます。class_cのコードを提供すると、Javaコードでname_aを表すために使用されます。INPUTファイルでは、このオプションは次のように指定します。
SQL name_a GENERATE class_b AS class_c
-sql=name_a:class_b#intfc_b
-sql=name_a:class_b:class_c#intfc_c
この構文書式のいずれかを使用すると、JPublisherでJavaインタフェースが生成されます。この機能はWebサービスに特に有効です。最初の書式では、class_bはname_aを表し、intfc_bを実装します。2番目の書式では、class_cはname_aを表し、class_bを拡張し、intfc_cを実装します。
インタフェースは、生成されるクラスまたはユーザー・サブクラスの両方ではなく、どちらか一方についてのみ指定します。INPUTファイルでは、この構文は次のようになります。
SQL name_a [GENERATE class_b [ implements intfc_b] ] [AS class_c [ implements intfc_c ] ] ...
複数の変換項目を入力する場合は、各項目をカンマで区切る必要があります。空白は使用できません。次の例では、CORPORATIONをパッケージ、EMPLOYEEおよびADDRESSをオブジェクト型と想定します。
-sql=CORPORATION,EMPLOYEE:OracleEmployee,ADDRESS:JAddress:MyAddress
JPublisherではこのコマンドが次のように解析されます。
SQL CORPORATION SQL EMPLOYEE AS OracleEmployee SQL ADDRESS GENERATE JAddress AS MyAddress
JPublisherでは次の処理が実行されます。
CORPORATIONパッケージにラッパー・クラスが作成されます。
オブジェクト型EMPLOYEEがOracleEmployeeとして変換されます。
オブジェクト参照クラスOracleEmployeeRefが生成されます。
ADDRESSがJAddressとして変換されますが、ADDRESSオブジェクトがMyAddressクラスで表されるようにコードおよび参照が生成されます。
JAddressを拡張するMyAddressスタブが生成されます。ここにカスタム・コードを記述します。
オブジェクト参照クラスMyAddressRefが生成されます。
JPublisherで接続先スキーマにあるトップレベルのPL/SQLサブプログラムをすべて変換する場合は、-sqlオプションに続けてキーワードtoplevelを入力します。JPublisherでは、トップレベルのPL/SQLサブプログラムがパッケージ内にあるかのように扱われます。たとえば、次のようにします。
-sql=toplevel
JPublisherでは、パッケージに属さないプロシージャやファンクション用にラッパー・クラスtoplevelが生成されます。このクラスを異なる名前で生成する場合は、クラス名を次のように宣言できます。
-sql=toplevel:MyClass
これは次のINPUTファイル構文のシノニムであることに注意してください。
SQL toplevel AS MyClass
同様に、JPublisherで他のスキーマにあるトップレベルのPL/SQLサブプログラムをすべて変換する場合は、次のように入力します。
-sql=schema_name.toplevel
この例で、schema_nameは、トップレベルのサブプログラムを含むスキーマの名前です。さらに、PL/SQLパッケージ内またはトップレベルにあるストアド・プロシージャのサブセットのみを公開する機能も用意されています。その場合は次の構文を使用します。
-sql=plsql_package(proc1+proc2+proc3+...)
ストアド・プロシージャ名はプラス記号(+)で区切ります。また、SQLのトップレベルの場合は、次の構文を使用します。
-sql=toplevel(proc1+proc2+proc3+...)
次の構文はJPublisherのINPUTファイル用で、ストアド・プロシージャの名前はカンマで区切ります。
SQL plsql_package (proc1, proc2, proc3, ...) AS ...
|
注意:
|
また、次の構文を使用し、ストアド・プロシージャ名と引数の型に従ってサブセットを指定することもできます。
myfunc(sqltype1, sqltype2, ...)
この場合、名前および引数の数と型が一致するストアド・プロシージャのみが公開されます。たとえば、次のようにします。
-sql=mypackage(myfunc1(NUMBER, CHAR)+myfunc2(VARCHAR2))
-sqlstatementオプションを使用すると、SELECT、INSERT、UPDATEまたはDELETE文をJavaメソッドとして公開できます。この機能に使用するSQLJクラスが生成されます。
-sqlstatementオプションの構文は次のとおりです。
-sqlstatement.class=ClassName:UserClassName#UserInterfaceName -sqlstatement.methodName=sqlStatement -sqlstatement.return={both|resultset|beans}
-sqlstatement.classを使用して、メソッドを公開するJavaクラスを指定します。JPublisherで生成されるクラスに加え、生成されるクラスのユーザー・サブクラス、生成されるクラスまたはサブクラスのユーザー・インタフェース、あるいはその両方を必要に応じて指定できます。サブクラスとインタフェースに関する機能は、-sqlオプションと同じです。JPublisherの-packageオプションも使用すると、指定のクラスが指定のパッケージに生成されます。デフォルトのクラスはSQLStatementsです。
必要なJavaメソッド名とSQL文を指定するには、-sqlstatement.methodNameを使用します。SELECT文の場合は、-sqlstatement.returnを使用し、JPublisherで生成する必要のあるメソッドとして、汎用java.sql.ResultSetインスタンスを戻すメソッドまたはJavaBeansの配列を戻すメソッド、あるいはその両方を指定します。汎用とは、結果セットの列の型が不明または未指定であることを意味します。
ただし、問合せに関しては、列の型が実際にわかっています。これにより、Beansの配列を介して特定の結果を戻すという選択肢が提供されます。ResultSetを戻すメソッドの名前は、methodName()となります。JavaBeansを戻すメソッドの名前は、methodNameBeans()となります。
|
注意: 必要なクラス名とインタフェース名がパターンに従っている場合は、-genpatternオプションを使用できます。 |
INPUTファイル構文は、次のとおりです。
SQLSTATEMENTS_TYPE ClassName AS UserClassName IMPLEMENTS UserInterfaceName SQLSTATEMENTS_METHOD aSqlStatement AS methodName
一連のサンプル設定を次に示します。
-sqlstatement.class=MySqlStatements
-sqlstatement.getEmp="select ename from emp
where ename=:{myname VARCHAR}"
-sqlstatement.return=both
これらの設定により生成されるコードは、「生成されるコード: SQL文」を参照してください。
また、-styleオプションを介して指定したスタイル・ファイルが-sqlstatementオプションに関係することに注意してください。SQL文でJava型Yに対応するOracleデータ型Xを使用する場合に、スタイル・ファイル内でY型がJava型Zにマップされていると、-sqlstatementオプションの結果として生成されるメソッドではYではなくZが使用されます。
SELECT文またはDML文の結果の場合は、スタイル・ファイルを使用して結果をjavax.xml.transform.Source、oracle.jdbc.rowset.OracleWebRowSetまたはorg.w3c.dom.Documentにマップできます。
例: XML型の使用 この例では、-sqlstatementオプションとともにXML型SYS.XMLTYPEを使用する方法を示します。SQL*Plusを使用して次の表を作成するとします。
SQL> CREATE TABLE xmltab (a XMLTYPE);
INSERT文の公開に次のJPublisherコマンドを使用するとします。
% jpub -u scott -style=webservices10 -sqlstatement.addEle="insert into xmltab values:{a sys.xmltype})"
Enter scott password: password
このコマンドにより、次のメソッドが生成されます。
public int addEle(javax.xml.transform.Source a) throws java.rmi.RemoteException; public int addEleiS(javax.xml.transform.Source[] a) throws java.rmi.RemoteException;
これは、SYS.XMLTYPEがoracle.sql.SimpleXMLTypeにマップされ、oracle.sql.SimpleXMLTypeはwebservices10スタイル・ファイルによりさらにjavax.xml.transform.Sourceにマップされるためです。
メソッド名addEleiSはJPublisherのネーミング規則に従ってメソッドのオーバーロードを回避するために使用されており、iにはint戻り型が反映され、SにはSourceパラメータ型が反映されています。
|
注意: この例では、JDK 1.4をインストール済でJPublisherで使用されることを想定しています。インストール済でもデフォルトで使用されない場合は、-vmおよび-compiler-executableオプションを設定してJDK 1.4のJVMとコンパイラを指定できます。詳細は、「Java環境オプション」を参照してください。 |
-typesオプションを使用すると、JPublisherで変換する1つ以上の個別オブジェクト型をリストできます。-typesオプションの構文は次のとおりです。
-types=type_translation_syntax
|
注意: -typesオプションは互換性を保つために現在サポートされていますが、他の指定の方が優先します。かわりに-sqlオプションを使用してください。 |
INPUTファイルを汎用的に使用する必要がない場合は、SQLオブジェクト型に対してのみ-typesオプションを使用できます。-typesオプションはPL/SQLパッケージをサポートしない点を除いては、-sqlオプションと同一です。
INPUTファイルまたはコマンドラインに変換対象の型やパッケージを入力しない場合、JPublisherでは接続先のスキーマ内にあるすべての型およびパッケージが変換されます。コマンドライン構文では、次の3つの型変換を指定できます。
-types=name_a
JPublisherではこの構文は次のように解析されます。
TYPE name_a
-types=name_a:name_b
JPublisherではこの構文は次のように解析されます。
TYPE name_a AS name_b
-types=name_a:name_b:name_c
JPublisherではこの構文は次のように解析されます。
TYPE name_a GENERATE name_b AS name_c
TYPE、TYPE...ASおよびTYPE...GENERATE...ASコマンドの機能は、SQL、SQL...ASおよびSQL...GENERATE...AS構文と同じです。
-types=...とコマンドラインに入力した後、JPublisherで実行する1つ以上のオブジェクト型変換を入力します。複数項目を入力する場合は、各項目をカンマで区切る必要があります。空白は使用できません。たとえば、次のように入力します。
-types=CORPORATION,EMPLOYEE:OracleEmployee,ADDRESS:JAddress:MyAddress
JPublisherではこのコマンドは次のように解析されます。
TYPE CORPORATION TYPE EMPLOYEE AS OracleEmployee TYPE ADDRESS GENERATE JAddress AS MyAddress
この項では、JPublisherで使用されるデータベース接続関連のオプションについて説明します。これらのオプションをアルファベット順に説明します。
-contextオプションでは、JPublisherで使用され、JPublisherで生成されるSQLJクラスについて宣言できる接続コンテキスト・クラスを指定します。-contextオプションの構文は次のとおりです。
-context={generated|DefaultContext|user_defined}
-context=DefaultContextは、デフォルトの設定です。JPublisherで生成されたSQLJクラスでは、すべての接続コンテキストにSQLJのデフォルト接続コンテキスト・クラスsqlj.runtime.ref.DefaultContextが使用されます。ほとんどの使用方法では、これで十分です。
あるいは、標準sqlj.runtime.ConnectionContextインタフェースを実装し、CLASSPATHに存在するユーザー定義クラスを指定できます。指定したクラスがすべての接続コンテキストに使用されます。
|
注意: ユーザー定義クラスを使用する場合は、そのクラスのインスタンスをgetConnectionContext()メソッドからの出力またはsetConnectionContext()メソッドへの入力に使用する必要があります。これらのメソッドの詳細は、「SQLJクラスでの接続コンテキストおよびインスタンス」を参照してください。 |
-context=generatedに設定すると、JPublisherで生成されるすべてのSQLJクラスで、接続コンテキスト・クラス_Ctxのインナー・クラスが宣言されます。そのため、各クラスでは独自のSQLJ接続コンテキスト・クラスが使用されます。この設定は、Oracle8i互換モードに適している場合がありますが、それ以外の場合にはお薦めしません。DefaultContextクラスまたはユーザー定義クラスを使用すると、追加の接続コンテキスト・クラスは生成されません。コマンドラインまたはプロパティ・ファイルで-contextオプションを指定できます。
下位互換性モードで-contextを使用する場合の注意
下位互換性モードを使用し、.sqljファイルとSQLJ Translatorを直接使用する場合は、.sqljファイルの変換とコンパイルを別々のステップで実行し、SQLJの-compile=false設定を使用して変換すると、-context=DefaultContext設定により柔軟性が高くなります。JDK 1.2固有の型(java.sql.BLOB、CLOB、Struct、RefまたはArrayなど)を使用しない場合、生成された.javaファイルはJDK 1.1またはJDK 1.2以上でコンパイルできます。ただし、これは-context=generated設定を使用する場合は該当しません。これは、JDK 1.1でのSQLJ接続コンテキスト・クラスはオブジェクト型のマップにjava.util.Dictionaryインスタンスを使用しますが、JDK 1.2以上のSQLJ接続コンテキスト・クラスはjava.util.Mapインスタンスを使用するためです。
.sqljファイルを直接操作する場合に-context=generated設定を使用する利点は、SQLJ Translatorによるオンライン・チェックの実行方法を全面的に制御できることです。特に、SQLユーザー定義型およびPL/SQLパッケージを、適切なサンプル・データベース・スキーマに対してチェックできます。ただし、JPublisherでは既存のスキーマから.sqljファイルが生成されるため、生成されたコードが適切かどうかは、そのスキーマからの構成を通じてすでに検証済です。
-datasourceを使用すると、SQL、PL/SQL、AQおよびサーバー・サイドJavaクラスの公開に使用するデフォルトのデータ・ソースを指定できます。-datasourceを設定すると、JDBC接続がアプリケーションの実行時に明示的に設定されない場合、生成されたコードは指定のJava Naming and Directory Interface(JNDI)の場所を参照してデータ・ソースを取得し、さらにそのデータ・ソースからJDBC接続を取得します。
-datasourceオプションの構文は次のとおりです。
-datasource=jndi_location
-driverオプションは、JPublisherでデータベースとのJDBC接続に使用するドライバのクラスを指定します。このオプションの構文は次のとおりです。
-driver=driver_class_name
デフォルト設定は次のとおりです。
-driver=oracle.jdbc.OracleDriver
この設定はあらゆるOracle JDBCドライバに適合します。
-urlオプションを使用して、接続先のデータベースのURLを指定できます。-urlオプションの構文は次のとおりです。
-url=URL
デフォルト設定は次のとおりです。
-url=jdbc:oracle:oci:@
JDBC Thinドライバを指定するには、次の書式の設定を使用します。
-url=jdbc:oracle:thin:@host:port/servicename
この構文で、hostはデータベースを実行するホストの名前、portはポート番号、servicenameはデータベース・サービス名です。
|
注意: システム識別子(SID)はOracle Database 10gからは使用できなくなりましたが、下位互換性のために引き続きサポートされます。SIDを使用する場合の書式は、host:port:sidです。
Oracle JDBC Oracle Call Interface(OCI)ドライバの場合は、新規コードの接続文字列に |
JPublisherには、データベースに接続できるように、Oracleユーザー名とパスワードを指定する-userオプションが必要です。-userオプションを入力しない場合、JPublisherではエラー・メッセージが発行されて実行が停止します。
-userオプションの構文は次のとおりです。
-user=username/password -u username/password
この2つの書式は等価です。2番目の書式は、便利なコマンドライン短縮形です。
たとえば、次のコマンドは、ユーザー名scottを使用してデータベースに接続するようにJPublisherに指示します。
% jpub -user=scott -input=demoin -dir=demo -mapping=oracle -package=corp
Enter scott password: password
次のオプションは、JPublisherでオブジェクト型、コレクション型、オブジェクト参照型およびPL/SQLパッケージをJavaクラスに変換するときに使用するデータ型マッピングを制御します。
-usertypesオプションは、oracleマッピング用の-compatibleオプションとともに、ユーザー定義型に対するJPublisherの動作を制御します。特に、JPublisherで生成されたクラスにOracle ORADataインタフェースと標準SQLDataインタフェースのどちらを実装するか、およびJPublisherでコレクション型とオブジェクト参照型用のコードを生成するかどうかを制御します。
-numbertypesオプションは、数値型のデータ型マッピングを制御します。
-lobtypesオプションは、BLOB、CLOBおよびBFILE型のデータ型マッピングを制御します。
-builtintypesオプションは、非数値型で非LOB型の、事前定義済SQL型およびPL/SQL型のデータ型マッピングを制御します。
これらの4つのオプションは、型マッピング・オプションと呼ばれます。
オブジェクト型の場合、JPublisherで型マッピング・オプションにより指定したマッピングが、オブジェクトの属性およびそのオブジェクトに含まれるメソッドの引数と結果に適用されます。マッピングにより、生成済のアクセッサ・メソッドがサポートする型が制御されます。たとえば、getXXX()メソッドが戻す型やsetXXX()メソッドが受け入れる型をサポートします。
PL/SQLパッケージの場合、JPublisherではマッピングはパッケージ内のメソッドの引数および結果に適用されます。コレクション型の場合、JPublisherではマッピングはコレクション要素の型に適用されます。
また、-styleオプションについても後述します。このオプションを使用すると、通常はWebサービスをサポートするために、Java間の型マッピングを指定できます。そのためには、JPublisherのステップが1つ多くなります。SQL型はJPublisherで生成されるベース・クラス内でWebサービスによりサポートされていないJava型にマップされます。次に、このJava型は、JPublisherで生成されるユーザー・サブクラス内でWebサービスによりサポートされているJava型にマップされます。
-builtintypesオプションは、-lobtypesオプションにより制御されるLOB型と-numbertypesオプションにより制御される様々な数値型を除く、すべての組込みデータ型のデータ型マッピングを制御します。-builtintypesオプションの構文は次のとおりです。
-builtintypes={jdbc|oracle}
表6-2に、-builtintypesオプションの影響を受けるデータ型を示します。また、-builtintypes=oracleおよび-builtintypes=jdbc(デフォルト)のJava型マッピングも示します。
表6-2 -builtintypesオプションの影響を受ける型のマッピング
| SQLデータ型 | Oracleマッピングの型 | JDBCマッピングの型 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-lobtypesオプションは、LOB型のデータ型マッピングを制御します。-lobtypesオプションの構文は次のとおりです。
-lobtypes={jdbc|oracle}
表6-3に、これらの型が-lobtypes=oracle(デフォルト)および-lobtypes=jdbcにどのようにマップされるかを示します。
表6-3 -lobtypesオプションの影響を受ける型のマッピング
| SQLデータ型 | Oracleマッピングの型 | JDBCマッピングの型 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
注意:
|
-numbertypesオプションは、数値SQL型およびPL/SQL型のデータ型マッピングを制御します。-numbertypesオプションの構文は次のとおりです。
-numbertypes={jdbc|objectjdbc|bigdecimal|oracle}
次の選択肢を使用できます。
JDBCマッピングでは、ほとんどの数値型はintおよびfloatなどのJavaプリミティブ型にマップされ、DECIMALおよびNUMBERはjava.math.BigDecimalにマップされます。
Object JDBCマッピング(デフォルト)では、ほとんどの数値データ型はjava.lang.Integerやjava.lang.FloatなどのJavaラッパー・クラスにマップされます。DECIMALおよびNUMBERはjava.math.BigDecimalにマップされます。
Oracleマッピングでは、すべての数値データ型がoracle.sql.NUMBERにマップされます。
表6-4に、-numbertypesオプションの影響を受けるデータ型を示します。また、-numbertypes=jdbcおよび-numbertypes=objectjdbc(デフォルト)のJava型マッピングも示します。
表6-4 -numbertypesオプションの影響を受ける型のマッピング
| SQLデータ型 | JDBCマッピングの型 | Object JDBCマッピングの型 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-usertypesオプションは、ユーザー定義型用に生成されたクラスに、Oracle ORADataインタフェースと標準SQLDataインタフェースのどちらを実装するかを制御します。-usertypesオプションの構文は次のとおりです。
-usertypes={oracle|jdbc}
-usertypes=oracle(デフォルト)の場合、JPublisherではオブジェクト型、コレクション型およびオブジェクト参照型用にORADataクラスが生成されます。
-usertypes=jdbcの場合、JPublisherではオブジェクト型用にSQLDataクラスが生成されます。この場合、JPublisherではコレクション型またはオブジェクト参照型用のクラスは生成しません。すべてのコレクション型にはjava.sql.Arrayを、すべてのオブジェクト参照型にはjava.sql.Refを使用する必要があります。
|
注意:
|
-mappingオプションでは、すべてのデータ型のマッピングを指定するため、型間の柔軟性はほとんど得られません。-mappingオプションの構文は次のとおりです。
-mapping={jdbc|objectjdbc|bigdecimal|oracle}
|
注意: このオプションは、より限定的な型マッピング・オプション-usertypes、-numbertypes、-builtintypesおよび-lobtypesのために使用不可になっています。ただし、下位互換性のために引き続きサポートされています。 |
-mapping=oracle設定は、すべての型マッピング・オプションをoracleに設定するのと同等です。他の-mapping設定は、-numbertypesを-mappingの値と同一に設定し、他の型マッピング・オプションをデフォルトに設定するのと同等です。この要約を表6-5に示します。
表6-5 -mapping設定と他のマッピング・オプション設定の関係
| -mapping設定 | -builtintypes= | -numbertypes= | -lobtypes= | -usertypes= |
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
注意: オプションはコマンドラインに入力した順に処理されます。したがって、-mappingオプションが特定の型マッピング・オプション(-builtintypes、-lobtypes、-numbertypesまたは-usertypes)の前にある場合、その型マッピング・オプションは、関連する型の-mappingオプションをオーバーライドします。-mappingオプションが特定の型マッピング・オプションの後に続く場合は、その型マッピング・オプションは無視されます。 |
JPublisherのスタイル・ファイルを使用すると、Java間の型マッピングを指定できます。その使用方法の1つは、生成されるクラスをWebサービスで確実に使用できるようにすることです。-styleオプションを使用してスタイル・ファイル名を指定します。-styleオプションは複数回使用できます。設定は順番に累積されます。-styleオプションの構文は次のとおりです。
-style=stylename
通常、Oracleにはスタイル・ファイルが用意されていますが、編集したり独自に作成する場合があります。たとえば、Oracle Database 11gでWebサービスにOracleスタイル・ファイルを使用するには、次の設定を使用します。
-style=webservices10
JPublisherのコード生成は、JPublisherのユーザー型マップまたはデフォルトの型マップのエントリの影響を受けます。これは、主にJDBCからPL/SQL型を持つシグネチャへのアクセスを可能にするためです。型マップ・エントリの書式は、次のいずれかです。
-type_map_option=opaque_sql_type:java_type -type_map_option=numeric_indexed_by_table:java_numeric_type[max_length] -type_map_option=char_indexed_by_table:java_char_type[max_length](elem_size) -type_map_option=plsql_type:java_type:sql_type:sql_to_plsql_func:plsql_to_sql_func
型マップ構文では、sql_to_plsql_funcとplsql_to_sql_funcがSQLとPL/SQL間の変換ファンクション用です。と[...]と(...)が構文の一部であることに注意してください。また、一部のオペレーティング・システムでは、特殊文字を含むコマンドライン・オプションを引用符で囲む必要があります。
関連オプションは-addtypemap、-adddefaulttypemap、-defaulttypemapおよび-typemapです。各オプションについては、以降の各項でアルファベット順に説明します。-addtypemapと-typemapには、-addtypemapではユーザー型マップにエントリを追加するのに対して、-typemapでは既存のユーザー型マップを指定したエントリで置き換えるという違いがあります。同様に、-adddefaulttypemapではデフォルトの型マップにエントリを追加するのに対して、-defaulttypemapでは既存のデフォルトの型マップを指定したエントリで置き換えます。
-defaulttypemapおよび-adddefaulttypemapオプションを使用するプロパティ・ファイルからの型マップ設定の例を次に示します。
jpub.defaulttypemap=SYS.XMLTYPE:oracle.xdb.XMLType jpub.adddefaulttypemap=BOOLEAN:boolean:INTEGER: SYS.SQLJUTL.INT2BOOL:SYS.SQLJUTL.BOOL2INT jpub.adddefaulttypemap=INTERVAL DAY TO SECOND:String:CHAR: SYS.SQLJUTL.CHAR2IDS:SYS.SQLJUTL.IDS2CHAR jpub.adddefaulttypemap=INTERVAL YEAR TO MONTH:String:CHAR: SYS.SQLJUTL.CHAR2IYM:SYS.SQLJUTL.IYM2CHAR
デフォルトの型マップとユーザー型マップとの競合を回避する必要があることに注意してください。
-adddefaulttypemapオプションを使用すると、JPublisherのデフォルトの型マップに1つのエントリまたはカンマ区切りのエントリ・リストを追加できます。また、JPublisherではこのオプションが内部的に使用されます。このオプションの構文は次のとおりです。
-adddefaulttypemap=list_of_typemap_entries
-addtypemapオプションを使用すると、JPublisherのユーザー型マップに1つのエントリまたはカンマ区切りのエントリ・リストを追加できます。このオプションの構文は次のとおりです。
-addtypemap=list_of_typemap_entries
JPublisherでは、-defaulttypemapオプションが内部的に使用され、デフォルトの型マップに事前定義済の型マップ・エントリが設定されます。このオプションの構文は次のとおりです。
-defaulttypemap=list_of_typemap_entries
-adddefaulttypemapオプションと-defaulttypemapオプションには、-adddefaulttypemapではデフォルトの型マップにエントリを追加するのに対して、-defaulttypemapでは既存のデフォルトの型マップを指定したエントリで置き換えるという違いがあります。デフォルトの型マップを消去するには、次の設定を使用します。
-defaulttypemap=
たとえば、この設定を使用すると、デフォルトの型マップとユーザー型マップ間の競合を回避できます。
-typemapオプションを使用すると、1つのエントリまたはカンマ区切りのエントリ・リストを指定してユーザー型マップを設定できます。このオプションの構文は次のとおりです。
-typemap=list_of_typemap_entries
-typemapオプションと-addtypemapオプションの違いは、-typemapでは既存のユーザー型マップを指定したエントリで置き換えるのに対して、-addtypemapではユーザー型マップにエントリを追加するということです。ユーザー型マップを消去するには、次の設定を使用します。
-typemap=
たとえば、この設定を使用すると、デフォルトの型マップとユーザー型マップ間の競合を回避できます。
この項では、Javaコード生成に関するJPublisherの特性および動作を指定するオプションについて説明します。たとえば、次の用途を持つオプションがあります。
生成されるコードのパラメータのモードまたは型に従ったフィルタ処理
生成されるコードがJavaBeans仕様に準拠することの保証
ネーミング・パターンの指定
ユーザー・サブクラス用のスタブ生成方法の指定
生成されるコードがシリアライズ可能かどうかの指定
オプション-access、-case、-codegen、-filtermodes、-filtertypes、-generatebean、-genpattern、-gensubclass、-methods、-omit_schema_names、-outarguments、-package、-serializableおよび-tostringについてアルファベット順に説明します。
-accessオプションは、JPublisherにより生成されたコンストラクタ、属性のsetterメソッドとgetterメソッド、オブジェクト・ラッパー・クラスのメンバー・メソッドおよびPL/SQLパッケージのメソッドについて組み込まれるアクセス修飾子を決定します。このオプションの構文は次のとおりです。
-access={public|protected|package}
JPublisherで可能なオプション設定は、次のとおりです。
public
publicアクセス修飾子を持つメソッドが生成されます。これはデフォルトのオプション設定です。
protected
protectedアクセス修飾子を持つメソッドが生成されます。
package
アクセス修飾子は省略されます。そのため、生成されたメソッドはパッケージに対してローカルになります。
生成されたJPublisherラッパー・クラスの使用を制御する必要がある場合は、-access=protectedまたは-access=package設定を使用します。たとえば、JPublisherで生成されたクラスのサブクラスとして、カスタマイズしたバージョンのラッパー・クラスを提供し、生成されたスーパークラスへのアクセスは提供しないようにするときなどです。
コマンドラインまたはプロパティ・ファイルで-accessオプションを指定できます。
|
注意: オブジェクト参照、VARRAYおよびネストした表型用のラッパー・クラスは、-accessオプションの値の影響を受けません。 |
クラスまたは属性名をINPUTファイルまたはコマンドラインで指定しない場合、-caseオプションはJPublisherで生成されるJava識別子の大/小文字区別に影響します。これには、クラス名、メソッド名、getXXX()およびsetXXX()メソッド名に埋め込まれる属性名、生成されるメソッド名の引数が含まれます。このオプションの構文は次のとおりです。
-case={mixed|same|lower|upper}
表6-6に、-caseオプションで可能な値を示します。
表6-6 -caseオプションの値
| -caseオプション値 | 説明 |
|---|---|
|
|
クラス名の各単語の1文字目、またはメソッド名の2番目以降の単語の1文字目は、大文字になります。他のすべての文字は小文字です。アンダースコア(_)、ドル記号($)およびJavaで無効なすべての文字は、ワード単位の境界を構成して暗黙的に警告なしで削除されます。単語の境界はメソッド名の |
|
|
JPublisherでは、データベース上で表される大/小文字の区別は変更されません。アンダースコアおよびドル記号は保持されます。Javaで無効な他の文字は削除され、警告メッセージが発行されます。 |
|
|
JPublisherで小文字は大文字に変換され、アンダースコアおよびドル記号は保持されます。Javaで無効な他の文字は削除され、警告メッセージが発行されます。 |
|
|
JPublisherで大文字は小文字に変換され、アンダースコアおよびドル記号は保持されます。Javaで無効な他の文字は削除され、警告メッセージが発行されます。 |
JPublisherオプションまたはINPUTファイルを介して指定したクラス名または属性名の場合、JPublisherではその名前の文字の大/小文字区別が保持され、-caseオプションがオーバーライドされます。
-codegenオプションは、生成されたJavaコードがSQLJランタイムまたはJDBCランタイムのどちらを使用するかを決定します。このオプションの構文は次のとおりです。
-codegen=jdbc|sqlj
デフォルトの値はsqljです。
設定-codegen=jdbcは、JPublisherがJDBCランタイムを使用してJavaコードを生成することを示します。JDBCランタイムに純粋に依存するJavaコードの生成は、JPublisher 11gリリースの新機能です。設定-codegen=sqljは、JPublisherがSQLJランタイムを使用してJavaコードを生成することを示します。これは、JPublisher 11gリリースのデフォルトの動作です。以前のリリースのJPublisherでは、SQLJランタイムのみを使用してJavaコードが生成されます。
特にWebサービス用のコード生成の場合、メソッドのシグネチャまたは属性では、コードの使用目的について一部のパラメータ・モードがサポートされない場合があります。-filtermodesオプションを使用すると、生成されるコードをパラメータ・モードに従ってフィルタ処理できます。このオプションの構文は次のとおりです。
-filtermodes=list_of_modes_to_filter_out_or_filter_in
-filtermodesオプションには次の設定を指定できます。
in
out
inout
return
オプション設定を1で開始し、デフォルトでモードまたは型がすべて組み込まれるようにします。これはフィルタリングなしを意味します。次に、特定のモードまたは型の後にそれぞれマイナス記号(-)を付けてリストします。これは、そのモードまたは型を除外することを示します。かわりに、0を指定して、デフォルトでどのモードも型も組み込まれないようにします。これは全体をフィルタリングすることを意味します。次に特定のモードまたは型の後にそれぞれプラス記号(+)を付けて、そのモードまたは型が許可されることを示します。
次の例の結果はいずれも同じになり、inまたはreturnモードのパラメータを持つメソッドのみが許可されます。各エントリはカンマで区切ります。
-filtermodes=0,in+,return+ -filtermodes=1,out-,inout-
特にWebサービス用のコード生成の場合、メソッドのシグネチャまたは属性では、コードの使用目的について一部のパラメータ型がサポートされない場合があります。-filtertypesオプションを使用すると、生成されるコードをパラメータの型に従ってフィルタ処理できます。このオプションの構文は次のとおりです。
-filtertypes=list_of_types_to_filter_out_or_filter_in
-filtertypesオプションには次の設定を指定できます。
Java型の修飾名
java.sql.SQLData、oracle.sql.ORADataなど、パッケージとクラスを指定します。
.ORADATA
この設定は、任意のORAData実装またはSQLData実装を示します。
.STRUCT、.ARRAY、.OPAQUE、.REF
各設定は、対応する_SQL_TYPECODEを指定してORADataまたはSQLDataを実装する型を示します。
.CURSOR
この設定は、任意のSQLJイテレータ・タイプとjava.sql.ResultSetを示します。
.INDEXBY
この設定は任意の索引付き表の型を示します。
.ORACLESQL
この設定はすべてのoracle.sql.XXX型を示します。
オプション設定を1で開始し、デフォルトでモードまたは型がすべて組み込まれるようにします。これはフィルタリングなしを意味します。次に、特定のモードまたは型の後にそれぞれマイナス記号(-)を付けてリストします。これは、そのモードまたは型を除外することを示します。かわりに、0を指定して、デフォルトでどのモードも型も組み込まれないようにします。これは全体をフィルタリングすることを意味します。次に特定のモードまたは型の後にそれぞれプラス記号(+)を付けて、そのモードまたは型が許可されることを示します。
次に示す最初の例では、フィルタ処理で.ORADATAおよび.ORACLESQLのみが除外されます。2番目の例では、.CURSORおよび.INDEXBYを除くすべてが除外されます。
-filtertypes=1,.ORADATA-,.ORACLESQL- -filtertypes=0,.CURSOR+,.INDEXBY+
.STRUCT、.ARRAY、.OPAQUEおよび.REF設定は、.ORADATA設定のサブカテゴリです。したがって、次のように指定できます。この場合、型コードがSTRUCTの型を除き、ORAData型とSQLData型がすべて除外されます。
-filtertypes=1,.ORADATA-,.STRUCT+
あるいは、ORAData型またはSQLData型全般を許可し、型コードがARRAYまたはREFの型を除外できます。
-filtertypes=0,.ORADATA+,.ARRAY-,.REF-
-generatebeanオプションは、生成されるクラスがJavaBeans仕様に準拠することを保証するために使用できるフラグです。このオプションの構文は次のとおりです。
-generatebean={true|false}
デフォルト設定は-generatebean=falseです。-generatebeam=trueに設定すると、JavaBeansプロパティのgetterまたはsetterメソッドとみなされないように、生成される一部のメソッドの名前が変更されます。そのために、メソッド名に接頭辞としてアンダースコア(_)が追加されます。たとえば、SQLの表型、VARRAY型または索引付き表の型から生成されるクラスの場合は、メソッド名が次のように変更されます。
変更前のメソッド名は次のとおりです。
public int getBaseType() throws SQLException; public int getBaseTypeName() throws SQLException; public int getDescriptor() throws SQLException;
変更後のメソッド名は次のとおりです。
public int _getBaseType() throws SQLException; public String _getBaseTypeName() throws SQLException; public ArrayDecscriptor _getDescriptor() throws SQLException;
戻り型の変更が必要となるのは、JavaBeans仕様でgetterメソッドがBeanのプロパティを戻す必要があるのに対し、getBaseType()、getBaseTypeName()およびgetDescriptor()はBeanのプロパティを戻さないことになっているためです。
通常、ユーザー定義のSQL型またはパッケージ用に生成されるJavaクラス、ユーザー・サブクラスおよびインタフェースについては、特定のネーミング・パターンに従うことをお薦めします。-genpatternオプションを使用すると、この種のパターンを簡単かつ汎用的に定義できます。このオプションは、-sqlまたは-sqlstatementオプションと併用できます。このオプションの構文は次のとおりです。
-genpattern=pattern_specifications
次の明示的なコマンドライン・オプションを考えてみます。
-sql=PERSON:PersonBase:PersonUser#Person -sql=STUDENT:StudentBase:StudentUser#Student -sql=GRAD_STUDENT:GradStudentBase:GradStudentUser#GradStudent
次の2つのオプションは、前述のオプション・セットと同等です。
-genpattern=%1Base:%1User#%1 -sql=PERSON,STUDENT,GRAD_STUDENT
%1は、定義上、JPublisherで各SQL型に対して作成されるデフォルトのベース名を指します。JPublisherでは、デフォルトでSQL型PERSONの場合はJava型Person、SQL型STUDENTの場合はJava型Student、SQL型GRAD_STUDENTの場合はJava型GradStudentが作成されます。このため、%1BaseはそれぞれPersonBase、StudentBaseおよびGradStudentBaseとなります。1Userの場合も同様の結果になります。
-sqlオプションで出力名を指定する場合、%2は定義上、指定の名前を指します。たとえば、次のオプションのペアを指定した場合の効果は、前述のペアと同じです。
-genpattern=%2Base:%2User#%2 -sql=PERSON:Person,STUDENT:Student,GRAD_STUDENT:GradStudent
|
注意: これは、Webサービスの場合に予期されるパターンです。出力名を指定してそれをインタフェース名として使用し、生成されるクラスの場合はBase、ユーザー・サブクラスの場合はUserを追加します。 |
-genpatternオプションと-sqlstatementオプションを併用する例を次に示します。
-sqlstatement.class=SqlStmts -genpattern=%2Base:%2User:%2
この設定は、次の設定と同等です。
-sqlstatement.class=SqlStmtsBase:SqlStmtsUser#SqlStmts
-gensubclassオプションの値によって、JPublisherでユーザー指定のサブクラスの初期ソース・ファイルが生成されるかどうか、および生成される場合にはそのサブクラスのフォーマットが決定されます。このオプションの構文は次のとおりです。
-gensubclass={true|false|force|call-super}
-gensubclass=true(デフォルト)に設定すると、ユーザー・サブクラスのソース・ファイルが存在しないことが検出された場合にのみ、サブクラス用のコードが生成されます。-gensubclass=falseに設定すると、JPublisherではユーザー・サブクラス用のコードは生成されません。
-gensubclass=forceに設定すると、常にユーザー・サブクラス用のコードが生成されます。対応する.javaおよび.classファイルに既存の内容が存在する場合は、それが上書きされます。この設定は慎重に使用してください。
設定-gensubclass=call-superには-gensubclass=trueに設定した場合と同じ効果がありますが、JPublisherで生成されるコードは若干異なります。デフォルトでは、ORADataインタフェースなどの実装に必要なコンストラクタとメソッドのみが生成されます。スーパークラスのメソッドや属性のsetterメソッドとgetterメソッドのコール方法は示されますが、このコードがコメントに挿入されることはありません。call-super設定では、getter、setterおよび他のメソッドがすべて生成されます。
そこで、クラスのイントロスペクションに基づくJava開発ツールを使用している場合に、この設定を指定できます。必要となるのはSQLオブジェクト属性とSQLオブジェクト・メソッドに関連するメソッドのみで、JPublisherの実装の詳細は隠されたままです。この場合は、生成されたユーザー・サブクラスでツールを指すことができます。
コマンドラインまたはプロパティ・ファイルで-gensubclassオプションを指定できます。
-methodsオプションにより、次のことが決まります。
JPublisherでSQLオブジェクト型とPL/SQLパッケージのメソッド(ストアド・プロシージャ)用にラッパー・メソッドを生成するかどうか。
オーバーロードされたメソッドの名前を許可するかどうか。
SQLExceptionが検出された場合に、メソッドでJDBC接続を再確立するかどうか。
-methodsオプションの構文は次のとおりです。
-methods={all|none|named|always,overload|unique,noretry|retry}
-methods=all(最初の設定グループのデフォルト)の場合、JPublisherでは処理対象のSQLオブジェクト型およびPL/SQLパッケージのすべてのメソッドに対してラッパー・メソッドが生成されます。これにより、基礎となるSQLオブジェクトまたはパッケージで実際にメソッドが定義されている場合はSQLJクラス、それ以外の場合は非SQLJクラスが生成されます。Oracle Database 10gより前のバージョンでは、all設定の場合には常にSQLJクラスが生成されていました。
-methods=noneの場合、JPublisherでラッパー・メソッドは生成されません。この場合、ラッパー・メソッドがなければ役に立たないため、PL/SQLパッケージのクラスも生成されません。
-methods=namedの場合、JPublisherではINPUTファイルで明示的に指定されたメソッドのみにラッパー・メソッドが生成されます。
-methods=always設定でもラッパー・メソッドは生成されます。ただし、Oracle8iおよびOracle9iのJPublisherバージョンへの下位互換性を保つために、SQLオブジェクト型でメソッドが定義されているかどうかに関係なく、すべてのSQLオブジェクト型について常にSQLJクラスが生成されます。
|
注意: 下位互換性を保つために、JPublisherではallと等価の設定true、noneと等価の設定false、およびnamedと等価の設定someもサポートされます。 |
overloadおよびunique設定のうち、-methods=overloadはデフォルトであり、次のように、生成されるコード内のメソッド名をオーバーロードできるように指定します。
int foo(int); int foo(String);
また、設定-methods=uniqueはすべてのメソッド名を一意にする必要があることを指定します。この設定は、Webサービスの場合に必須です。次のファンクションを考えます。
function foo (a VARCHAR2(40)) return VARCHAR2; function foo ( x int, y int) return int;
デフォルトの-methods=overload設定を使用すると、これらのファンクションは次のように公開されます。
String foo(String a); java.math.BigDecimal foo(java.math.BigDecimal x, java.math.BigDecimal y);
-methods=unique設定を使用すると、戻り型と引数型の1文字目に基づくメソッド名変更メカニズムを使用して、次の例のように公開されます。
String foo(String a); java.math.BigDecimal fooBBB(java.math.BigDecimal x, java.math.BigDecimal y);
-methods=retry設定を使用すると、JPublisherではDataSource引数を持ち、公開される各メソッド用の追加コードを持つコンストラクタが生成されます。メソッド内のJDBC操作はtry...catchブロック内に囲まれます。メソッドの処理中にSQLExceptionが発生した場合は、追加コードによりJDBC接続の再確立とSQL操作の再処理が試みられます。再接続に失敗すると、元のSQLExceptionが再び発生します。
-methods=retry設定の場合、JPublisherでは-methods=noretryとは次の2点で異なるコードが生成されます。
DataSourceオブジェクトをパラメータとして取る追加コンストラクタが生成されます。DataSourceオブジェクトは、操作の起動時に新規接続を取得するために使用されます。
SQLExceptionが発生すると、新規JDBC接続が要求されます。
-methods=retry設定が有効になるのは、PL/SQLストアド・プロシージャ、SQL文、AQ、およびWebサービスによるJavaクラスのコールインに対してのみです。
|
注意: oracle.jdbc.pool.OracleDataSourceを使用するにはJDK 1.3以上が必要です。 |
overloadまたはuniqueの設定やretryまたはnoretryの設定を指定すると同時に、all、none、namedまたはalwaysの設定を指定するには、設定をカンマで区切ります。これを次の例に示します。
-methods=always,unique,retry
コマンドラインまたはプロパティ・ファイルで-methodsオプションを指定できます。
ユーザー定義のSQL型(オブジェクトやコレクションなど)を公開するときに、JPublisherがJavaラッパー・クラスの型名を参照する場合は、通常、型名がデータベース・スキーマ名で修飾されます。たとえば、SCOTTスキーマ内のEMPLOYEE型はSCOTT.EMPLOYEEのように修飾されます。
ただし、-omit_schema_namesオプションを指定すると、SQL型名はスキーマ名で修飾されません。このオプションの構文は次のとおりです。
-omit_schema_names
このオプションを指定した場合は、次のときにのみ名前がスキーマ名で修飾されます。
ユーザー定義のSQL型を、JPublisherの接続先スキーマ以外のスキーマで宣言した場合。他のスキーマからの型には、常に識別用のスキーマ名が必要です。
コマンドラインまたはINPUTファイルでスキーマ名を指定してユーザー定義のSQL型を宣言した場合。コマンドラインまたはINPUTファイルで型名とともにスキーマ名を使用すると、-omit_schema_namesオプションがオーバーライドされます。
スキーマ名を省略すると、JPublisherのコール時に使用したスキーマ以外のスキーマに接続するときに、使用しているSQL型がその2つのスキーマで同一に宣言されている場合にかぎり、JPublisherで生成されたクラスを使用できます。
JPublisherで生成されたORADataおよびSQLDataクラスには、生成されたクラスと一致するユーザー定義のSQL型を指定するstatic final Stringフィールドが含まれます。JPublisherで生成されたコードが処理されるとき、生成されたコードのSQL型の名前を使用して、データベース内のSQL型が検索されます。SQL型の名前にスキーマ名が含まれない場合は、JPublisherで生成されたコードが処理されるときに現行の接続と対応付けられたスキーマ内で型が検索されます。SQL型名にスキーマ名が含まれている場合は、そのスキーマ内で型が検索されます。
-omit_schema_namesオプションが使用可能な場合、JPublisherではSQLオブジェクト型のJavaラッパー・クラスに次のコードが生成され、コレクション型をラップするための類似のコードも生成されます。
public Datum toDatum(Connection c) throws SQLException
{
if (__schemaName != null)
{
return _struct.toDatum(c, __schemaName + "." + _SQL_NAME);
}
return _struct.toDatum(c, typeName);
}
private String __schemaName = null;
public void __setSchemaName(String schemaName) { __schemaName = schemaName; }
}
__setSchemaName()メソッドを使用すると、実行時にスキーマ名を明示的に設定できます。これにより、-omit_schema_namesオプションを使用可能にしてJPublisherを実行した場合にも、SQL型名をスキーマ名で修飾できます。SQL型を他のスキーマからアクセスする必要がある場合は、スキーマで修飾する必要があります。
|
注意: このオプションはブール型オプションとして機能しますが、-omit_schema_names=trueや-omit_schema_names=falseは指定できません。使用可能にする場合は-omit_schema_namesを指定します。未指定の場合は、使用禁止になります。 |
Javaの場合、OUTまたはIN OUTの指定はありませんが、ホルダーを介して値を戻すことはできます。JPublisherでは、ホルダーのかわりに次の3つのいずれかを指定できます。
配列(デフォルト)
JAX-RPCホルダー型
ファンクションの戻り
-outargumentsオプションを使用すると、どのメカニズムを使用するかをそれぞれarray、holderまたはreturnの設定を介して指定できます。この機能はWebサービスに特に有効です。このオプションの構文は次のとおりです。
-outarguments={array|holder|return}
-packageオプションでは、JPublisherで生成されるJavaパッケージの名前を指定します。この名前は、生成される各クラスのパッケージ宣言に使用されます。このオプションの構文は次のとおりです。
-package=package_name
-dirおよび-dオプションを使用すると、生成されたファイルが格納されるディレクトリ構造には、-dirおよび-d設定のみではなくパッケージ名が反映されます。
|
注意:
|
例1 次のコマンドを考えてみます。
% jpub -dir=/a/b -d=/a/b -package=c.d -sql=PERSON:Person ...
JPublisherでは、ファイル/a/b/c/d/Person.javaおよび/a/b/c/d/Person.classが生成されます。
また、Personクラスには次のパッケージ宣言が含まれます。
package c.d;
例2 ここで、次のコマンドを考えてみます。
% jpub -dir=/a/b -d=/a/b -package=c.d -sql=PERSON:Person -input=myinputfile
myinputfileに次が含まれているとします。
SQL PERSON AS e.f.Person
この場合は、INPUTファイル内のパッケージ情報でコマンドラインの-packageオプションがオーバーライドされます。ファイル/a/b/e/f/Person.javaおよび/a/b/e/f/Person.classが生成され、Personクラスには次のパッケージ宣言が含まれます。
package e.f;
パッケージ名を指定しない場合、パッケージ宣言は生成されません。出力.javaファイルは、-dirオプションで指定したディレクトリに直接格納されるか、デフォルトでカレント・ディレクトリに格納されます。出力.classファイルは、-dオプションで指定したディレクトリに直接格納されるか、デフォルトでカレント・ディレクトリに格納されます。
JPublisherでは、変換対象の型で必要なために、明示的に要求していない別の型が変換される場合があります。たとえば、要求した型の属性などの場合です。この場合、要求された型を宣言する.javaおよび.classファイルも、コマンドライン、プロパティ・ファイルまたはINPUTファイルで指定したパッケージに置かれます。
これに対して、パッケージまたはストアド・プロシージャがSQL型や他のパッケージまたはストアド・プロシージャにより厳密に要求されることはないため、明示的に要求していないパッケージまたはストアド・プロシージャが変換されることはありません。
-serializableオプションは、JPublisherによってSQLオブジェクト型用に生成されるJavaクラスでjava.io.Serializableインタフェースを実装するかどうかを指定します。デフォルト設定は-serializable=falseです。このオプションの構文は次のとおりです。
-serializable={true|false}
-serializable=trueに設定する場合は、次のことに注意してください。
すべてのオブジェクト属性がシリアライズ可能ではありません。特に、oracle.sql.BLOB、oracle.sql.CLOBまたはoracle.sql.BFILEなどのOracle LOB型は、いずれもシリアライズできません。このような属性を持つオブジェクトをシリアライズすると、対応する属性値はデシリアライズ後にnullに初期化されます。
java.sql.Blob型またはjava.sql.Clob型のオブジェクト属性を使用する場合、JPublisherで生成されるコードではOracle JDBC行セット実装をCLASSPATHで使用可能にする必要があります。これは、ORACLE_HOME/jdbc/libにあるocrs12.jarライブラリに用意されています。この場合、ClobおよびBlobオブジェクトの基礎となる値は実体化され、シリアライズされてから取り出されます。
オブジェクト参照である属性を含むオブジェクトをデシリアライズするたびに、基礎となる接続が失われ、参照に対するsetValue()またはgetValue()コールを発行できません。このため、-serializable=trueを指定すると、JPublisherでJavaクラスに次のメソッドが生成されます。
void restoreConnection(Connection)
デシリアライズ後に、このメソッドを特定のオブジェクトまたはオブジェクト参照に対して1度コールし、参照への現行の接続、または一時的に埋め込まれたすべての参照への現行の接続をそれぞれリストアします。
-tostringフラグを使用すると、オブジェクト値の出力用にtoString()メソッドを追加生成するように、JPublisherに対して指定できます。出力は、オブジェクトの構成に使用するSQLコードに似ています。デフォルト設定はfalseです。このオプションの構文は次のとおりです。
-tostring={true|false}
-nomain=trueを使用すると、シグネチャmain(String[])を持つJavaメソッドの生成を回避できます。このオプションは、SQLの公開とサーバー・サイドJavaクラスの公開に適用されます。このオプションの構文は次のとおりです。
-nomain[=true|false]
Javaストアド・プロシージャでの制約のため、-dbjavaオプションでは-nomain=trueが自動的に設定されます。シグネチャmain(String[])を持つメソッドが-nomain=true設定で生成される場合、JPublisherではこのメソッドの名前がたとえばmain0(Stringp[])などに変更されます。
デフォルト設定は次のとおりです。
-nomain=false
この項では、JPublisherのPL/SQLコード生成動作を指定する次のオプションについて説明します。
-overwritedbtypes
SQL型の作成の前に名前の競合をチェックするかどうかを指定します。
-plsqlfile
SQL型とPL/SQLパッケージの作成と削除に使用するスクリプトを指定します。
-plsqlmap
PL/SQLラッパー・ファンクションを生成するかどうかを指定します。
-plsqlpackage
JPublisherでPL/SQLコール仕様、変換ファンクション、ラッパー・ファンクションおよびテーブル・ファンクションを生成するPL/SQLパッケージの名前を指定します。
この種のオプションの多くは、PL/SQL型を使用するストアド・プロシージャへのJavaコールのサポートを目的として使用されます。各オプションでは、対応するSQL型の作成および使用と、対応するSQL型を入力または出力に使用するPL/SQL変換ファンクションおよびPL/SQLラッパー・ファンクションの作成と使用が指定されます。これにより、JDBCを介してアクセスできます。
JPublisherでは、PL/SQL型を公開するときおよびサーバー・サイドJavaクラス用のPL/SQLラッパーを生成するときに新しいSQL型を生成することがあります。-overwirtedbtypesオプションにより、生成されるSQL型の命名方法が決まります。このオプションの構文は次のとおりです。
-overwritedbtypes={true|false}
Oracle Database 10gリリース2(10.2)より前のバージョンでは、JPublisherはデータベースをチェックして名前の競合がないことを確認し、未使用の名前を生成済SQL型の名前として選択していました。Oracle Database 10gリリース2(10.2)では、JPublisherはデータベース内の既存のSQL型名に関係なく、デフォルトで型名を生成します。-overwritedbtypes=true(デフォルト)に設定すると、既存のSQL型名が生成済のSQL型名と同じ場合、既存の型名が上書きされます。これにより、JPublisherでは複数の異なる実行でまったく同一のPL/SQLラッパーを生成することができます。
JPublisherで生成されたPL/SQLラッパーを実行するときに、データベース内の既存の型が上書きされないようにするには、明示的に-overwritedbtypes=falseを指定する必要があります。
Oracle Database 10gリリース2(10.2)より前のバージョンでは、生成済のPL/SQLラッパーの処理後、JPublisherコマンドを再実行すると、一連の異なるSQL型が生成されるという問題が頻繁に報告されています。この問題を回避するには、JPublisherコマンドの再実行前にPL/SQL削除スクリプトを実行します。
-plsqlfileオプションでは、JPublisherで生成されるラッパー・スクリプトと削除スクリプトの名前を指定します。このオプションの構文は次のとおりです。
-plsqlfile=plsql_wrapper_script,plsql_dropper_script
ラッパー・スクリプトには、PL/SQL型にマップするSQL型の作成指示と、JPublisherでPL/SQLラッパー(コール仕様)、変換ファンクション、ラッパー・ファンクションおよびテーブル・ファンクションに使用されるPL/SQLパッケージの作成指示が含まれています。削除スクリプトには、これらのエンティティの削除指示が含まれています。
生成されたファイルをSQL*Plusなどを使用してデータベースにロードし、ラッパー・スクリプトを実行して、型とパッケージをデータベースにインストールする必要があります。
ファイルがすでに存在している場合は、上書きされます。ファイル名を指定しない場合、JPublisherではplsql_wrapper.sqlファイルとplsql_dropper.sqlファイルに書き込まれます。
次のように、生成されたスクリプトに関する注意が作成されます。
J2T-138, NOTE: Wrote PL/SQL package JPUB_PLSQL_WRAPPER to file plsql_wrapper.sql. Wrote the dropping script to file plsql_dropper.sql.
-plsqlmapオプションでは、PL/SQL型を使用するストアド・プロシージャのラッパー・ファンクションをJPublisherで生成するかどうかを指定します。各ラッパー・ファンクションは対応するストアド・プロシージャをコールし、ストアド・プロシージャのPL/SQL入力または出力用に適切なPL/SQL変換ファンクションをコールします。対応するSQL型のみがJavaに公開されます。このオプションの構文は次のとおりです。
-plsqlmap={true|false|always}
次のいずれかを設定できます。
true
これはデフォルトです。必要な場合にのみPL/SQLラッパー・ファンクションが生成されます。指定のストアド・プロシージャをコールしてPL/SQL型を直接変換するJavaコードが単純で、かつ、PL/SQL型がINパラメータまたはファンクションの戻り値にのみ使用される場合、生成されるコードはストアド・プロシージャを直接コールします。生成されるコードは、該当する変換ファンクションを介してPL/SQLの出入力を処理します。
false
PL/SQLラッパー・ファンクションは生成されません。ダイレクト・コールと変換ではサポートできないシグネチャ内のPL/SQL型が検出されると、その特定のストアド・プロシージャ用のJavaコードは生成されません。
always
PL/SQL型を使用するストアド・プロシージャごとに、PL/SQLラッパー・ファンクションが生成されます。この設定は、オリジナルのPL/SQLパッケージを補完するプロキシPL/SQLパッケージを生成する場合に役立ちます。これにより、オリジナル・パッケージ内でJavaからアクセスできないファンクションまたはプロシージャについて、Javaでアクセス可能なシグネチャが提供されます。
-plsqlpackageオプションでは、JPublisherで生成されたPL/SQLコードを格納するPL/SQLパッケージの名前を指定します。このコードには、PL/SQLラッパー(コール仕様)、PL/SQL型とSQL型間の変換に使用する変換ファンクション、PL/SQL型を使用するストアド・プロシージャをラップするラッパー・ファンクションおよびテーブル・ファンクションが含まれます。このオプションの構文は次のとおりです。
-plsqlpackage=name_of_PLSQL_package
デフォルトでは、パッケージJPUB_PLSQL_WRAPPERが使用されます。
|
注意: このパッケージは、JPublisherによって生成されたSQLスクリプトを実行してデータベースに作成する必要があります。 |
-plsqlindextable=arrayまたは-plsqlindextable=intを使用して、数値型または文字型のPL/SQL索引付き表がJava配列にマップされるように指定します。このオプションの構文は次のとおりです。
-plsqlindextable=array|custom|int
int仕様は、Java配列の容量を定義します。デフォルトの容量は32768です。-plsqlindextable=custom設定は、PL/SQL索引付き表がカスタムのJDBC型(ORADataを実装するクラスなど)にマップされるように指定します。
デフォルト設定は次のとおりです。
-plsqlindextable=custom
この項では、JPublisherの出入力ファイルおよびその位置に関連するオプションについて説明します。オプションは説明する順にリストされています。
-compile
このオプションは、コンパイルを抑制する場合に使用します。さらに、オプションとして、JPublisherが下位互換性モードの場合にSQLJ変換を抑制する場合にも使用します。
-dir
このオプションは、生成されたソース・ファイルの格納場所を指定します。
-d
このオプションは、コンパイルされたクラス・ファイルの格納場所を指定します。
-encoding
このオプションは、JPublisherで読み取るINPUTファイルと、JPublisherで書き込む.sqljファイルおよび.javaファイルのJavaにおける文字のエンコーディングを指定します。
-compileオプションを使用すると、生成された.javaファイルのコンパイルを抑制できます。また、下位互換性モードの場合は、生成された.sqljファイルの変換もオプションで抑制できます。このオプションの構文は次のとおりです。
-compile={true|false|notranslate}
デフォルトのtrue設定では、生成されたクラスはすべて.classファイルにコンパイルされます。下位互換性モードの場合は、-compile=notranslateの設定を使用すると、生成されるソース・ファイルのSQLJ変換とJavaコンパイルを抑制できます。この設定でも、JPublisherからは.sqljが出力されますが、これはJPublisherの-sqljオプションまたはSQLJコマンドライン・ユーティリティを直接使用して手動で変換およびコンパイルできます。-compile=false設定を使用し、JavaコンパイルはスキップしてSQLJ変換に進むこともできます。この場合も、JPublisherからは.javaが出力され、手動でコンパイルできます。
デフォルトの-compatible=oradata設定を使用する場合など、下位互換性モードでない場合は、-compile=falseに設定するとコンパイルをスキップできます。この使用例では、notranslate設定はサポートされません。これは、下位互換性モードでない場合は、参照可能な.sqljファイルが生成されないためです。
-dirオプションを使用すると、JPublisherにより.javaソース・ファイルまたは下位互換性モードの場合の.sqljソース・ファイルが格納されるディレクトリ・ツリーのルートを指定できます。このオプションの構文は次のとおりです。
-dir=directory_path -d=directory_path
ピリオド(.)を設定すると、カレント・ディレクトリがディレクトリ・ツリーのルートとして明示的に指定されます。同様に、-dオプションを使用すると、JPublisherでコンパイル済の.classファイルを格納するディレクトリ・ツリーのルートを指定できます。ピリオド(.)設定の機能は前述と同じです。
各オプションに空以外の設定を使用すると、-packageオプションからのパッケージ情報またはINPUTファイルのSQLオプション設定に含まれているパッケージ名が使用されます。この情報を使用して、生成されたファイルのディレクトリ階層全体が決定されます。
たとえば、次のJPublisherコマンドを考えてみます。
% jpub -user=scott -d=myclasses -dir=mysource -package=a.b.c -sql=PERSON:Person,STUDENT:Student
Enter scott password: password
出力はカレント・ディレクトリに相対で次のようになります。
mysource/a/b/c/Person.java mysource/a/b/c/PersonRef.java mysource/a/b/c/Student.java mysource/a/b/c/StudentRef.java myclasses/a/b/c/Person.class myclasses/a/b/c/PersonRef.class myclasses/a/b/c/Student.class myclasses/a/b/c/StudentRef.class
デフォルトで、ソース・ファイルとクラス・ファイルは、-package設定やINPUTファイル内のパッケージ指定に関係なく、パッケージ階層なしでカレント・ディレクトリに直接格納されます。
空の設定を使用して、この動作を明示的に指定することもできます。
%jpub ... -d= -dir=
これらのオプションは、コマンドラインまたはプロパティ・ファイルで設定できます。
|
注意: SQLJにも、同じ機能を持つ-dirおよび-dオプションがあります。ただし、JPublisherの-sqljオプションを使用してSQLJ設定を指定する場合は、JPublisherの-dirおよび-dオプションを使用してください。この2つのオプションは、SQLJの-dirおよび-d設定より優先されます。 |
-encodingオプションは、JPublisherで読み取るINPUTファイルと、JPublisherで書き込むソース・ファイルのJavaにおける文字のエンコーディングを指定します。デフォルトのエンコーディングはfile.encodingシステム・プロパティの値か、このプロパティが設定されていない場合は8859_1(ISO Latin-1)になります。このオプションの構文は次のとおりです。
-encoding=name_of_character_encoding
通常、このオプションを設定する必要はありません。ただし、SQLJ TranslatorとJavaコンパイラに対してエンコーディングを指定する場合は、JPublisherの-sqljオプションを介してSQLJの-encoding設定を使用します。この使用例では、JPublisher用とSQLJおよびコンパイラ用に同じエンコーディングを指定する必要があります。
-encodingオプションを使用して、Java環境でサポートされる文字のエンコーディングを指定できます。Sun社のJDKを使用している場合、これらのオプションは次のURLにあるnative2asciiドキュメントにリストされています。
http://java.sun.com/j2se/1.3/docs/tooldocs/solaris/native2ascii.html
|
注意: エンコーディング設定は、JPublisherの-encodingオプションとJavaのfile.encoding設定のどちらを使用して設定する場合も、-propsオプションで指定したファイルなどのJavaプロパティ・ファイルには適用しないでください。プロパティ・ファイルでは、常に8859_1エンコーディングが使用されます。これはJava全般の機能であり、JPublisher固有の機能ではありません。ただし、プロパティ・ファイルではUnicodeエスケープ・シーケンスを使用できます。 |
この項では、サーバー・サイドJavaまたはPL/SQLからJavaクラスへのアクセスに関するオプションと、関連する概念について説明します。特に、これらのオプションは、データベース内からWebサービス・クライアント・コードへのアクセスに使用できます。この操作は、Webサービスのコールアウトと呼びます。この項の内容は次のとおりです。
Webサービスのコールアウトに関する各オプションの概要と、オプション間の相互関係を次に示します。
-proxyclasses=class1,class2,...,classN
このオプションでは、JavaおよびPL/SQLラッパーを生成するJavaクラスを指定します。Webサービスの場合、このオプションは-proxywsdlオプションにより暗黙的に使用され、生成されたクライアント・プロキシ・クラスを処理するように自動的に設定されます。
JavaクラスのJavaラッパーとPL/SQLラッパーを作成する場合には、このオプションを汎用的に直接使用できます。
-proxyclassesオプションは、入力として-proxyopts設定を取ります。
-proxyoptssetting1,setting2,...
このオプションでは、ラッパー・クラスおよびPL/SQLラッパー生成時のJPublisherの動作を指定します。通常、このオプションはWebサービス用ですが、他の用途にも使用できます。-proxywsdlオプションの標準的な使用方法では、-proxyoptsの設定はデフォルトのままで十分です。-proxyclassesオプションを直接使用する場合は、-proxyopts設定を指定できます。
-proxywsdl=WSDL_URL
このオプションを使用するのは、URLとWSDLドキュメントを指定して、Webサービスのクライアント・プロキシ・クラスおよび該当するJavaラッパーとPL/SQLラッパーを生成する場合です。
-proxywsdlオプションは、-proxyclassesオプションを暗黙的に使用し、入力として-proxyopts設定を取ります。
-endpoint=Web_services_endpoint
このオプションを-proxywsdlオプションと併用して、Webサービスのエンドポイントを指定します。
-httpproxy=proxy_URL
WSDLドキュメントがファイアウォール経由でアクセスされる場合は、このオプションを使用して、WSDLドキュメントのURLの解決に使用するプロキシURLを指定します。
-sysuser=superuser_name/superuser_password
このオプションを使用して、HTTPを介してWebサービスにアクセスできるように、クライアント・プロキシ・クラスに対するパーミッションの付与に使用するスーパーユーザー・アカウントの名前およびパスワードを指定します。
|
注意:
|
-proxywsdlオプションの構文は次のとおりです。
-proxywsdl=WSDL_URL
このオプションの使用方法は次のとおりです。
% jpub -proxywsdl=META-INF/HelloServiceEJB.wsdl ...
指定したURLにあるWebサービスのWSDLドキュメントを指定すると、JPublisherはWebサービスのクライアント・プロキシ・クラスの生成を指示し、データベースからWebサービスをコールアウトするための該当するJavaおよびPL/SQLラッパーを生成します。生成するクラスおよびプロセスは、WSDLドキュメントにより決定されます。JPublisherでは、-proxyclassesオプションが自動的に設定され、入力として-proxyopts設定が使用され、次のステップが実行されます。
Oracle Database Webサービス・アセンブラ・ツールが起動され、WSDLドキュメントに基づいてWebサービスのクライアント・プロキシ・クラスが生成されます。これらのクラスは、Oracle Database Webサービス・クライアント・ランタイムを使用し、WSDLドキュメントで指定されたWebサービスにアクセスします。
必要に応じて、Webサービスのクライアント・プロキシ・クラス用のJavaラッパー・クラスが作成されます。インスタンス・メソッドを持つプロキシ・クラスごとに、インスタンス・メソッドを静的メソッドとして公開するためのラッパー・クラスが必要です。インスタンス・メソッドがなくても、プロキシ・クラスのメソッドのコール順序でJavaプリミティブ型以外が使用される場合は、ラッパー・クラスが必要です。
生成されたクラス用のPL/SQLラッパーが作成され、PL/SQLからアクセス可能になります。PL/SQLでサポートされるのは静的メソッドのみのため、静的メソッドでインスタンス・メソッドをラップする必要があります。これが前のステップで実行されています。
-userおよび-url設定を指定してあり、JPublisherで接続が確立されていれば、-proxyopts=noload設定を介してロードを迂回するように指定しないかぎり、生成されたコードがデータベースにロードされます。
|
注意: -proxywsdlを使用する場合の注意事項は次のとおりです。
|
通常、-endpointオプションは-proxywsdlオプションとともに使用します。
-endpointオプションを-proxywsdlオプションとともに使用して、Webサービスのエンドポイントを指定できます。エンドポイントとは、Webサービスがデプロイされ、クライアントがアクセスするURLです。このオプションの構文は次のとおりです。
-endpoint=Web_services_endpoint
このオプションは次のように使用します。
% jpub -proxywsdl=META-INF/HelloServiceEJB.wsdl ...
-endpoint=http://localhost:8888/javacallout/javacallout
このコマンドを使用すると、JPublisherにより次のコードを含むJavaラッパー・クラスが生成されます。
((Stub)m_port0)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY,
"http://localhost:8888/javacallout/javacallout");
-endpointオプションを使用しない場合は、かわりに次のようなコメント付きのコードが生成されます。
// Specify the endpoint and then uncomment the following statement:
// ((Stub)m_port0)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY,
// "<endpoint not provided>");
JPublisherコマンドラインでエンドポイントを指定しない場合は、生成されたラッパー・クラスを手動で変更してこのコードのコメントを解除し、適切なエンドポイントを指定する必要があります。
Webサービスのコールアウトに使用するWSDLドキュメントがファイアウォールを介してアクセスされる場合は、-httpproxyオプションを-proxywsdlオプションとともに使用して、WSDLドキュメントのURLの解決に使用するプロキシURLを指定します。このオプションの構文は次のとおりです。
-httpproxy=proxy_URL
たとえば、次のようにします。
% jpub ... -httpproxy=http://www-proxy.oracle.com:80
-sysuserオプションを使用して、スーパーユーザー・アカウントの名前とパスワードを指定します。このアカウントはJPublisherで生成されるPL/SQLスクリプトの実行時に使用されます。PL/SQLスクリプトにより、クライアント・プロキシ・クラスからHTTPを使用してWebサービスにアクセスできるパーミッションが付与されます。このオプションの構文は次のとおりです。
-sysuser=superuser_name/superuser_password
たとえば、次のようにします。
-sysuser=sys/change_on_install
-sysuser設定を使用しなければ、生成されたパーミッション付与スクリプトはロードされません。かわりに、スクリプトを別個に実行するように要求されます。
-url設定でThinドライバを指定する場合は、SYS用のパスワード・ファイルを設定する必要があります。このパスワード・ファイルにより、Thinドライバを介するSYSとしてのログオンが承認されます。パスワード・ファイルを設定するには、次のことが必要です。
remote_login_passwordfileオプションをデータベース・パラメータ・ファイルに追加します。次のいずれかの設定を使用する必要があります。次のいずれかの設定を使用する必要があります。
remote_login_passwordfile=shared remote_login_passwordfile=exclusive
パスワード・ファイルを作成していない場合は作成します。これを行うには、次のコマンドを実行します。ORACLE_HOME/dbs/は既存のディレクトリです。
orapwd file="ORACLE_HOME/dbs/orapwlsqlj1" entries=100 force=y Enter password: password
ユーザーにリモート・ログオン権限を付与します。これを行うには、次のようにします。
% sqlplus /nolog SQL> CONN / AS sysdba Connected. SQL> GRANT sysdba TO scott; Grant succeeded.
|
関連項目: リモートSYSログオンの設定方法の詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。 |
この項では、-sqljオプションについて説明します。このオプションを使用すると、JPublisherコマンドラインを介してSQLJオプションをSQLJ Translatorに渡すことができます。
Oracle Database 11gでは、JPublisherを実行するとデフォルトでSQLJ変換が自動的に実行されます。変換は透過的であり、JPublisherコード生成では参照可能な.sqljファイルが生成されません。
ただし、JPublisherの-sqljオプションを使用して、JPublisherによるSQLJ Translatorの起動に使用するSQLJ設定を指定することもできます。このオプションの構文は次のとおりです。
-sqlj=sqlj_options
たとえば、次のようにします。
% jpub -user=scott -sqlj -optcols=true -optparams=true -optparamdefaults=datatype1(size1),datatype2(size) Enter scott password: password
|
注意:
|
また、明示的に生成されている.sqljファイルの変換のためだけにJPublisherを実行することもできます。たとえば、-compatible=sqljに設定してJPublisherを実行すると、自動SQLJ変換ステップはスキップされ、JPublisherから.sqlj出力ファイルが生成されます。この場合は、-sqlj以外にJPublisherオプションを使用しないでください。これは、sqljフロントエンド・スクリプトまたは実行可能ファイルが使用できない場合に、手動でSQLJ変換を実行する方法です。
-sqljに続けて指定するコマンドは、SQLJ Translatorユーティリティに対して直接指定するコマンドと同じです。次に例を示します。
% jpub -sqlj -d=outclasses -warn=none -encoding=SJIS Foo.sqlj
SQLJコマンドライン・トランスレータが使用可能な場合、これは次のコマンドと同じことです。
% sqlj -d=outclasses -warn=none -encoding=SJIS Foo.sqlj
|
注意:
|
この項では、-compatibleオプションについて説明します。このオプションを使用して次のいずれかを指定できます。
JPublisherで生成されるクラスに実装されるインタフェース
JPublisherによるSQLJ変換(参照可能な.sqlj出力ファイルの生成)をスキップするかどうか
Oracle9iまたはOracle8i環境でJPublisher出力に使用する下位互換性モード
-compatibleオプションには、次の2つの操作モードがあります。
oradataまたはcustomdatumの設定を介して、JPublisherで生成されるカスタムJavaクラスで実装するインタフェースを明示的に指定できます。
sqlj、8i、both8iまたは9iの設定を介して、下位互換性モードを指定できます。
使用できるモードはどちらか一方のみで、両方は使用できません。
このオプションの構文は次のとおりです。
-compatible={oradata|customdatum|both8i|8i|9i|10.1|sqlj}
-compatibleを使用したインタフェースの指定
-usertypes=oracleの場合は、-compatible=customdatumに設定すると、ユーザー定義型用に生成されたクラスに、使用不可のCustomDatumインタフェースをデフォルトのORADataインタフェースのかわりに実装できます。CustomDatumは、Oracle9i DatabaseでORADataに置き換えられていますが、下位互換性のためにサポートされています。
ORADataインタフェースを使用するためのデフォルト設定はoradataです。-usertypes=jdbcを設定した場合、-compatible設定のcustomdatumまたはoradataは無視されます。
Oracle9i以前のORADataインタフェースがサポートされていない環境でJPublisherを使用する場合は、-usertypes=oracleに設定すると自動的にCustomDatumインタフェースが使用されます。-compatible=oradataに設定すると警告メッセージが表示されますが、生成は行われます。
-compatibleを使用した下位互換性モードの指定
下位互換性モードを指定するには、sqlj、10.1、9i、8iまたはboth8i設定を使用します。
-compatible=sqljに設定すると、JPublisherはSQLJ変換をスキップし、かわりに直接処理できる.sqljファイルを生成します。sqlj設定は、生成されたコード自体には影響しません。生成された.sqljファイルを変換するには、SQLJ Translatorを直接使用する方法(使用可能な場合)と、JPublisherの-sqljオプションを使用する方法があります。
-compatible=10.1設定は、Oracle Database 10gリリース1(10.1)互換モードを指定します。このモードでは、JPublisherのオプション-dbjavaは、Oracle Database 10gリリース1(10.1)の-javaと同じ動作をします。
-compatible=9i設定は、Oracle9i互換モードを指定します。このモードでは、Oracle9iバージョンで生成される場合と同じコードを含む.sqljファイルが生成されます。
-compatible=8i設定は、Oracle8i互換モードを指定します。このモードではCustomDatumインタフェースが使用され、Oracle8iバージョンのJPublisherで生成される場合と同じコードを含む.sqljファイルが生成されます。8iに設定するのは、JPublisherで複数の下位互換性オプションを個別にOracle8iに設定するのと同じです。たとえば、メソッド生成の動作は-methods=alwaysに設定した場合と同じで、接続コンテキスト宣言の生成は-context=generatedに設定した場合と同じです。
-compatible=both8i設定は、代替Oracle8i互換モードに使用します。この設定では、ORADataインタフェースとCustomDatumインタフェースの両方を実装するラッパー・クラスが生成されます。コードは、Oracle8iバージョンのJPublisherの場合と同じコードが生成されます。通常、Oracle Application Serverなどの中間層で実行するプログラムには、ORADataのサポートが必要であるため、この設定は-compatible=8i設定より優先されます。ただし、ORADataを使用するには、Oracle9iリリース1(9.0.1)以上のJDBCドライバが必要です。
|
注意: 参照可能な.sqljファイルを生成する互換モードの場合は、SQL型階層のJavaラッパー・クラスを生成するときに、1つ以上の型にストアド・プロシージャが含まれていると、デフォルトで、ストアド・プロシージャを含む型のみでなくSQL型すべてについて.sqljファイルが生成されることに注意してください。 |
この項では、Java環境の決定に使用できるJPublisherオプションについて説明します。
-classpathオプションでは、JPublisherとSQLJで変換およびコンパイル時にクラスの解決に使用されるJavaのCLASSPATHを指定します。
-compiler-executableオプションでは、JPublisherで生成されたコードのコンパイルに使用するJavaコンパイラを指定します。
-vmオプションでは、JPublisherの起動に使用するJVMを指定します。
UNIX環境では、jpubスクリプトによりJPublisherを実行するJava実行可能ファイルの位置が指定されます。このスクリプトは、データベースまたはアプリケーション・サーバー・インスタンスのインストール時に生成されます。jpubスクリプトでJDK 1.4より前のJavaバージョンが使用される場合、JPublisherの一部のWebサービス機能(コールアウトやSYS.XMLTypeのマップなど)は使用できません。
-classpathオプションを使用して、JPublisherで変換およびコンパイル時のJavaソースとクラスの解決に使用するJavaのCLASSPATHを指定します。このオプションの構文は次のとおりです。
-classpath=path1:path2:...:pathN
次のコマンドは、既存のCLASSPATHに新規のパスを追加する場合の使用例を示しています。
% jpub -user=scott -sql=PERSON:Person,STUDENT:Student -classpath=.:$ORACLE_HOME/jdbc/lib/ocrs12.jar:$CLASSPATH
Enter scott password: password
|
注意: SQLJにも-classpathオプションがあります。SQLJの-classpathオプションをJPublisherの-sqljオプションに続けて使用すると、その設定が変換およびコンパイル用のCLASSPATHに使用され、JPublisherの-classpathオプション設定は無視されます。JPublisherの-classpathオプションのみを使用する方が簡単です。 |
-compiler-executableオプションを使用するのは、JPublisherで生成されたJavaコードのコンパイルに、システム上のJPublisherによりデフォルトで使用されるコンパイラとは異なるコンパイラを使用する場合です。代替コンパイラの実行可能ファイルへのパスを指定します。このオプションの構文は次のとおりです。
-compiler-executable=path_to_compiler_executable
-vmオプションを使用するのは、システム上のJPublisherによりデフォルトで使用されるJVMとは異なるJVMを使用する場合です。代替Java実行可能ファイルへのパスを指定します。このオプションの構文は次のとおりです。
-vm=path_to_JVM_executable
たとえば、UNIXシステム上で、カレント・ディレクトリへの相対位置JDK14にJDK 1.4がインストールされているとします。Webサービス・クライアント・プロキシ・クラスを公開するときにJDK 1.4のJVMおよびコンパイラを使用するには、次のコマンドを使用してJPublisherを実行します。
% jpub -vm=JDK14/bin/java -compiler-executable=JDK14/bin/java -proxywsdl=hello.wsdl
Oracle Database 10gリリース2(10.2)から、JPublisherでは次のコマンドライン・オプションを提供してSQLJからJDBCアプリケーションへの移行をサポートしています。
-migrate
このオプションを使用すると、SQLJの移行をオンにできます。このオプションを設定する構文は次のとおりです。
-migrate[=true|false]
-migrate設定と-migrate=true設定は同じです。この2つの設定は、コマンドラインに指定されたSQLJプログラムをJDBCプログラムに移行する必要があることをJPublisherに指示します。-migrate=falseは移行モードをオフにします。SQLJプログラムは、SQLJランタイムに依存する可能性のあるJavaプログラムに変換されコンパイルされます。このオプションが指定されていない場合、JPublisherのデフォルト動作は-migrate=falseです。
-migconn
このオプションを使用すると、移行されたコードにより使用されるデフォルトのJDBC接続を指定できます。デフォルトのJDBC接続は、SQLJランタイムのデフォルトのDefaultContextインスタンスを置き換えます。このオプションを設定する構文は次のとおりです。
-migconn=getter:getter,setter:setter -migconn=name[[:datasource|modifier][,modifier]*]
最初の構文で、getterおよびsetter設定はデフォルト接続のgetterおよびsetterメソッドを指定します。たとえば、次のようにします。
-migconn=getter:Test.getDefConn,setter:Test.setDefConn
2番目の構文にあるname設定はデフォルトのJDBC接続を指定します。オプションのdatasource設定は、デフォルトのJDBC接続を初期化するためにJNDIデータ・ソースの場所を指定します。modifier設定は、デフォルトの接続変数の修飾子を追加します。複数のmodifier設定を使用すると、複数の修飾子を指定できます。2番目の構文の使用例は次のとおりです。
-migconn=_defaultConn:public,static -migconn=Test._defaultConn -migconn=Test._defaultConn:jdbc/MyDataSource -migconn=_defaultConn:public,static,final
-migrsi
このオプションを使用すると、すべてのResultSetイテレータ・クラスのインタフェースを指定できます。このオプションを設定する構文は次のとおりです。
-migrsi=java_interface_name
たとえば、次のようにします。
-migrsi=ResultSetInterface
-migsync
このオプションを使用すると、静的変数をsynchronizedとしてマークできます。このオプションを設定する構文は次のとおりです。
-migsync[=true|false]
-migsyncと-migsync=true設定は、移行目的で生成された静的変数を同期としてマークします。変数を同期としてマークしない場合は、-migsync=falseに設定します。JPublisherのデフォルト動作は-migsync=trueです。
-migdriver
このオプションを使用すると、移行されるコードにより登録されるJDBCドライバを指定できます。このオプションを設定する構文は次のとおりです。
-migdriver=class_name|no
たとえば、次のようにします。
-migdriver=oracle.jdbc.driver.OracleDriver
JPublisherのデフォルト動作は-migdriver=oracle.jdbc.driver.OracleDriverです。移行中にドライバ登録コードを生成しない場合は、このオプションを次のように設定します。
-migdriver=no
-migcodegen
このオプションを使用すると、移行されるコードがOracle JDBCドライバに依存するか汎用JDBCドライバに依存するかを指定できます。このオプションを設定する構文は次のとおりです。
-migcodegen=oracle|jdbc
デフォルト動作は-migcodegen=oracleで、移行コードでOracle固有のJDBC APIが使用されることを示します。
-migserver
このオプションを使用すると、サーバーで使用されるプログラムを移行するかどうかを指定できます。このオプションを設定する構文は次のとおりです。
-migserver
次の項では、JPublisherの入力ファイルの構造および内容を説明します。
プロパティ・ファイルは、頻繁に使用するオプションを指定できるオプションのテキスト・ファイルです。JPublisherコマンドラインで-propsオプションを使用して、プロパティ・ファイルの名前を指定します。
|
注意: プロパティ・ファイル内で指定できないオプションは、-propsのみです。 |
プロパティ・ファイルの各行には、オプションを1つのみと、その対応する値を入力します。各オプション設定には次の接頭辞をピリオドも含めて入力します。
jpub.
jpub.接頭辞には大/小文字の区別があります。空白を使用できるのはjpub.の直前のみです。オプション行の他の位置には空白を使用できません。
または、接頭辞の一部にSQLコメントの構文である二重ダッシュ(--)を使用してオプションを指定できます。
-- jpub.
前述のどちらかの接頭辞で始まらない行は、単にJPublisherで無視されます。
また、行の継続を使用すると、プロパティ・ファイル内で複数行にまたがるJPublisherオプションを指定できます。継続行の末尾には、行テキストの直後に円記号(\)を付ける必要があります。円記号に続く行の先頭の空白や二重ダッシュ(--)は無視されます。次のサンプル・エントリを考えます。
/* The next three lines represent a JPublisher option
jpub.sql=SQL_TYPE:JPubJavaType:MyJavaType,\
OTHER_SQL_TYPE:OtherJPubType:MyOtherJavaType,\
LAST_SQL_TYPE:My:LastType
*/
-- The next two lines represent another JPublisher option
-- jpub.addtypemap=PLSQL_TYPE:JavaType:SQL TYPE\
-- :SQL_TO_PLSQL_FUNCTION:PLSQL_TO_SQL_FUNCTION
この機能を使用して、SQLスクリプトにJPublisherオプションを埋め込むことができ、PL/SQLからSQLへの型マッピングを設定する場合に役立ちます。
JPublisherでは、-propsオプションが指定された場所で、プロパティ・ファイルの内容がコマンドラインから挿入されたかのように、オプションが順番に読み取られます。1つのオプションを2度以上指定すると、最後に指定した値によって前の値がオーバーライドされます。ただし、次のオプションの場合は値が累積されます。
jpub.sql(または使用不可のjpub.types)
jpub.java
jpub.style
jpub.addtypemap
jpub.adddefaulttypemap
たとえば、次のコマンドを考えてみます。
% jpub -user=scott -sql=employee -mapping=oracle -case=lower -package=corp -dir=demo
Enter scott password: password
次のコマンドも考えます。
% jpub -props=my_properties
my_propertiesが次のように定義されている場合、このコマンドは最初の例と同じです。
-- jpub.user=scott/tiger
// jpub.user=cannot_use/java_line_comments
jpub.sql=employee
/*
jpub.mapping=oracle
*/
Jpub.notreally=a jpub option
jpub.case=lower
jpub.package=corp
jpub.dir=demo
jpub.接頭辞を各オプション名の先頭に入れる必要があります。オプション名の前に空白または二重ダッシュ(--)以外の文字列を入力すると、JPublisherで行全体が無視されます。
前述の例は、jpub.の前に空白を使用できることを示しています。また、jpub.接頭辞をすべて小文字で指定しないと無視されることを示しています。したがって、前述の例にある次の行は無視されます。
Jpub.notreally=a jpub option
JPublisherコマンドラインで-inputオプションを使用して、INPUTファイルの名前を指定します。このファイルは、JPublisherで変換するSQLのユーザー定義型およびPL/SQLパッケージを識別します。また、生成されたクラスおよびパッケージのネーミングも制御します。-sqlコマンドライン・オプションを使用してユーザー定義型およびパッケージを指定できますが、INPUTファイルを使用するとJPublisherでのユーザー定義型およびパッケージの変換をさらに詳細に制御できます。
INPUTファイルまたはコマンドラインで変換対象の型やパッケージを指定しない場合、JPublisherでは、接続先のスキーマにあるすべてのユーザー定義型およびPL/SQLパッケージが変換されます。
INPUTファイル内の変換文は、JPublisherで変換するユーザー定義型およびPL/SQLパッケージの名前を識別します。変換文ではオプションで型またはパッケージのJava名、属性識別子のJava名および拡張されたクラスがあるかどうかを指定できます。
1つ以上の変換文をINPUTファイルに入れることができます。変換文の構造は次のとおりです。
( SQL name | SQL [schema_name.]toplevel [(name_list)] | TYPE type_name) [GENERATE java_name_1] [AS java_name_2] [TRANSLATE database_member_name AS simple_java_name { , database_member_name AS simple_java_name}* ]
次の項では、変換文のコンポーネントを説明します。
SQL name | TYPE type_name SQL nameと入力し、JPublisherで変換するSQL型またはPL/SQLパッケージを識別します。JPublisherではnameの検査でユーザー定義型であるかPL/SQLパッケージであるかが判断され、適切に処理されます。nameのかわりに、予約語toplevelを使用すると、JPublisherではその接続先のスキーマ内のパッケージに属さないストアド・プロシージャやストアド・ファンクションが変換されます。
オブジェクト型のみを指定する場合は、SQLのかわりにTYPE type_nameを入力できます。ただし、TYPE構文は使用不可です。
また、nameにschema_name.nameを入力すると、SQL型またはパッケージが所属するスキーマを指定できます。schema_name.toplevelを入力すると、JPublisherではスキーマschema_name内にあるトップレベルのサブプログラムが変換されます。TOPLEVELとともに、公開する名前のカンマ区切りのリストname_listをカッコで囲んで指定することもできます。JPublisherでは、このリストと一致するトップレベルのファンクションおよびプロシージャのみが考慮されます。このリストを指定しない場合、トップレベルのすべてのサブプログラム用のコードが生成されます。
GENERATE java_name_1 AS java_name_2 AS句は、変換対象のSQLユーザー定義型またはPL/SQLパッケージを表すJavaクラスの名前を指定します。
GENERATE句を付けずにAS句を使用すると、JPublisherではAS句に指定したクラスが生成され、SQL型またはPL/SQLパッケージにマップされます。
SQLのユーザー定義型にGENERATE句とAS句の両方を使用する場合、GENERATE句ではJPublisherで生成されるJavaクラスの名前を指定します。これはベース・クラスと呼ばれます。AS句では、生成されたベース・クラスを拡張するJavaクラスの名前を指定します。これはユーザー・サブクラスと呼ばれます。JPublisherではユーザー・サブクラスの初期バージョンが生成されます。通常は、このバージョンに必要な機能のコードを追加します。SQL型は、ベース・クラスではなくユーザー・サブクラスにマップされます。後で同じJPublisherコマンドを実行してSQL型を再公開すると、生成されたクラスは上書きされますが、ユーザー・サブクラスは上書きされません。
java_name_1とjava_name_2には任意の有効なJava名を指定でき、パッケージ識別子を組み込めます。Java名の大/小文字区別により、-caseオプションがオーバーライドされます。
TRANSLATE database_member_name AS simple_java_name この句は属性またはメソッドに対して別の名前をオプションで指定します。database_member_nameは、SQLオブジェクト型の属性名、あるいはオブジェクト型またはPL/SQLパッケージのメソッドの名前です。属性またはメソッドはsimple_java_nameに変換されます。これは任意の有効なJava名です。Java名の大/小文字区別により、-caseオプションがオーバーライドされます。この名前にはパッケージ名を含めません。
TRANSLATE...ASを使用せずに属性またはメソッドを改名する場合、またはJPublisherでINPUTファイルにリストされていないオブジェクト型を変換する場合、JPublisherでは属性またはメソッドのデータベース名がJava名として使用されます。該当する場合、Java名は-caseオプションの設定に従って変更されます。属性名またはメソッドを改名するのは次の理由があります。
名前に文字、数字およびアンダースコア以外の文字が含まれている場合。
名前がJavaキーワードと競合する場合。
型名が同じ有効範囲の別の名前と競合する場合。これは、プログラムで異なるスキーマからの同じ名前を持つ2つの型を使用する場合などに起こります。
属性名はgetXXX()およびsetXXX()メソッド名に埋め込まれて表されます。そのため、属性名の1文字目を大文字にすると見やすくなります。たとえば、次のように入力します。
TRANSLATE FIRSTNAME AS FirstName
getFirstName()メソッドおよびsetFirstName()メソッドが生成されます。それに対し、次のように入力したとします。
TRANSLATE FIRSTNAME AS firstName
getfirstName()メソッドおよびsetfirstName()メソッドが生成されます。
|
注意: Javaキーワードnullは、次のように属性やメソッドのターゲットJava名として使用される場合は特別な意味を持ちます。
TRANSLATE FIRSTNAME AS null SQLメソッドを |
INPUTファイルでのパッケージ・ネーミング規則 INPUTファイル内で完全修飾クラス名を使用してパッケージ名を指定できます。INPUTファイル内で修飾されていない単純なクラス名を使用すると、完全修飾クラス名に-packageオプションからのパッケージ名が組み込まれます。これを次の例に示します。
次のINPUTファイルがあるとします。
SQL A AS B
また、-package=a.bに設定しているとします。この場合、a.bはパッケージ、a.b.Bは完全修飾クラス名です。
INPUTファイルに次のように入力し、-packageを設定しないとします。
SQL A AS b.C
パッケージはbで、b.Cは完全修飾クラス名です。
|
注意: -packageオプション設定とINPUTファイルのパッケージ設定が競合する場合、優先順位はコマンドラインで-inputおよび-packageオプションを指定した順序によって決定します。-package設定を-inputオプションより後に指定した場合は-package設定が優先され、それ以外の場合はINPUTファイルの設定が優先されます。 |
追加の型変換 JPublisherではINPUTファイルにリストされていない追加の型を変換することが必要な場合があります。これは、変換実行前にINPUTファイル内の型の依存関係が分析され、必要な他の型が変換されるためです。
「JPublisher変換の例」にある例を考えてみます。EMPLOYEEのオブジェクト型定義にADDRESSと呼ばれる属性が含まれており、ADDRESSが次の定義で指定されたオブジェクトであるとします。
CREATE OR REPLACE TYPE address AS OBJECT
(
street VARCHAR2(50),
city VARCHAR2(50),
state VARCHAR2(30),
zip NUMBER
);
JPublisherでEMPLOYEE型を定義する必要があるため、ADDRESSが最初に変換されます。さらに、ADDRESSおよびその属性はINPUTファイルで特に指定されていないため、すべて同じ大/小文字の区別で変換されます。Address.javaのクラス・ファイルが生成され、コマンドラインで指定されたパッケージに組み込まれます。
ユーザー定義型やPL/SQLパッケージは他のPL/SQLパッケージに依存しないため、要求していないPL/SQLパッケージは変換されません。
INPUTファイルの機能を具体的に示すために、「JPublisher変換の例」にある例の更新バージョンについて考えてみます。
次のコマンドを考えてみます。
% jpub -user=scott -input=demoin -numbertypes=oracle -usertypes=oracle -dir=demo -d=demo -package=corp -case=same
Enter scott password: password
INPUTファイルdemoinに次のコードが含まれているとします。
SQL employee AS Employee TRANSLATE NAME AS Name HIRE_DATE AS HireDate
-case=sameオプションは、特に指定した場合を除き、生成されたJava識別名でデータベース内と同じ大/小文字の区別を保持するように指定します。CREATE TYPEまたはCREATE PACKAGE宣言内の識別名は、引用符で囲まれていないかぎりデータベース内には大文字で格納されます。この例では、EMPLOYEEはJavaクラスEmployeeとして変換するように指定されているため、-caseオプションはEMPLOYEE型には適用されません。
属性の場合、INPUTファイルで特に指定されていない属性識別子は大文字のままですが、NAMEおよびHIRE_DATEは指定に従ってNameおよびHireDateとして変換されます。
変換後のEMPLOYEE型は、-package、-dirおよび-d設定を反映してカレント・ディレクトリ(この例ではUNIXシステムの場合)に相対で次のファイルに書き込まれます。
demo/corp/Employee.java demo/corp/Employee.class
この項では、JPublisherで現在レポートされないINPUTファイルのエラー条件について説明します。また、予約語についても説明します。
2つの異なるオブジェクト型に対して同じJavaクラス名を要求すると、2番目のクラスにより最初のクラスが警告なしで上書きされます。たとえば、INPUTファイルに次の内容が含まれているとします。
type PERSON1 as Person type PERSON2 as Person
JPublisherでは、PERSON1用にPerson.javaファイルが作成され、PERSON2型用に次に作成された同名のファイルにより上書きされます。
2つの異なるオブジェクト属性に対して同じ属性名を要求すると、JPublisherでは警告メッセージを発行せずに両方の属性に対してgetXXX()およびsetXXX()メソッドが生成されます。生成されたクラスがJavaで有効かどうかは、同じ名前の2つのgetXXX()メソッドおよび同じ名前の2つのsetXXX()メソッドに、明確にオーバーロードできる異なる引数型があるかどうかによります。