ヘッダーをスキップ
Oracle® Database JPublisherユーザーズ・ガイド
12cリリース1 (12.1)
B72467-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 コマンドライン・オプションおよび入力ファイル

この章では、プログラムの動作を指定するJPublisherのオプション設定および入力ファイルの使用方法と構文の詳細を説明します。内容は次のとおりです。

JPublisherオプション

この項では、JPublisherのコマンドライン・オプションについて説明します。この項の内容は、次のとおりです。

JPublisherのオプションのサマリー

表6-1に、JPublisherのオプションを示します。「デフォルト値」列の「NA」は適用外(not applicable)を表します。「カテゴリ」列は、この章内でそのオプションの概要を説明している項を示しています。

表6-1 JPublisherのオプションのサマリー

オプション名 説明 デフォルト値 カテゴリ

-access

JPublisherにより生成されたメソッド定義に組み込まれるアクセス修飾子を指定します。

public

Javaコード生成

-adddefaulttypemap

JPublisherのデフォルトの型マップにエントリを追加します。

NA

型マップ

-addtypemap

JPublisherのユーザー型マップにエントリを追加します。

NA

型マップ

-builtintypes

数値またはラージ・オブジェクト(LOB)以外の組込みデータ型のデータ型マッピング(jdbcまたはoracle)を指定します。

jdbc

データ型マッピング

-case

JPublisherで生成されるJava識別名の大/小文字を指定します。

mixed

Javaコード生成

-classpath

JPublisherで変換時およびコンパイル時にJavaソースおよびクラスを解決できるように、JavaのCLASSPATHへ追加します。

Java環境

-compatible

互換モードを指定し、-usertypes=oracleの動作を変更します。

関連項目: 「JPublisherの下位互換性モードと設定」

oradata

下位互換性

-compile

Javaのコンパイルを進行させるか抑制するかを指定します。このオプションは、下位互換性モードにおけるSQLJ変換にも影響します。

true

出入力

-compiler-executable

デフォルト以外のバージョンを使用する場合のJavaコンパイラのバージョンを指定します。

NA

Java環境

-context

JPublisherでSQLJ接続コンテキストに使用するクラスを指定します。DefaultContextクラス、ユーザー指定クラスまたはJPublisherで生成されるインナー・クラスのいずれかです。

DefaultContext

接続

-defaulttypemap

JPublisherで使用するデフォルトの型マップを設定します。

「JPublisherのユーザー型マップとデフォルトの型マップ」を参照してください。

型マップ

-d

コンパイル済クラス・ファイルの格納に使用するルート・ディレクトリを指定します。

空(カレント・ディレクトリに直接存在するすべてのファイル)

出入力

-dir

生成されるソース・ファイルの格納に使用するルート・ディレクトリを指定します。

空(カレント・ディレクトリに直接存在するすべてのファイル)

出入力

-driver

JPublisherでデータベースへのJava Database Connectivity(JDBC)接続に使用するドライバのクラスを指定します。

oracle.jdbc.
OracleDriver

接続

-encoding

JPublisherの入力および出力ファイルのJavaにおける文字のエンコーディングを指定します。

システム・プロパティfile.encodingの値

出入力

-endpoint

Webサービスのエンドポイントを指定します。このオプションは、-proxywsdlオプションと併用します。

NA

Webサービス

-filtermodes

指定したパラメータ・モードに従ってコード生成をフィルタ処理します。

NA

Javaコード生成

-filtertypes

指定したパラメータ型に従ってコード生成をフィルタ処理します。

NA

Javaコード生成

-generatebean

生成されるコードがJavaBeans仕様に準拠することを保証します。

false

Javaコード生成

-genpattern

生成されるコードのネーミング・パターンを定義します。

NA

Javaコード生成

-gensubclass

ユーザー・サブクラス用のスタブ・コードを生成するかどうかと生成方法を指定します。

true

Javaコード生成

-httpproxy

ファイアウォールを介してアクセスできるように、Webサービス定義言語(WSDL)ドキュメントのURLを解決するプロキシURLを指定します。このオプションは、-proxywsdlオプションと併用します。

NA

Webサービス

-inputまたは-i

JPublisherで変換する型およびパッケージをリストするファイルを指定します。

NA

入力ファイル/項目

-java

JPublisherでクライアント・サイド・クラスの生成に使用するサーバー・サイドJavaクラスを指定します。

NA

入力ファイル/項目

-lobtypes

JPublisherでBLOB型およびCLOB型に使用するデータ型マッピング(jdbcまたはoracle)を指定します。

oracle

データ型マッピング

-mapping

オブジェクト属性の型とメソッドの引数の型について、生成されたメソッドでサポートするマッピングを指定します。

注意: このオプションは、XXXtypesマッピング・オプションが優先されるために非推奨になっていますが、下位互換性のためにサポートされています。

objectjdbc

データ型マッピング

-methods

JPublisherで変換済SQLオブジェクトとPL/SQLパッケージのストアド・プロシージャ用にラッパー・メソッドを生成するかどうかを指定します。このオプションは、JPublisherでSQLJクラスと非SQLJクラスのどちらを生成するか、またPL/SQLラッパー・クラスを生成するかどうかも指定します。オーバーロードされたメソッドを許可するかどうかを指定する設定が用意されています。

all

Javaコード生成

-numbertypes

JPublisherで数値データ型に使用するデータ型マッピング(jdbcobjectjdbcbigdecimalまたはoracleなど)を指定します。

