ヘッダーをスキップ
Oracle Databaseプラットフォーム共通日本語README
11g リリース2(11.2)
B56292-13
  目次
目次

前
 
次
 

JPublisher README

原典情報: $ORACLE_HOME\jpub\READMEJPub.html


目次

JPubのインストール方法と起動方法

JPubに関するよくある質問

このバージョンの新機能

JPubで修正された不具合

既知の不具合と制限事項


JPublisher(JPub)11.1のリリース・ノート

このファイルには、Java Publisherユーティリティ(短縮名はJPub)のリリース11.1に関する重要な情報が記載されています。

JPubは、Javaソース・コードを生成し、使用しているJavaプログラムにおけるOracleオブジェクト型とPL/SQLパッケージの表現を容易にします。 JPubの詳細は、『Oracle Database JPublisherユーザーズ・ガイド』に記載されています。 このREADMEファイルの一部のコメントは、読者がJPubに関するドキュメントを読んでいることを前提にしています。

JPubのインストールおよび起動

JPubは1つのJavaプログラムです。 JPubはOracle SQLJに付属しています。 SQLJをインストールした場合は、JPubもインストールされています。

SQLJコード生成モードの場合、JPubにSQLJが必要な理由は、次のとおりです。

JDBCコード生成モードの場合、JPubはSQLJランタイムに依存しない.javaコードを生成します。 JPubはJDBCを介してデータベースと通信します。 JPubを実行するには、JDBCドライバもインストールする必要があります。 Oracleオブジェクトを使用している場合は、Oracle 11.1 JDBCドライバをお薦めします。また、Oracle 8.1.x JDBCドライバが必要です。

デフォルトでは、JPubはOracle JDBC OCIドライバを使用してOracle Databaseと通信しますが、-urlコマンドライン・パラメータを設定することで、OracleのThinドライバなどの他のドライバを選択できます。

JPublisherおよびJDBCのインストールに関する詳細は、次のマニュアルを参照してください。

JPubをインストールするには、『Oracle Database JPublisherユーザーズ・ガイド』に記載されているJPublisherのインストール手順に従ってください。  次に要約を示します。

ORACLE_HOMEは、Oracle製品がインストールされている位置を示します。

jpubによるJPubの起動

インストール・プロセスによって、スクリプト・ファイル(UNIXプラットフォームの場合はシェル・スクリプト、Windowsプラットフォームの場合は.batスクリプト)が作成されます。このスクリプト・ファイルには、インストールされているJava JRE、JDBCドライバおよびSQLJトランスレータへの参照がそのまま組み込まれています。 このスクリプトは、コマンドラインで次のように入力して起動できます。

   jpub

この後に、コマンドラインの引数が続く場合があります。 引数を指定しなかった場合は、使用できるコマンドライン引数に関する情報が表示されます。 jpubスクリプトでは、インストール固有のCLASSPATHが使用されます。つまり、インストール・プロセスでは、インストール時に検出されたJDKの位置に基づいて、JPublisherの環境変数CLASSPATHがjpubスクリプトにハードコードされます。

oracle.jpub.DoitによるJPubの起動

JPublisherをSQLJ製品の一部としてオラクル社のWebサイトからダウンロードした場合、jpubスクリプトは自動的には作成およびカスタマイズされません。 この場合は、次の手順を実行する必要があります。

JPublisherを起動するには、次のコマンドを使用します。

    java oracle.jpub.Doit

この後に、コマンドラインの引数が続く場合があります。 このコマンドには、JPublisherが使用環境のCLASSPATH設定を取得すること以外は、1.1項で述べたjpubコマンドと同じように機能します。JPublisherが取得するCLASSPATH変数は、1.1項のjpubコマンドではインストール時に事前に設定されています。

生成後の作業

JPubで生成されたクラスを使用するには、次の操作を実行します。

これで、JPubで生成されたコードを実行する準備が整いました。

Webサービス・コールアウトの設定

JPublisherでは、データベースでのWebサービス起動をサポートするWebサービス・クライアントとそのPL/SQLラッパーを生成できます。 Webサービス・コールアウトとも呼ばれるこの機能には、次の追加設定手順が必要です。

最初に、次のOTN WebサイトからWebサービス・コールアウト・ユーティリティをダウンロードします。

