この章では、プログラムの動作を指定する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
オプションを使用すると、サーバー・サイド・クラスにアクセスするクライアント・サイド・スタブ・クラスを作成できます。これは、データベース・クライアントからJavaストアド・プロシージャおよびファンクションをコールするには、関連PL/SQLラッパーへのJDBCコールが必要だった、以前のリリースのJPublisherからの改善点です。
-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以降で使用する場合に適しています。JPublisherでは、処理対象クラスごとに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テーブル・ファンクションが生成されます。これにより、データはストアド・プロシージャまたはファンクションではなく、データベース表を介して公開されます。
Webサービス操作に配列型をパラメータ型として含める場合、-proxyopts=tabfun
設定を使用しないでください。この場合、JPublisherでは、SQLテーブルをパラメータ型としてPL/SQLストアド・プロシージャが生成されます。したがって、-proxyopts=tabfun
設定では、生成される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を戻すメソッドの名前は、methodName
Beans()
となります。
注意: 必要なクラス名とインタフェース名がパターンに従っている場合は、-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
にマップできます。
-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で型マッピング・オプションにより指定したマッピングが、オブジェクトの属性およびそのオブジェクトに含まれるメソッドの引数と結果に適用されます。マッピングにより、生成済のアクセッサ・メソッドがサポートする型が制御されます。たとえば、get
XXX
()
メソッドが戻す型やset
XXX
()
メソッドが受け入れる型をサポートします。
PL/SQLパッケージの場合、JPublisherではマッピングはパッケージ内のメソッドの引数および結果に適用されます。コレクション型の場合、JPublisherではマッピングはコレクション要素の型に適用されます。
また、通常はWebサービスをサポートするために、Java間の型マッピングを指定できる、-style
オプションについても後述します。そのためには、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のコード生成は、主にPL/SQL型を持つシグネチャからJDBCへのアクセスを可能にするため、JPublisherのユーザー型マップまたはデフォルトの型マップのエントリの影響を受けます。型マップ・エントリの書式は、次のいずれかです。
-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識別子の大/小文字区別に影響します。これには、クラス名、メソッド名、get
XXX
()
およびset
XXX
()
メソッド名に埋め込まれる属性名、生成されるメソッド名の引数が含まれます。このオプションの構文は次のとおりです。
-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
に設定すると、JPublisherでは常にユーザー・サブクラス用のコードが生成されます。対応する.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
オプションを指定すると、JPublisherでは、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 オプションを使用してください。これらは、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
設定を取ります。
-proxyopts
setting1,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/HelloService.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/HelloService.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
オプションを使用して、スーパーユーザー・アカウントの名前とパスワードを指定します。このアカウントは、クライアント・プロキシ・クラスからHTTPを使用してWebサービスにアクセスできるパーミッションが付与される、JPublisherが生成するPL/SQLスクリプトの実行時に使用されます。このオプションの構文は次のとおりです。
-sysuser=superuser_name/superuser_password
たとえば、次のようにします。
-sysuser=sys/change_on_install
-sysuser
設定を使用しなければ、生成されたパーミッション付与スクリプトはロードされません。かわりに、スクリプトを別個に実行するように要求されます。
-url
設定でThinドライバを指定する場合は、Thinドライバを介するSYS
としてのログオンが承認される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.
The jpub.
prefix is case-sensitive.空白を使用できるのは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ではユーザー・サブクラスの初期バージョンが生成され、通常は、必要な機能のコードを追加します。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つの型を使用する場合などに起こります。
属性名はget
XXX
()
およびset
XXX
()
メソッド名に埋め込まれて表されるため、属性名の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 オプションより後に指定した場合は優先され、それ以外の場合は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では警告メッセージを発行せずに両方の属性に対してget
XXX
()
およびset
XXX
()
メソッドが生成されます。生成されたクラスがJavaで有効かどうかは、同じ名前の2つのget
XXX
()
メソッドおよび同じ名前の2つのset
XXX
()
メソッドに、明確にオーバーロードできる異なる引数型があるかどうかによります。
TRANSLATE
句で存在しないオブジェクト属性を指定すると、JPublisherは警告メッセージを発行せずにそのオブジェクト属性を無視します。
INPUT
ファイルからの次の例を考えます。
type PERSON translate X as attr1
X
がPERSON
の属性ではない場合、JPublisherでは警告メッセージが発行されません。