objectjdbc

データ型マッピング

-omit_schema_names

JPublisherに対して、生成されるコードでSQL型の名前の参照にスキーマを含めないように指定します。

使用禁止(スキーマ名を型名に含めます)

Javaコード生成

-outarguments

PL/SQL出力パラメータのJava実装に使用するホルダーの型(配列、Java API for XML-based Remote Procedure Call(JAX-RPC)ホルダーまたはファンクション・コールの戻り値)を指定します。

array

Javaコード生成

-overwritedbtypes

SQL型の作成時に名前の競合を無視するかどうかを指定します。

true

PL/SQLコード生成

-package

JPublisherでJavaラッパー・クラスが生成されるJavaパッケージの名前を指定します。

NA

Javaコード生成

-plsqlfile

JPublisherで生成済のPL/SQLコードに使用されるPL/SQL型とPL/SQLパッケージについて、SQL変換タイプを作成するラッパー・スクリプトと削除する削除スクリプトを指定します。

plsql_wrapper.sqlplsql_dropper.sql

PL/SQLコード生成

-plsqlmap

PL/SQL型を使用するストアド・プロシージャのPL/SQLラッパー・ファンクションを生成するかどうかを指定します。

true

PL/SQLコード生成

-plsqlpackage

JPublisherでコール仕様、変換ファンクションおよびラッパー・ファンクションなどのPL/SQLコードを生成するPL/SQLパッケージを指定します。

JPUB_PLSQL_WRAPPER

PL/SQLコード生成

-propsまたは-p

コマンドラインにリストされているオプション以外のJPublisherオプションを含むファイルを指定します。

NA

入力ファイル/項目

-proxyclasses

JPublisherで-proxyopts設定に従ってラッパー・クラスとPL/SQLラッパーを生成するJavaクラスを指定します。Webサービスの場合、通常はかわりに-proxywsdlを使用します(実際には-proxyclassesが使用されます)。

NA

Webサービス

-proxyopts

JavaラッパーとPL/SQLラッパーの必須レイヤーおよび追加の関連設定を指定します。

-proxywsdlおよび-proxyclassesオプションへの入力として使用されます。

jaxrpc

Webサービス

-proxywsdl

Webサービスのクライアント・プロキシ・クラスおよび関連Javaラッパー・クラスがPL/SQLラッパーとともに生成されるWSDLドキュメントのURLを指定します。

NA

Webサービス

-serializable

オブジェクト型用に生成されたコードでjava.io.Serializableインタフェースを実装するかどうかを指定します。

false

Javaコード生成

-sqlまたは-s

JPublisherでJavaクラスおよびオプションでサブクラスとインタフェースを生成するオブジェクト型、パッケージまたはパッケージのサブセットを指定します。

NA

入力ファイル/項目

-sqlj

JPublisherでSQLJ Translatorの起動に使用するSQLJオプションの設定を指定します。

NA

SQLJ

-sqlstatement

JPublisherで、該当するメソッドを持つJavaクラス(およびオプションでサブクラスとインタフェース)を生成する対象のSQL問合せまたはデータ操作言語(DML)文を指定します。

NA

入力ファイル/項目

-style

Java間の型マッピングに使用するスタイル・ファイルの名前を指定します。

NA

データ型マッピング

-sysuser

データベース内でWebサービスのクライアント・プロキシ・クラスにアクセスするラッパーを実行するためのパーミッションの付与に使用できる、スーパーユーザー・アカウントの名前とパスワードを指定します。

NA

Webサービス

-tostring

オブジェクト型用のtoString()メソッドを生成するかどうかを指定します。

false

Javaコード生成

-typemap

JPublisherの型マップを指定します。

型マップ

-types

JPublisherでコードを生成するオブジェクト型を指定します。

注意: このオプションは-sqlが優先されるために非推奨になっていますが、下位互換性のためにサポートされています。

NA

入力ファイル/項目

-url

JPublisherでデータベースの接続に使用するURLを指定します。

jdbc:oracle:oci:@

接続

-userまたは-u

接続に使用するOracleユーザー名およびパスワードを指定します。

NA

接続

-usertypes

JPublisherでユーザー定義のSQL型に使用するjdbcまたはoracle型マッピングを指定します。

oracle

データ型マッピング

-vm

デフォルト以外のバージョンを使用する場合のJavaのバージョンを指定します。

NA

Java環境


JPublisherオプションのヒント

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=hr -sql=PERSON:Person -sqlj -optcols=true
     -optparams=true -optparamdefaults=datatype1(size1),datatype2(size)
    Enter hr 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オプションを使用すると、サーバー・サイド・クラスにアクセスするクライアント・サイド・スタブ・クラスを作成できます。これは、データベース・クライアントからJavaストアド・プロシージャおよびファンクションをコールするには、関連PL/SQLラッパーへのJDBCコールが必要だった、以前のリリースのJPublisherからの改善点です。

-javaオプションの構文は次のとおりです。

-java=class_or_package_list

-javaオプションの機能は、-sqlオプションの機能をミラー化したものです。サーバー・サイドSQLオブジェクトまたはPL/SQLパッケージにアクセスするクライアント・サイドJavaクラスが作成されるのではなく、サーバー・サイドJavaクラスにアクセスするクライアント・サイドJavaスタブ・クラスが作成されます。

-javaオプションを使用する場合は、サーバー・サイドJavaクラスまたはパッケージのカンマ区切りのリストを指定します。