次に、ダウンロードしたアーカイブをORACLE_HOMEに抽出します。 dbwsa.jar、dbwsclientws.jar、dbwsclientdb101.jar、dbwsclientdb102.jarおよびdbwsclientdb11.jarファイルが次のディレクトリに追加されます。

ORACLE_HOME/sqlj/lib

最後に、utl_dbws_jserver. jarファイルをSYSスキーマまたはWebサービスが起動されるスキーマにロードします。 たとえば、このjarファイルをSYSにロードするには、次のloadjavaコマンドを使用します。

loadjava -u scott/tiger -r -v -f  dbwsclientws.jar dbwsclientdb101.jar(Oracle 10.1データベースの場合)
loadjava -u scott/tiger -r -v -f dbwsclientws.jar dbwsclientdb102.jar(Oracle 10.2データベースの場合)
loadjava -u scott/tiger -r -v -f dbwsclientws.jar dbwsclientdb11.jar(Oracle 11gデータベースの場合)

JPubに関するよくある質問

質問: 使用しているオブジェクト型およびパッケージに、Javaクラスを手動で作成できないのはなぜですか。

作成できますが、 エラーが多くなります。

JDBCプログラムでOracleオブジェクト型を表すJavaクラスは、oracle.sql.ORADataインタフェースまたはjava.sql.SqlDataインタフェースを実装している必要があります。 また、SQLJプログラムでOracleオブジェクト型を表すJavaクラスは、次の形式のクラス内宣言で、そのオブジェクト型の名前を指定する必要があります。

public static final String _SQL_NAME = "<name of object type>";

これらのタスクは、JPubで生成されたコードによって処理されます。 さらに、オブジェクト型とPL/SQLパッケージの両方について、JPubは、渡す引数の詳細を処理し、サーバー・メソッドの起動時にメソッドの起動を処理するコードを生成します。
 

質問: JPubで生成されたクラスに、いくつかのメソッドを追加する場合は、 そのクラスを編集したり、そのクラスを拡張するクラスを新たに作成する必要がありますか。

JPubで生成されたクラスを編集し、将来のある時点でそのクラスを再生成するためにJPubを再実行する必要がある場合は、変更内容を保存し、手動で再挿入する必要があります。 JPubで生成されたクラスを拡張するサブクラスを使用すると便利です。 その場合は、使用するサブクラスについて、次の-inputファイル構文を使用してJPubに指示する必要があります。

SQL <type name>
AS <subclass name>
GENERATE <name of JPub-generated class>

または、次のコマンドライン構文を使用できます。

-sql=<type name>:<subclass name>:<name of JPub-generated class>

リリース9.2のJPubでは、このサブクラスの初期バージョンが生成されます。したがって、必要な作業は生成されたファイルの編集のみとなります。 この機能の詳細は、使用しているJPubのドキュメントを参照してください。
 

質問: java.sql.SqlDataインタフェースを実装するクラスをJPubで生成できますか。

生成できます。 JPub、Oracle JDBCドライバおよびOracle SQLJは、ユーザーが選択したoracle.sql.ORADataインタフェースまたはjava.sql.SqlDataインタフェースをサポートします。 デフォルトでは、JPubによってoracle.sql.ORADataインタフェースが生成されます。 java.sql.SqlDataは、次のように指定して要求します。

-usertypes=oracle

さらに、Oracle8i JDBCドライバとの下位互換性のために、JPubではoracle.sql.CustomDatumインタフェースも生成できます。 このインタフェースは、次の設定を使用して取得します。

-compatible=CustomDatum

質問: -propsファイル内のオプションは、そのオプションをコマンドラインで再指定することでオーバーライドできますか。

はい。コマンドラインで-propsオプションの後にそのオプションを指定することでオーバーライドできます。 オプションは、コマンドラインの順序に従って左から右へ処理されます。 -propsファイル内のオプションは、コマンドラインに-propsオプションが指定されている場合に処理されます。

質問: JPubで変換するオブジェクト型またはパッケージを指定しないでjpub -user=scott/tigerを設定しましたが、JPubに問題はありませんでした。 どのように処理されましたか。

オプション-input、-sqlおよび-typesのいずれも指定されていない場合は、ユーザーのスキーマにあるすべての型とパッケージが変換されます。

質問: どのような場合にJPubの-encodingオプションを指定する必要がありますか。

一般的には、Javaコンパイラの起動時に-encodingオプションを指定しない場合は、JPublisherの起動時に-encodingオプションを指定する必要はありません。 -encodingが指定されていない場合は、システム・プロパティのfile.encodingの値が使用されます。

-encodingオプションは、JPubで生成された入力ファイルおよびJPubで生成された.sqljファイルと.javaファイルに使用する文字エンコーディングを指定します。 -encodingの設定は、コマンドラインまたは-propsファイルの読取り方法には影響を与えません。

質問: JPubによるオブジェクト型へのJavaへの変換方法はよいのですが、オブジェクト型をCプログラムにも使用する予定です。 使用できる方法はありますか。

オブジェクト型をCに変換するには、別のOracleユーティリティであるObject Type Translator(OTT)を使用します。

JPubの新機能

JPubのリリース10.1.0.0.0から10.1.0.2.0の間に、次の変更が追加されました。

-proxywsdlオプションを使用すると、JPublisherでは、Webサービス・クライアントおよび対応するPL/SQLコール仕様を生成して、データベースにロードできます。これによって、ユーザーは、データベースWebサービスをデータベースから起動できます。 この機能は、Webサービス・コールアウトとも呼ばれます。

-omit-schema-namesオプションを設定すると、JPublisherは、SQLオブジェクト型に対して追加メソッドの__setSchemaName(String)を生成します。 この追加メソッドの目的は、SQLオブジェクト型が配置されているスキーマを実行時に指定できるようにすることです。
 
以前のJPublisherのリリースでは、-numbertypes=jdbcを指定すると、SMALLINT型はshortにマッピングされていました。 SMALLINTは、データベース内で32バイナリ・ビットを占めますが、Javaのshort型は16ビットです。 今回のリリースから、SMALLINTはJavaのint型にマッピングされます。 下位互換性のために、JPublisherには、-compatible=9iオプションが用意されています。 この設定と-numbertypes=jdbcを指定すると、JPublisherは、以前のようにデフォルトでSMALLINTをshortにマッピングします。

-methodsオプションでは、overloadおよびuniqueの2つの追加設定をサポートしています。 overload設定は、生成されたJavaプログラム内のメソッド名をオーバーロードできることを示します。たとえば、int foo(int)およびint foo(String)があります。 unique設定は、生成されたすべてのJavaメソッドに一意の名前が指定されることを意味します。たとえば、int foo(int)およびint fooiS(String)があります。

-plsqlfileオプションは、PL/SQLストアド・プロシージャの公開時に生成されるPL/SQLラッパー・ファイルを指定します。 この-plsqlfileで2番目の引数を取ることができるようになりました。たとえば、次のように、生成されたPL/SQLラッパーを削除するためのSQLスクリプト・ファイルを保持するファイルを指定できます。

  -plsqlfile=my_wrapper.sql,my_dropper.sql

JPublisherでは、複数の-styleオプションをサポートするようになりました。 同じソース型に2つのマッピングが定義されている場合、そのマッピングは後で実行されます。

JPubisherは、データベースWebサービスに対してwebservices9およびwebservice10という2つの事前定義の-styleテンプレートを提供します。 -style=webservices9を設定すると、JPublisherは10g(9.0.4)以前のOracle Webservicesと互換性があるコードを生成します。 -style=webservices10を設定すると、JPublisherは、Oracle Webservices 10g(10.0)と互換性があるコードを生成します。

以前のJPublisherは、環境変数CLASSPATHを認識しませんでした。 今回のリリースから、JPublisherは、環境変数CLASSPATHを取得します。

SQLJトランスレータは、将来のリリースではサポートされなくなる可能性があります。 次のJPublisherの変更は、将来SQLJがサポートされないことによる影響を最小化するためのものです。

以前のリリースのJPublisherは、.javaコードと.sqljコードを生成していました。 今回のリリースから、JPublisherは.sqljコードを生成しません。 かわりに、JPublisherは、生成した.javaコードからコンパイルした.javaコードおよび.classファイルを生成します。 今回のリリースでは、.sqljプログラムが実際に生成、変換および削除されることに注意してください。