注意:

  • -javaオプションを使用するには、データベース接続用の-userおよび-url設定も指定する必要があります。

  • クライアントでは、サーバーと同じJava Development Kit (JDK)を使用することをお薦めします。


たとえば、次のようにします。

-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@HR

スキーマを指定すると、そのスキーマのみが検索されます。スキーマを指定しない場合は、ログイン・ユーザーのスキーマが-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クラスの宣言

サーバー・サイド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と併用すると、インスタンス・メソッドのマップにシングルトン・インスタンスを使用するか複数インスタンスを使用するかが示されます。また、配列パラメータを持つメソッドをマップするかどうかも示します。この場合、配列はINOUTIN OUT、または全モードと想定されます。-proxyopts=static設定は、静的メソッドのみが公開されることを指定します。デフォルト設定の-proxyopts=single,arrayinは、インスタンス・メソッドがシングルトン・インスタンスを使用してコールされ、配列パラメータが入力とみなされるということを示します。-proxyopts=noload設定は、JPublisherに対して、生成されたPL/SQLラッパーおよびJavaストアド・プロシージャ・ラッパーのロードを禁止します。

-compatible=10.1オプションにより、-dbjava-javaに等しくなります。

公開対象のサーバー・サイド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.*)など。

JavaおよびPL/SQLラッパー生成用の設定

-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_bname_aを表し、intfc_bを実装します。2番目の書式では、class_cname_aを表し、class_bを拡張し、intfc_cを実装します。

    インタフェースは、生成されるクラスまたはユーザー・サブクラスの両方ではなく、どちらか一方についてのみ指定します。INPUTファイルでは、この構文は次のようになります。

      SQL name_a
        [GENERATE  class_b
                   [ implements intfc_b] ]
        [AS        class_c
                   [ implements intfc_c ] ]
        ...
    

注意:

  • JPublisherのコマンドラインでサポートされるのは、大/小文字区別のないSQL名のみです。SQLでユーザー定義型が大/小文字を区別して引用符で囲んで定義されている場合は、コマンドラインにそのユーザー定義型を引用符で囲んで指定するのではなく、JPublisherのINPUTファイルにその名前を指定する必要があります。

  • 必要なクラス名とインタフェース名がパターンに従っている場合は、-genpatternコマンドライン・オプションを使用できます。


複数の変換項目を入力する場合は、空白を使用せずに各項目をカンマで区切る必要があります。次の例では、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パッケージにラッパー・クラスが作成されます。

  • オブジェクト型EMPLOYEEOracleEmployeeとして変換されます。

  • オブジェクト参照クラスOracleEmployeeRefが生成されます。

  • ADDRESSJAddressとして変換されますが、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 ...

注意:

  • INPUTファイルでは、ストアド・プロシージャ名に大/小文字区別がある場合は引用符で囲みます。たとえば、"proc1"のように指定します。JPublisherでは、引用符で囲まれていない名前は大/小文字区別がないものとみなされます。

  • 大/小文字区別のある名前は、JPublisherのコマンドラインではサポートされません。

  • 指定するストアド・プロシージャ名の末尾にワイルドカード文字%を使用できます。たとえば、myfunc%と指定すると、myfunc1など、名前がmyfuncで始まるストアド・プロシージャと一致します。


また、次の構文を使用し、ストアド・プロシージャ名と引数の型に従ってサブセットを指定することもできます。

myfunc(sqltype1, sqltype2, ...)

この場合、名前および引数の数と型が一致するストアド・プロシージャのみが公開されます。たとえば、次のようにします。

-sql=mypackage(myfunc1(NUMBER, CHAR)+myfunc2(VARCHAR2))

変換対象のSQL文の宣言

-sqlstatementオプションを使用すると、SELECTINSERTUPDATEまたは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.Sourceoracle.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
    

TYPETYPE...ASおよびTYPE...GENERATE...ASコマンドの機能は、SQLSQL...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で使用されるデータベース接続関連のオプションについて説明します。これらのオプションをアルファベット順に説明します。

SQLJ接続コンテキスト・クラス

-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.BLOBCLOBStructRefまたは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オプション

-datasourceを使用すると、SQL、PL/SQL、AQおよびサーバー・サイドJavaクラスの公開に使用するデフォルトのデータ・ソースを指定できます。-datasourceを設定すると、JDBC接続がアプリケーションの実行時に明示的に設定されない場合、生成されたコードは指定のJava Naming and Directory Interface(JNDI)の場所を参照してデータ・ソースを取得し、さらにそのデータ・ソースからJDBC接続を取得します。

-datasourceオプションの構文は次のとおりです。

-datasource=jndi_location

データベース接続用のJDBCドライバ・クラス

-driverオプションは、JPublisherでデータベースとのJDBC接続に使用するドライバのクラスを指定します。このオプションの構文は次のとおりです。

-driver=driver_class_name

デフォルト設定は次のとおりです。

-driver=oracle.jdbc.OracleDriver

この設定はあらゆるOracle JDBCドライバに適合します。

ターゲット・データベースへの接続URL

-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)ドライバの場合は、新規コードの接続文字列にociを使用します。ただし、下位互換性のためにOracle8iドライバの場合はoci8も引き続き使用できます。


データベース接続用のユーザー名とパスワード

JPublisherには、データベースに接続できるように、Oracleユーザー名とパスワードを指定する-userオプションが必要です。-userオプションを入力しない場合、JPublisherではエラー・メッセージが発行されて実行が停止します。

-userオプションの構文は次のとおりです。