-compatible=sqljを設定すると、JPublisherは、以前のリリースのように.sqljを生成し、生成された.sqljプログラムを変換しません。 -compatibleを8iまたは9iに設定すると、JPublisherは、JPublisher 8iリリースまたは9iリリースの動作も保持します。これによって.sqljプログラムの生成が可能となります。

-compile=falseを設定すると、JPublisherは、生成された.javaプログラムを.classファイルにコンパイルしません。 デフォルトの設定は-compile=trueです。

JPublisherは、-classpath設定を受け入れるようになりました。この設定は、生成されたJavaプログラムのコンパイルに使用するクラスパスを指定します。

JPublisherは、新しいオプション-compiler-executableをサポートしています。このオプションは、生成されたJavaプログラムのコンパイルに使用するコンパイル実行可能ファイルを指定します。

-sqljを指定すると、JPublisherは、その-sqlj設定の後に続くすべてのオプションをSQLJオプションとして使用して、生成された.sqljプログラムを.javaプログラムに変換します。

JPublisherコマンドラインの最後には、JPublisherで生成されたコードとともに変換してコンパイルする.sqljプログラムまたは.javaプログラムを指定できます。 次に例を示します。

  jpub -u scott/tiger -s foo bar.java
 

JPubのリリース9.2.3.0.0から10.1.0.0.0の間に、次の変更が追加されました。

JPublisherでは、-sqlstatementオプションを介して、SQL問合せとDML文を公開できます。 SQL問合せとDMLは、生成されたJavaクラス内のメソッドとして公開できます。

サーバー(データベース)内にJavaクラスがある場合、-javaオプションを使用すると、JPublisherでは対応するクライアント側のクラスを生成できます。このクライアント側のクラスは、そのJavaクラス内の静的なメソッドを起動します。

-proxyclassesオプションを使用すると、JPublisherで、JavaクラスのPL/SQLプロキシを作成できます。 -proxyclasses機能の一般的な使用例には、データベースから開始するWebサービス・コールアウトがあります。

-styleオプションを使用すると、JPublisherでは、生成されたユーザー・サブクラス内の他の型に引数をマッピングできます。 たとえば、JPublisherでは、戻されたReultSetを、Java Beansの配列、XML文書またはWebRowSetにマッピングできます。

-filtermodesオプションと-filtertypeオプションを使用すると、JPublisherでは、特定のPL/SQLメソッドの公開を禁止できます。 特定メソッドの公開または公開禁止の指定をサポートするように、-sqlオプションが機能拡張されました。

-generatebeanオプションを使用すると、JPublisherでは、SQL型用に生成されたJavaクラスがJava Beansであることを確認できます。

JPubのリリース9.0.2.1.0から9.2.3.0.0の間に、次の変更が追加されました。

JPublisherでは、クラスとともにインタフェースを生成できるようになりました。 たとえば、jpub -sql=<sqlType>:<javaClass>#<javaInterface>:<myClass>コマンドは、SQL型(<sqlType>)に対して、Javaクラス(<javaClass>)、Javaインタフェース(<javaInterface>)およびユーザーJavaクラス(<myClass>)を生成します。この<javaInterface>によって、<javaClass>のインタフェースが定義されます。 生成されたインタフェースには、生成されたクラス内のパブリック・メソッドが含まれます。通常、これらのクラスは、アクセッサ・メソッドです。

JPublisher 9.2では、個別のファンクションまたは選択したトップレベルのファンクションを公開できます。 JPublisher 9.2.3では、ファンクションの選択が次のように一般化されました。

- ファンクションとプロシージャは、すべてのPL/SQLパッケージから選択できます。
- ファンクション名は、ワイルドカード文字の%(パーセント記号)で終了できます。 この場合、ファンクション名は、同じ接頭辞で始まるファンクションと一致します。
- ファンクションまたはプロシージャのSQL引数シグネチャを選択基準として指定できます。

JPubのリリース9.0.1.0.0から9.2.0.1.0の間に、次の変更が追加されました。

JPublisherは、Oracle JDBCドライバで使用できるすべての型を実質的にサポートするようになりました。 さらに、JPublisherは、PL/SQL変換のサポートを介して、ストアド・プロシージャおよびオブジェクト・メソッドのシグネチャ内でのPL/SQL型の使用を容易にします。