-user=username/password
-u username/password

この2つの書式は等価です。2番目の書式は、便利なコマンドライン短縮形です。

たとえば、次のコマンドは、ユーザー名hrを使用してデータベースに接続するようにJPublisherに指示します。

% jpub -user=hr -input=demoin -dir=demo -mapping=oracle -package=corp
Enter hr password: password

データ型マッピングのオプション

次のオプションは、JPublisherでオブジェクト型、コレクション型、オブジェクト参照型およびPL/SQLパッケージをJavaクラスに変換するときに使用するデータ型マッピングを制御します。

  • -usertypesオプションは、oracleマッピング用の-compatibleオプションとともに、ユーザー定義型に対するJPublisherの動作を制御します。特に、JPublisherで生成されたクラスにOracle ORADataインタフェースと標準SQLDataインタフェースのどちらを実装するか、およびJPublisherでコレクション型とオブジェクト参照型用のコードを生成するかどうかを制御します。

  • -numbertypesオプションは、数値型のデータ型マッピングを制御します。

  • -lobtypesオプションは、BLOBCLOBおよびBFILE型のデータ型マッピングを制御します。

  • -builtintypesオプションは、非数値型で非LOB型の、事前定義済SQL型およびPL/SQL型のデータ型マッピングを制御します。

これらの4つのオプションは、型マッピング・オプションと呼ばれます。

オブジェクト型の場合、JPublisherで型マッピング・オプションにより指定したマッピングが、オブジェクトの属性およびそのオブジェクトに含まれるメソッドの引数と結果に適用されます。マッピングにより、生成済のアクセッサ・メソッドがサポートする型が制御されます。たとえば、getXXX()メソッドが戻す型やsetXXX()メソッドが受け入れる型をサポートします。

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マッピングの型

CHARCHARACTERLONGSTRINGVARCHARVARCHAR2

oracle.sql.CHAR

java.lang.String

RAWLONG RAW

oracle.sql.RAW

byte[]

DATE

oracle.sql.DATE

java.sql.Timestamp

TIMESTAMP

TIMESTAMP WITH TZ

TIMESTAMP WITH LOCAL TZ

oracle.sql.TIMESTAMP

oracle.sql.TIMESTAMPTZ

oracle.sql.TIMESTAMPLTZ

java.sql.Timestamp


LOB型のマッピング

-lobtypesオプションは、LOB型のデータ型マッピングを制御します。-lobtypesオプションの構文は次のとおりです。

-lobtypes={jdbc|oracle}

表6-3に、これらの型が-lobtypes=oracle(デフォルト)および-lobtypes=jdbcにどのようにマップされるかを示します。

表6-3 -lobtypesオプションの影響を受ける型のマッピング

SQLデータ型 Oracleマッピングの型 JDBCマッピングの型

CLOB

oracle.sql.CLOB

java.sql.Clob

BLOB

oracle.sql.BLOB

java.sql.Blob

BFILE

oracle.sql.BFILE

oracle.sql.BFILE



注意:

  • BFILEはOracle固有のSQL型であるため、標準のjava.sql.BfileのJava型はありません。

  • NCLOBはOracle固有のSQL型です。CLOBの使用をNCHAR形式で示すもので、Javaではoracle.sql.NCLOBのインスタンスとして表されます。

  • java.sql.Clobインタフェースおよびjava.sql.Blobインタフェースは、JDK1.2バージョンで導入されています。


数値型のマッピング

-numbertypesオプションは、数値SQL型およびPL/SQL型のデータ型マッピングを制御します。-numbertypesオプションの構文は次のとおりです。

-numbertypes={jdbc|objectjdbc|bigdecimal|oracle}

次の選択肢を使用できます。

  • JDBCマッピングでは、ほとんどの数値型はintおよびfloatなどのJavaプリミティブ型にマップされ、DECIMALおよびNUMBERjava.math.BigDecimalにマップされます。

  • Object JDBCマッピング(デフォルト)では、ほとんどの数値データ型はjava.lang.Integerjava.lang.FloatなどのJavaラッパー・クラスにマップされます。DECIMALおよびNUMBERjava.math.BigDecimalにマップされます。

  • BigDecimalマッピングでは、すべての数値型がjava.math.BigDecimalにマップされます。

  • Oracleマッピングでは、すべての数値データ型がoracle.sql.NUMBERにマップされます。

表6-4に、-numbertypesオプションの影響を受けるデータ型を示します。また、-numbertypes=jdbcおよび-numbertypes=objectjdbc(デフォルト)のJava型マッピングも示します。

表6-4 -numbertypesオプションの影響を受ける型のマッピング

SQLデータ型 JDBCマッピングの型 Object JDBCマッピングの型

BINARY_INTEGERINTINTEGERNATURALNATURALNPLS_INTEGERPOSITIVEPOSITIVENSIGNTYPE

int

java.lang.Integer

SMALLINT

int

java.lang.Integer

REAL

float

java.lang.Float

DOUBLE PRECISIONFLOAT

double

java.lang.Double

DECDECIMALNUMBERNUMERIC

java.math.BigDecimal

java.math.BigDecimal


ユーザー定義型のマッピング

-usertypesオプションは、ユーザー定義型用に生成されたクラスに、Oracle ORADataインタフェースと標準SQLDataインタフェースのどちらを実装するかを制御します。-usertypesオプションの構文は次のとおりです。

-usertypes={oracle|jdbc}

-usertypes=oracle(デフォルト)の場合、JPublisherではオブジェクト型、コレクション型およびオブジェクト参照型用にORADataクラスが生成されます。

-usertypes=jdbcの場合、JPublisherではオブジェクト型用にSQLDataクラスが生成されます。この場合、JPublisherではコレクション型またはオブジェクト参照型用のクラスは生成しません。すべてのコレクション型にはjava.sql.Arrayを、すべてのオブジェクト参照型にはjava.sql.Refを使用する必要があります。


注意:

  • SQLDataインタフェースはJDBC 2.0の機能であるため、-usertypes=jdbc設定にはJDK 1.2以上が必要です。

  • -compatibleオプションの特定の設定では、-usertypes=oracleに設定すると、ORADataインタフェースのかわりに非推奨のCustomDatumインタフェースを実装するクラスが生成されます。


すべての型のマッピング

-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=oracle

oracle

oracle

oracle

oracle

-mapping=jdbc

jdbc

jdbc

oracle

oracle

-mapping=objectjdbc(デフォルト)

jdbc

objectjdbc

oracle

oracle

-mapping=bigdecimal

jdbc

bigdecimal

oracle

oracle



注意:

オプションはコマンドラインに入力した順に処理されます。したがって、-mappingオプションが特定の型マッピング・オプション(-builtintypes-lobtypes-numbertypesまたは-usertypes)の前にある場合、その型マッピング・オプションは、関連する型の-mappingオプションをオーバーライドします。-mappingオプションが特定の型マッピング・オプションの後に続く場合は、その型マッピング・オプションは無視されます。

Java間の型マッピング用のスタイル・ファイル

JPublisherのスタイル・ファイルを使用すると、Java間の型マッピングを指定できます。その使用方法の1つは、生成されるクラスをWebサービスで確実に使用できるようにすることです。-styleオプションを使用してスタイル・ファイル名を指定します。-styleオプションは複数回使用できます。設定は順番に累積されます。-styleオプションの構文は次のとおりです。

-style=stylename

通常、Oracleにはスタイル・ファイルが用意されていますが、編集したり独自に作成する場合があります。たとえば、Oracle Database 12cで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_funcplsql_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のデフォルトの型マップ

JPublisherでは、-defaulttypemapオプションが内部的に使用され、デフォルトの型マップに事前定義済の型マップ・エントリが設定されます。このオプションの構文は次のとおりです。

-defaulttypemap=list_of_typemap_entries

-adddefaulttypemapオプションと-defaulttypemapオプションには、-adddefaulttypemapではデフォルトの型マップにエントリを追加するのに対して、-defaulttypemapでは既存のデフォルトの型マップを指定したエントリで置き換えるという違いがあります。デフォルトの型マップを消去するには、次の設定を使用します。

-defaulttypemap=

たとえば、この設定を使用すると、デフォルトの型マップとユーザー型マップ間の競合を回避できます。


関連項目:

型マップ間の競合に関する注意事項などの追加情報は、「JPublisherのユーザー型マップとデフォルトの型マップ」を参照してください。

JPublisherの型マップの置換

-typemapオプションを使用すると、1つのエントリまたはカンマ区切りのエントリ・リストを指定してユーザー型マップを設定できます。このオプションの構文は次のとおりです。

-typemap=list_of_typemap_entries

-typemapオプションと-addtypemapオプションの違いは、-typemapでは既存のユーザー型マップを指定したエントリで置き換えるのに対して、-addtypemapではユーザー型マップにエントリを追加するということです。ユーザー型マップを消去するには、次の設定を使用します。

-typemap=

たとえば、この設定を使用すると、デフォルトの型マップとユーザー型マップ間の競合を回避できます。

Javaコード生成オプション

この項では、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オプションの値の影響を受けません。

Java識別名の大/小文字の区別

クラスまたは属性名をINPUTファイルまたはコマンドラインで指定しない場合、-caseオプションはJPublisherで生成されるJava識別子の大/小文字区別に影響します。これには、クラス名、メソッド名、getXXX()およびsetXXX()メソッド名に埋め込まれる属性名、生成されるメソッド名の引数が含まれます。このオプションの構文は次のとおりです。

-case={mixed|same|lower|upper}

表6-6に、-caseオプションで可能な値を示します。

表6-6 -caseオプションの値

-caseオプション値 説明

mixed(デフォルト)

クラス名の各単語の1文字目、またはメソッド名の2番目以降の単語の1文字目は、大文字になります。他のすべての文字は小文字です。アンダースコア(_)、ドル記号($)およびJavaで無効なすべての文字は、ワード単位の境界を構成して暗黙的に警告なしで削除されます。単語の境界はメソッド名のgetまたはsetの後にも出現します。

same

JPublisherでは、データベース上で表される大/小文字の区別は変更されません。アンダースコアおよびドル記号は保持されます。Javaで無効な他の文字は削除され、警告メッセージが発行されます。

upper

JPublisherで小文字は大文字に変換され、アンダースコアおよびドル記号は保持されます。Javaで無効な他の文字は削除され、警告メッセージが発行されます。

lower

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 12cリリースのデフォルトの動作です。以前のリリースの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.SQLDataoracle.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-

JavaBeans仕様に準拠したコード生成

-generatebeanオプションは、生成されるクラスがJavaBeans仕様に準拠することを保証するために使用できるフラグです。このオプションの構文は次のとおりです。

-generatebean={true|false}