次のOracle JDBCの型が直接サポートされるようになりました。

- NCHAR型

- TIMESTAMP型

- SQLJオブジェクト型

- SQLのOPAQUE型、具体的にはoracle.xdb.XMLTypesを介したSYS.XMLTYPE。
SQLのOPAQUE型は、事前定義の型の対応関係を介してサポートするか、JPublisherのコード生成をトリガーできます。

ネイティブのPL/SQL型は、JPublisherのコードで簡単にアクセスできるようになりました。このアクセスには、PL/SQLラッパー・ファンクションとプロシージャの自動生成機能および次のメカニズムが使用されます。

- PL/SQLのBOOLEANとJavaのbooleanの間やINTERVALとStringの間などの事前定義の型変換。

- PL/SQLの索引付き表とJDBC-OCIドライバを併用するためのユーザー定義のマッピング。

- PL/SQLのRECORD型とレコードの表をSQLのオブジェクト型、コレクション型およびJavaにマッピングするためのユーザー定義の変換ファンクション。

- JPublisherで生成されるコードの機能性と柔軟性が改善され、プログラミングが容易になりました。

- JPubは、SQLオブジェクト型に対して属性ベースのコンストラクタを生成します。

- 生成されたクラスに用意された新しいAPIは、強い型指定の参照間で変換を行い、複数オブジェクト間で接続情報を転送します。

- SQLオブジェクト型に対して生成されたJavaラッパーは、シリアライズ可能にできます(-serializableは新しいオプションです)。

- JPubでは、オブジェクト値をレポートするtoString()メソッドを作成できます(-tostringは新しいオプションです)。

- JPubで生成されたクラスのユーザー・サブクラス化を要求すると、ユーザー・クラスの初期バージョンが自動的に生成されます。

- 継承階層は、ユーザー・アプリケーションによる初期化が不要になりました。

- 生成されたファイルが不必要に上書きされることがなくなり、Makeファイル環境との相互作用が改善されました。

- JPublisherプロパティ・ファイルの構文が拡張され、複数行オプションの設定およびSQLスクリプトへのJPubディレクティブの埋込みが可能となりました。

- JPublisherでは、個別のファンクションまたは選択したトップレベルのファンクションを公開できます。
 

JPubのリリース8.1.7.0.0から9.0.1.0.0の間に、次の変更が追加されました。

- JPublisherでは、オブジェクト型にメソッドが含まれている場合のみSQLJコードを生成します。 それ以外の場合は、デフォルトでJavaコードが生成されます(オプション設定の-methods=alwaysを使用していない場合)。

- JPubで生成されたコードは、JPublisher実装の詳細から分離されました。 以前はアクセス可能であった_structフィールドと_ctxフィールドのかわりに、次の保護メソッドが提供されています。
getConnection() - JDBC接続を取得します。
getConnnectionContext() - SQLJコンテキストを取得します。
create(Object,Datum,int) - ファクトリ・インタフェースに対してスーパークラス提供の実装を再利用するためのメソッドです。
setFrom(Object)、setValueFrom(Object) - 他のオブジェクトの内部状態を転送します。

JPublisherリリース8.1.7のユーザー作成クラスは、これらのメソッドを使用するために再作成する必要があります。 かわりに、下位互換性の設定-compatible=8iを使用することもできます。

- JPublisherは、内部コンテキスト・クラス_Ctxを作成して使用するかわりに、SQLJ接続コンテキストの型sqlj.runtime.ref.DefaultContextをデフォルトで使用するようになりました。 この動作は、-contextコマンドライン・オプションを使用して調整できます。

- JPubllisherは、すべてのラッパー・クラスをデフォルトで現行ディレクトリに生成します。 以前のラッパー・クラスは現行ディレクトリの下のパッケージ階層に生成されていました。 この生成方法を使用するには、-dir=設定を明示的に指定する必要があります。

- JPublisherは、継承関係があるSQLオブジェクト型を類似したJavaクラス階層に変換します。 さらに、JPublisherは、初期化コードを生成して、この階層を反映した型マッピングも作成します。 ユーザーはリーフ型のインスタンスを作成するのみで、この初期化の実行を確認できます。