デフォルト設定は-generatebean=falseです。-generatebean=trueに設定すると、JavaBeanプロパティの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はそれぞれPersonBaseStudentBaseおよび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と等価の設定truenoneと等価の設定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の設定を指定すると同時に、allnonenamedまたはalwaysの設定を指定するには、設定をカンマで区切ります。これを次の例に示します。

-methods=always,unique,retry

コマンドラインまたはプロパティ・ファイルで-methodsオプションを指定できます。

名前参照からのスキーマ名の省略

ユーザー定義のSQL型(オブジェクトやコレクションなど)を公開するときに、JPublisherがJavaラッパー・クラスの型名を参照する場合は、通常、型名がデータベース・スキーマ名で修飾されます(たとえば、HRスキーマ内のEMPLOYEE型はHR.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オプションを使用すると、どのメカニズムを使用するかをそれぞれarrayholderまたはreturnの設定を介して指定できます。この機能はWebサービスに特に有効です。このオプションの構文は次のとおりです。

-outarguments={array|holder|return}

生成されたJavaパッケージの名前

-packageオプションでは、JPublisherで生成されるJavaパッケージの名前を指定します。この名前は、生成される各クラスのパッケージ宣言に使用されます。このオプションの構文は次のとおりです。

-package=package_name

-dirおよび-dオプションを使用すると、生成されたファイルが格納されるディレクトリ構造には、-dirおよび-d設定のみではなくパッケージ名が反映されます。


注意:

  • -packageオプション設定とINPUTファイルのパッケージ設定が競合する場合、優先順位はコマンドラインで-inputおよび-packageオプションを指定した順序によって決定します。-package設定は、-inputオプションより後に指定した場合は優先されます。それ以外の場合は、INPUTファイルの設定が優先されます。

  • -dirおよび-dオプションを使用しないか、または明示的に空に設定すると、生成されたファイルはすべて、-package設定に関係なくパッケージ階層なしでカレント・ディレクトリに直接格納されます。


例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.BLOBoracle.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フラグを使用すると、オブジェクト値の出力用にtoString()メソッドを追加生成するように、JPublisherに対して指定できます。出力は、オブジェクトの構成に使用するSQLコードに似ています。デフォルト設定はfalseです。このオプションの構文は次のとおりです。

-tostring={true|false}

mainメソッドの名前の変更

-nomain=trueを使用すると、シグネチャmain(String[])を持つJavaメソッドの生成を回避できます。このオプションは、SQLの公開とサーバー・サイドJavaクラスの公開に適用されます。このオプションの構文は次のとおりです。

-nomain[=true|false]

Javaストアド・プロシージャでの制約のため、-dbjavaオプションでは-nomain=trueが自動的に設定されます。シグネチャmain(String[])を持つメソッドが-nomain=true設定で生成される場合、JPublisherではこのメソッドの名前がたとえばmain0(Stringp[])などに変更されます。

デフォルト設定は次のとおりです。

-nomain=false

PL/SQLコード生成オプション

この項では、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を介してアクセスできます。

SQL型の生成

JPublisherでは、PL/SQL型を公開するときおよびサーバー・サイドJavaクラス用のPL/SQLラッパーを生成するときに新しいSQL型を生成することがあります。-overwritedbtypesオプションにより、生成される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削除スクリプトを実行します。

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.

PL/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でアクセス可能なシグネチャが提供されます。

生成されたPL/SQLコード用のパッケージ

-plsqlpackageオプションでは、JPublisherで生成されたPL/SQLコードを格納するPL/SQLパッケージの名前を指定します。このコードには、PL/SQLラッパー(コール仕様)、PL/SQL型とSQL型間の変換に使用する変換ファンクション、PL/SQL型を使用するストアド・プロシージャをラップするラッパー・ファンクションおよびテーブル・ファンクションが含まれます。このオプションの構文は次のとおりです。

-plsqlpackage=name_of_PLSQL_package

デフォルトでは、パッケージJPUB_PLSQL_WRAPPERが使用されます。


注意:

このパッケージは、JPublisherによって生成されたSQLスクリプトを実行してデータベースに作成する必要があります。

PL/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=hr -d=myclasses -dir=mysource -package=a.b.c  -sql=PERSON:Person,STUDENT:Student
Enter hr 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設定より優先されます。

Javaにおける文字のエンコーディング

-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://docs.oracle.com/javase/7/docs/technotes/tools/windows/native2ascii.html


注意:

エンコーディング設定は、JPublisherの-encodingオプションとJavaのfile.encoding設定のどちらを使用して設定する場合も、-propsオプションで指定したファイルなどのJavaプロパティ・ファイルには適用しないでください。プロパティ・ファイルでは、常に8859_1エンコーディングが使用されます。これはJava全般の機能であり、JPublisher固有の機能ではありません。ただし、プロパティ・ファイルではUnicodeエスケープ・シーケンスを使用できます。

Webサービスのコールアウトを容易にするオプション

この項では、サーバー・サイド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サービスにアクセスできるように、クライアント・プロキシ・クラスに対するパーミッションの付与に使用するスーパーユーザー・アカウントの名前およびパスワードを指定します。


注意:

  • ここで説明している機能を使用するには、Oracle Database 12cdbwsclient.jarライブラリをインストールする必要があります。

  • ここで説明しているラッパー生成には、既存のJPublisherオプション(-dir-d-plsqlmap-plsqlfile-plsqlpackageおよび-package)が複数使用されています。また、JPublisherで生成されたエンティティをデータベースにロードできるように、-userおよび-urlオプションを介してデータベース接続を指定することもできます。


JavaおよびPL/SQLラッパー生成用のWSDLドキュメント

-proxywsdlオプションの構文は次のとおりです。

-proxywsdl=WSDL_URL

このオプションの使用方法は次のとおりです。

% jpub -proxywsdl=META-INF/HelloService.wsdl ...

指定したURLにあるWebサービスのWSDLドキュメントを指定すると、JPublisherはWebサービスのクライアント・プロキシ・クラスの生成を指示し、データベースからWebサービスをコールアウトするための該当するJavaおよびPL/SQLラッパーを生成します。生成するクラスおよびプロセスは、WSDLドキュメントにより決定されます。JPublisherでは、-proxyclassesオプションが自動的に設定され、入力として-proxyopts設定が使用され、次のステップが実行されます。

  1. Oracle Database Webサービス・アセンブラ・ツールが起動され、WSDLドキュメントに基づいてWebサービスのクライアント・プロキシ・クラスが生成されます。これらのクラスは、Oracle Database Webサービス・クライアント・ランタイムを使用し、WSDLドキュメントで指定されたWebサービスにアクセスします。

  2. 必要に応じて、Webサービスのクライアント・プロキシ・クラス用のJavaラッパー・クラスが作成されます。インスタンス・メソッドを持つプロキシ・クラスごとに、インスタンス・メソッドを静的メソッドとして公開するためのラッパー・クラスが必要です。インスタンス・メソッドがなくても、プロキシ・クラスのメソッドのコール順序でJavaプリミティブ型以外が使用される場合は、ラッパー・クラスが必要です。

  3. 生成されたクラス用のPL/SQLラッパーが作成され、PL/SQLからアクセス可能になります。PL/SQLでサポートされるのは静的メソッドのみのため、静的メソッドでインスタンス・メソッドをラップする必要があります。これが前のステップで実行されています。

  4. -userおよび-url設定を指定してあり、JPublisherで接続が確立されていれば、-proxyopts=noload設定を介してロードを迂回するように指定しないかぎり、生成されたコードがデータベースにロードされます。


注意:

-proxywsdlを使用する場合の注意事項は次のとおりです。
  • -packageオプションを使用して、生成されるJavaクラスのパッケージを指定する必要があります。

  • -proxyoptsの場合、Oracle Application Server 10g リリース10.0.xで使用するにはデフォルトのjaxrpc設定で十分です。この設定では、Webサービスのクライアント・プロキシ・クラスのインスタンス・メソッドがシングルトン・メカニズムを使用して公開されます。Oracle Application Server 10g(9.0.4)またはそれ以前のリリースで使用する場合は、-proxyopts=soapに設定してください。


通常、-endpointオプションは-proxywsdlオプションとともに使用します。

Webサービスのエンドポイント

-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コマンドラインでエンドポイントを指定しない場合は、生成されたラッパー・クラスを手動で変更してこのコードのコメントを解除し、適切なエンドポイントを指定する必要があります。

WSDLのプロキシURL

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用のパスワード・ファイルを設定する必要があります。パスワード・ファイルを設定するには、次の手順を実行する必要があります。

  1. remote_login_passwordfileオプションをデータベース・パラメータ・ファイルに追加します。次のいずれかの設定を使用する必要があります。

    remote_login_passwordfile=shared
    
    remote_login_passwordfile=exclusive
    
  2. パスワード・ファイルを作成していない場合は作成します。これを行うには、次のコマンドを実行します。ORACLE_HOME/dbs/は既存のディレクトリです。

    orapwd file="ORACLE_HOME/dbs/orapwlsqlj1" entries=100 force=y
    Enter password: password
    
  3. ユーザーにリモート・ログオン権限を付与します。これを行うには、次のようにします。

    % sqlplus /nolog
    SQL> CONN / AS sysdba
    Connected.
    SQL> GRANT sysdba TO hr;
    Grant succeeded.
    

関連項目:

リモートSYSログオンの設定方法の詳細は、『Oracle Database JDBC開発者ガイド』を参照してください。

SQLJ機能にアクセスするためのオプション

この項では、-sqljオプションについて説明します。このオプションを使用すると、JPublisherコマンドラインを介してSQLJオプションをSQLJ Translatorに渡すことができます。

SQLJ Translator用の設定

Oracle Database 12cでは、JPublisherを実行するとデフォルトでSQLJ変換が自動的に実行されます。変換は透過的であり、JPublisherコード生成では参照可能な.sqljファイルが生成されません。

ただし、JPublisherの-sqljオプションを使用して、JPublisherによるSQLJ Translatorの起動に使用するSQLJ設定を指定することもできます。このオプションの構文は次のとおりです。

-sqlj=sqlj_options

たとえば、次のようにします。

% jpub -user=hr -sqlj -optcols=true -optparams=true -optparamdefaults=datatype1(size1),datatype2(size)
Enter hr password: password

注意:

  • -sqljの後には等号(=)がありません。

  • 他のすべてのJPublisherオプションは、-sqljオプションの前に指定する必要があります。-sqljの後のオプション設定は、SQLJオプションとみなされてSQLJ Translatorに渡されます。前述の例では、-optcols-optparamsおよび-optparamdefaultsがSQLJオプションです。


また、明示的に生成されている.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

注意:

  • SQLJオプション設定は、-sqljオプションを介して指定するかわりに、JPublisherでサポートされるsqlj.propertiesファイル内に指定できます。

  • -compiler-executableオプションでは、トランスレータでJavaコードのコンパイルに使用するJavaコンパイラを指定します。このオプションを設定すると、SQLJ Translatorに渡されます。


下位互換性オプション

この項では、-compatibleオプションについて説明します。このオプションを使用して次のいずれかを指定できます。

  • JPublisherで生成されるクラスに実装されるインタフェース

  • JPublisherによるSQLJ変換(参照可能な.sqlj出力ファイルの生成)をスキップするかどうか

  • Oracle9iまたはOracle8i環境でJPublisher出力に使用する下位互換性モード

ユーザー定義型用の下位互換性を持つOracleマッピング

-compatibleオプションには、次の2つの操作モードがあります。

  • oradataまたはcustomdatumの設定を介して、JPublisherで生成されるカスタムJavaクラスで実装するインタフェースを明示的に指定できます。

  • sqlj8iboth8iまたは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を使用した下位互換性モードの指定

下位互換性モードを指定するには、sqlj10.19i8iまたは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環境オプション

この項では、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

-classpathオプションを使用して、JPublisherで変換およびコンパイル時のJavaソースとクラスの解決に使用するJavaのCLASSPATHを指定します。このオプションの構文は次のとおりです。

-classpath=path1:path2:...:pathN

次のコマンドは、既存のCLASSPATHに新規のパスを追加する場合の使用例を示しています。

% jpub -user=hr -sql=PERSON:Person,STUDENT:Student -classpath=.:$ORACLE_HOME/jdbc/lib/ocrs12.jar:$CLASSPATH
Enter hr password: password

注意:

SQLJにも-classpathオプションがあります。SQLJの-classpathオプションをJPublisherの-sqljオプションに続けて使用すると、その設定が変換およびコンパイル用のCLASSPATHに使用され、JPublisherの-classpathオプション設定は無視されます。JPublisherの-classpathオプションのみを使用する方が簡単です。

Javaコンパイラ

-compiler-executableオプションを使用するのは、JPublisherで生成されたJavaコードのコンパイルに、システム上のJPublisherによりデフォルトで使用されるコンパイラとは異なるコンパイラを使用する場合です。代替コンパイラの実行可能ファイルへのパスを指定します。このオプションの構文は次のとおりです。

-compiler-executable=path_to_compiler_executable

Javaのバージョン

-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

SQLJ移行オプション

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の入力ファイルの構造および内容を説明します。

プロパティ・ファイルの構造および構文

プロパティ・ファイルは、頻繁に使用するオプションを指定できるオプションのテキスト・ファイルです。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=hr -sql=employee -mapping=oracle -case=lower -package=corp -dir=demo
Enter hr password: password

次のコマンドも考えます。

% jpub -props=my_properties

my_propertiesが次のように定義されている場合、このコマンドは最初の例と同じです。

-- jpub.user=hr/hr
// 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

INPUTファイルの構造および構文

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構文は非推奨です。

また、nameschema_name.nameを入力すると、SQL型またはパッケージが所属するスキーマを指定できます。schema_name.toplevelを入力すると、JPublisherではスキーマschema_name内にあるトップレベルのサブプログラムが変換されます。TOPLEVELとともに、公開する名前のカンマ区切りのリストname_listをカッコで囲んで指定することもできます。JPublisherでは、このリストと一致するトップレベルのファンクションおよびプロシージャのみが考慮されます。このリストを指定しない場合、トップレベルのすべてのサブプログラム用のコードが生成されます。


注意:

SQLでユーザー定義型が大/小文字区別を使用して定義されている場合は、名前を引用符で囲んで指定する必要があります。たとえば、次のようにします。
SQL "CaseSenstiveType" AS CaseSensitiveType

または、大/小文字区別のないスキーマ名を指定することもできます。

SQL HR."CaseSensitiveType" AS CaseSensitiveType

大/小文字区別のあるスキーマ名を指定することもできます。

SQL "Hr"."CaseSensitiveType" AS CaseSensitiveType

AS句はオプションです。

スキーマ名や型名にはピリオド(.)を使用しないでください。


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_1java_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メソッドをnullにマップすると、JPublisherではマップ先のJavaクラスには対応するJavaメソッドが作成されません。SQLオブジェクトの属性をnullにマップすると、JPublisherではマップ先のJavaクラスに属性用のgetterメソッドとsetterメソッドが作成されません。


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=hr -input=demoin -numbertypes=oracle -usertypes=oracle -dir=demo -d=demo -package=corp -case=same
Enter hr 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

INPUTファイルの事前注意事項

この項では、JPublisherで現在レポートされないINPUTファイルのエラー条件について説明します。また、予約語についても説明します。

複数の異なるオブジェクト型に対する同じJavaクラス名の要求

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()メソッドに、明確にオーバーロードできる異なる引数型があるかどうかによります。

存在しない属性の指定

TRANSLATE句で存在しないオブジェクト属性を指定すると、JPublisherは警告メッセージを発行せずにそのオブジェクト属性を無視します。

INPUTファイルからの次の例を考えます。

type PERSON translate X as attr1

XPERSONの属性ではない場合、JPublisherでは警告メッセージが発行されません。

JPublisherの予約語

次の予約語は、INPUTファイル内でSQL識別子またはJava識別子として使用しないでください。

AS 
GENERATE 
IMPLEMENTS 
SQLSTATEMENTS_TYPE 
SQLSTATEMENTS_METHOD 
SQL 
TRANSLATE 
TOPLEVEL 
TYPE 
VERSION