- -usertypes=oracleを設定すると、JPublisherは、oracle.sql.ORADataインタフェースを実装するJavaクラスを生成します。新しいコマンドライン・オプション-compatible=CustomDatumを使用すると、下位互換インタフェースoracle.sql.CustomDatum用のクラスを生成できます。

- 新しいJPublisherのオプション-accessを使用すると、JPublisherで生成されたメソッドのアクセス修飾子を制御できます。また、新しいオプション-contextを使用すると、SQLJ接続コンテキスト(デフォルトではsqlj.runtime.ref.DefaultContext)に使用するクラスを制御し、さらに、個別のJavaラッパー・クラスで、独自のSQLJコンテキスト型を個別に宣言するかどうかも制御できます。

- JPublisherでは、ユーザー名SYSまたはINTERNALを使用して、DBA認証でデータベースに接続できるようになりました。

JPubのリリース8.1.6.0.0から8.1.7.0.0の間に、次の変更が追加されました。

- 次のフィールドは、SQLオブジェクト型に対してJPubで生成されたコード内で保護されるようになりました。 これによって、JPubで生成されたクラスのユーザー作成サブクラスに、次の機能が追加されました。
- _ctx - SQLJ接続コンテキスト・オブジェクト
- _struct - 元のSQL形式によるデータを持つ可変のSTRUCTオブジェクト

- Javaキーワードのnullは、属性またはメソッドをマッピングするためのJava名として使用した場合は、特別重要な意味を持ちます。
- SQLメソッドがnullにマッピングされると、すべてのメソッドが生成されなくなります。
- SQL属性がnullにマッピングされると、getterメソッドやsetterメソッドが生成されなくなります。

JPubで修正された不具合

JPublisherリリース10.1.0.2.0では、次の問題が解決されました。

Oracle Bug#3157214 特定のプラットフォームのPL/SQL表に含まれるPL/SQLストアド・プロシージャを公開すると、JPublisherで「空の結果セットです。」エラーがスローされ、コンパイルされないコードが生成される場合があります。

JPublisherリリース10.1.0.0.0では、次の問題が解決されました。

Oracle Bug#1757898 Oracle9i リリース1(9.0.1)では、公開済のSQLオブジェクトまたはパッケージにメソッドが含まれていない場合に-methods=trueオプションを指定すると、SQLJ変換時に「メソッドが見つかりません」エラーが発生します。

JPublisherリリース9.2.0では、次の問題が解決されました。

Oracle Bug#2116164 トップレベルのプロシージャとファンクションの公開時に、JPublisherでNullPointerExceptionがスローされることがありました。

Oracle Bug#1757898 JPublisherを使用して、一部のクラスのみにメソッドの定義が追加されたSQLオブジェクト型の階層に対してJavaコードを生成すると、-methods=falseオプションが指定されていないかぎり、すべてのクラスが.sqljファイルに生成されるようになりました。 これによって、生成されたファイル相互の互換性が保証されます。

N/A JPubでは、JDBC 9.2またはSQLJ(あるいはその両方)でもサポートされている次のSQL引数型がサポートされます。
- OPAQUE型
- SQLJオブジェクト型
- TIMESTAMP型
- NCHAR
- NCLOB
- NVARCHAR2

N/A JPubでは、次のPL/SQL引数型を自動的に、またはPL/SQL型と対応するSQL型との間のユーザー指定の型変換を介してサポートできます。
- BOOLEAN
- RECORD型
- 索引付き表
 

JPublisherリリース9.0.1.0.0では、次の問題が解決されました。

Oracle Bug#1691446 8.1.7のJPublisherでは、SQLJ接続コンテキスト・インスタンスが暗黙的に作成されました。 8.1.7のSQLJ Runtimeでは、これらのインスタンスがアタッチされたオブジェクトがガベージ・コレクションの対象になった場合に、そのインスタンスを適切に解放できませんでした。 9.0.1では、次の4つのオプションによってこの不具合を修正できます。
- JDK 1.2とSQLJ runtime12.jarを使用する。
- SQLJ Translatorのオプション-codegen=oracleを使用する。
- オブジェクトに対してsetConnectionContext()を明示的に発行する。
- オブジェクトが有効範囲外になる前にrelease()を明示的に発行する。

Oracle Bug#1534649 JPubでは、パッケージ本体が存在しない場合は、PL/SQLパッケージに対するコードが生成されませんでした。 この状態は、たとえば、パッケージ・ヘッダーが実装より前に作成され、このパッケージの.sqljラッパー・クラスを生成するためにJPublisherが実行された場合に発生します。

Oracle Bug#1497108 ネストしたオブジェクトの属性に対する変更がJPub Runtimeで正しく認識されませんでした。 この結果、属性が変更されたオブジェクトがデータベースに再度書き込まれると、更新内容が失われました。
 

Oracle Bug#1418893 単一のプロシージャまたはファンクションに対してJPubを実行すると、_ctxに対する宣言の追加に失敗するため、生成されたSQLJファイルがコンパイルされませんでした。

Oracle Bug#1364448 入力ファイルの最終行がLFまたはCR/LFで終了していない場合は、最終行がJPubで読み込まれませんでした。

JPubの既知の不具合と制限事項

Oracle Bug#2395122 リリース8.1.7のデータベースでパッケージを公開すると、パッケージ内のinteger型は、-numbertypesの設定に関係なく、常にjava.math.BigDecimalにマッピングされます。 -numbertypesをjdbcに設定した場合、integerはJavaプリミティブ型intにマッピングされる必要があります。

Oracle Bug#2144086 JPublisherで次の警告メッセージが表示される場合があります。

Warning: Cannot determine what kind of type is XXXX. YYYY. 
You likely need to install SYS.SQLJUTL. The database returns:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'SYS.SQLJUTL' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

このメッセージが表示された場合は、Javaに対応していないOracle 9.2データベースに対してJPublisherを実行しています。 通常、SQL OPAQUE型またはSQLJオブジェクト型を使用する必要がないかぎり、このメッセージは無視できます。

このメッセージは、SQLJUTLパッケージをSYSスキーマにインストールすることで回避できます。 このパッケージは、次のSQLスクリプト・ファイルに定義されています。

[Oracleホーム]/sqlj/lib/sqljutl.sql

N/A JPublisherでは次の構文を受け入れません。
jpub -u scott/tiger -s TOPLEVEL:TopLevel
かわりに、次の構文を使用してください。
jpub -u scott/tiger -s TopLevel

N/A JPublisherで生成される、強い型指定のREFのインスタンスを表すJavaコードによって、空のコンストラクタを使用したJava参照を作成できます。 ただし、このようなインスタンスに対してgetValue()またはsetValue()をコールすると、NullPointerExceptionが発生します。 Java参照インスタンスは、常にデータベースから(つまり、データベース・オブジェクトの属性として)取得する必要があります。

Oracle Bug#1851361 JPublisherリリース8.1.7をリリース8.1.6データベースに対して実行すると、「列名が無効です。」エラーが発生して失敗する場合があります。 この場合は、データベースのメタデータを検索する際の下位互換性がJPublisherにありません。 回避策として、次のいずれかを実行できます。
(1)使用しているデータベースに付属しているJPublisherのバージョンを使用する。
(2)Oracleリリース9.0.1以上のJPublisherを使用する。 通常は、これによって、Oracle 8iデータベースに対する下位互換性が提供されます。

JPubでは、すべてではありませんが、-inputファイルのほとんどのエラーをユーザーにレポートします。 -inputファイルの少数のエラーはレポートされません。 レポートされないエラーは次のとおりです。

* 2つの異なるオブジェクト型に対して同じJavaクラス名を要求すると、2番目のクラスによって最初のクラスが暗黙的に上書きされます。 たとえば、-inputファイルに次の内容が含まれているとします。

type PERSON1 as person
TYPE PERSON2 as person

この場合は、PERSON1型用にファイルperson.javaが作成された後、PERSON2型用に上書きされます。

* 2つの異なるオブジェクト属性に対して同じ属性名を要求すると、警告メッセージを発行せずに、両方の属性に対してgetおよびsetメソッドが生成されます。 生成されたクラスがJavaで有効かどうかは、同じ名前の2つのgetメソッドとsetメソッドに、オーバーロードできる異なる引数型があるかどうかによります。
 

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

たとえば、-inputファイルに次の内容が含まれているとします。

type PERSON translate X as attr1

XがPERSONの属性でない場合、

警告メッセージは発行されません。