この章では、JPublisher使用時のその他の機能と考慮事項について説明します。
以降の各項では、JPublisherの主なWebサービス機能について説明します。ほとんどの機能は、データベースへのWebサービスのコールインに関連しており、Webサービス・クライアントからSQL、PL/SQLおよびサーバー・サイドJavaクラスへのアクセスを可能にするJPublisher機能が含まれます。また、データベースからのWebサービスのコールアウトをサポートするための機能およびオプションもあります。
関連項目:
|
次のJPublisher機能により、Oracle Databaseで実行中のコードに対するWebサービスのコールインがサポートされます。生成されたJavaクラスは、Java EEコンテナを使用してOracle Application Serverにデプロイできます。たとえば、PL/SQLパッケージを表すJavaクラスは、PL/SQL Webサービスとしてデプロイできます。
Javaインタフェースの生成
-sql
オプションの拡張機能を使用すると、JPublisherでJavaインタフェースを生成できます。この機能により、Webサービス定義言語(WSDL)の内容の生成に使用するApplication Program Interface(API)を表すJavaインタフェースを手動で生成する必要がなくなります。Oracle Database 10gより前のJPublisherでは、クラスは生成できましたがインタフェースは生成できませんでした。
JPublisherのスタイルおよびスタイル・ファイル
スタイル・ファイルおよび関連の-style
オプションを使用すると、Java間の型マッピングにより生成されるクラスをWebサービスで確実に使用できます。特に、OracleにはWebサービスのサポート用に次のスタイル・ファイルが用意されています。
/oracle/jpub/mesg/webservices-common.properties /oracle/jpub/mesg/webservices10.properties /oracle/jpub/mesg/webservices9.properties
REF CURSOR
の戻りと結果セットのマッピング
java.sql.ResultSet
型は、Webサービスではサポートされません。これは、REF CURSOR
型を戻すストアド・プロシージャとファンクションに影響します。JPublisherでは、Webサービスで問合せ結果を使用可能にする代替マッピングがサポートされます。
JPublisherの公開内容に対するフィルタ・オプション
特にJPublisherで生成されたコードをWebサービスとして確実に公開できるように、JPublisher出力を指定またはフィルタリングするための機能が複数存在します。-sql
オプションの拡張機能を使用すると、ストアド・プロシージャの特定のサブセットを公開できます。-filtertypes
および-filtermodes
オプションを使用すると、パラメータまたは戻り値のモードまたは型に基づいてストアド・プロシージャを公開できます。-generatebean
オプションを使用すると、生成されるメソッドがJavaBeans仕様を満たすように指定できます。
データベース内のJavaクラスのコールのサポート
JPublisherでは、JPublisherの-java
オプションを介して生成されたクライアント・サイドJavaスタブからサーバー・サイドJavaコードを直接コールする場合に、ネイティブJavaインタフェースが使用されます。Oracle Database 10gより前のバージョンでは、PL/SQLラッパーを手動で作成して使用しなければ、サーバー・サイドJavaコードをコールできませんでした。このPL/SQLラッパーはコール仕様とも呼ばれていました。Oracle Database 10gリリース2(10.2)以降では、JavaクラスのWebサービス・コールインが、ダイナミック・コール・モードとPL/SQLラッパー・モードの2つのモードでサポートされています。
SQL問合せまたはDML文の公開に対するサポート
JPublisherには、特定のSELECT
、UPDATE
、INSERT
またはDELETE
文を、Webサービスとして公開可能なJavaクラスでメソッドとして公開できるように、-sqlstatement
オプションが用意されています。
一意のメソッド名のサポート
Webサービスの要件を満たすために、JPublisherに対して、オーバーロードされたメソッドを禁止し、かわりに一意のメソッド名を常に使用するように指示できます。
JPublisherでは、Oracle DatabaseからのWebサービスのコールアウトがサポートされます。Webサービス・クライアント・コードはSQL、PL/SQLまたはJavaで記述され、データベース上で動作して他の場所にあるWebサービスを起動します。このサポートは、-proxywsdl
および-httpproxy
オプションを介して提供されます。また、-proxyopts
および-proxyclasses
オプションが関係する場合もありますが、通常はWebサービス用に特別な設定は必要ありません。
ここでは、主要オプションを要約して説明します。
-proxywsdl=
URL
このオプションを使用するのは、指定のURLのWSDLドキュメントを指定して、Webサービスのクライアント・プロキシ・クラスを生成する場合です。また、このオプションを設定すると、インスタンス・メソッドを静的メソッドとして公開するための追加ラッパー・クラス、およびPL/SQLラッパーも生成されます。
-httpproxy=
proxy_URL
ここで、WSDLドキュメントはファイアウォール経由でアクセスされます。このオプションを使用して、WSDLドキュメントのURLの解決に使用するプロキシURLを指定します。
Oracle JPublisherのコマンドライン・オプション-proxywsdl
を使用して、WebサービスのWSDLファイルからデータベース・サイドのJavaおよびPL/SQLラッパーを生成できます。JPublisherでWebサービス・クライアントのラッパーを生成してデータベースにロードするには、CLASSPATHにdbwsa.jar
ファイル、データベース内部にdbwsclient.jar
ファイルがそれぞれ存在する必要があります。
次の手順では、Oracle JPublisherでサポートされるWebサービスのコールアウト用の環境とデータベースを設定します。この手順を実行する必要があるのは1回のみです。
ご使用のシステムにOracle JPublisher 11gリリース2(11.2)がない場合は、ダウンロードしてインストールしてください。Oracle JPublisherは、Oracle SQLJをインストールする際にその一部としてインストールされます。Database Client CDからOracle SQLJをインストールするか、次のWebサイトでDatabase Clientをダウンロードしてください。
http://www.oracle.com/technology/software/products/database/index.html
dbwsa.jar
を、ORACLE_HOME\sqlj\lib
ディレクトリ(Microsoft Windowsの場合)またはORACLE_HOME/sqlj/lib
ディレクトリ(Solarisの場合)に追加します。
適切なJDKをJava VMおよびJavaコンパイラとして設定します。
JDKのバージョンは、ターゲット・データベースのJava VMと同じにする必要があります。
Oracle Database 11gの場合はJDK 1.5およびJDK 1.6を使用します。
Oracle Database 10g(リリース10.1または10.2)の場合はJDK 1.4を使用します。
Oracle Database 9.2の場合はJDK 1.3を使用します。
CLASSPATH環境変数にdbwsa.jar
ファイルを追加します。
SYS
スキーマ、またはWebサービス・クライアントを起動するスキーマにdbwsclient.jar
ファイルをロードします。
たとえば、次のloadjava
コマンドは、SYS
スキーマにdbwsclient.jar
ファイルをロードします。
%loadjava -u sys -r -v -f -s -grant public -noverify -genmissing dbwsclient.jar
Password: password
次のloadjava
コマンドは、指定のスキーマにdbwsclient.jar
ファイルをロードする方法を示しています。
% loadjava -u scott -r -v -f -noverify -genmissing dbwsclient.jar
Password: password
例
次の例は、Webサービス・クライアントのJavaおよびPL/SQLラッパーを生成してからSQL文を使用してWebサービス・クライアントを起動する方法を示しています。この例は、次のような一般的な手順で実行されます。
起動するWebサービスを特定します。
適切なオプションを指定してOracle JPublisherをコールし、クライアント・プロキシ、PL/SQLおよびJavaラッパーを生成した後、データベースにロードします。
これを実行するOracle JPublisherのコマンドには、必要な-proxywsdl
オプションと-user
オプションが含まれます。このコマンドには、-endpoint
、-httpproxy
、-sysuser
、-dir
および-proxyopts
の各オプションもオプションで含まれています。たとえば、次のようにします。
% jpub -user=username -sysuser=sysuser_name/sysuser_password -proxywsdl=WSDL_URL -endpoint=Web_services_endpoint
Webサービスはhttp://localhost:8888/javacallout/javacallout
で以前にデプロイされていることが前提です。
次のコマンドは、Webサービス・クライアントとそのJavaおよびPL/SQLラッパーをサブディレクトリtmp
に作成し、そのラッパーをデータベースにロードします。
% jpub -user scott -sysuser sys/sys_password -proxywsdl=sample/javacallout.wsdl -endpoint=http://localhost:8888/javacallout/javacallout -dir=tmp Enter scott password: password
このコマンドにより、次の出力が生成されます。
tmp/HelloServiceEJBJPub.java tmp/plsql_wrapper.sql tmp/plsql_dropper.sql tmp/plsql_grant.sql tmp/plsql_revoke.sql Executing tmp/plsql_dropper.sql Executing tmp/plsql_wrapper.sql Executing tmp/plsql_grant.sql Loading tmp/plsql_proxy.jar
データベース内部からWebサービスを起動します。
tmp/plsql_wrapper.sql
で提供されるPL/SQLファンクションを起動できます。各PL/SQLファンクションは、Webサービスの操作に対応します。たとえば、Webサービスが次のエンドポイントで使用できるとします。
http://localhost:8888/javacallout/javacallout
この場合、次のSQLコマンドを発行できます。
SQL> select jpub_plsql_wrapper.sayhello('hello') from dual;
このコマンドにより、次の出力が戻されます。
JPUB_PLSQL_WRAPPER.SAYHELLO('HELLO') ----------------------------------- HELLO!! You just said :hello
Oracle JPublisherのコールアウトのサポートについては、『Oracle Database JPublisherユーザーズ・ガイド』のダイナミック・コール・インタフェースおよびSYS.UTL_DBWS
ユーティリティを使用したWebサービスのコールアウトに関する項を参照してください。これは、次のWebサイトから入手できます。
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
サーバー・サイドJavaのコールイン機能により、JPublisherでデータベース内のJavaクラスをクライアント・サイド・コール用に公開できます。JPublisherでは、サーバー・サイドJavaをコールするJavaクライアントが生成されます。
Oracle Database 10g リリース1(10.1)では、サーバー・サイド・コールイン用のJPublisherオプションは-java
です。JPublisherは、JPublisherランタイムに提供されているダイナミック・コール・インタフェースoracle.jpub.runtime.Client
を使用するJavaクライアントを生成してoracle.jpub.runtime.Server
サーバー・サイド・クラスをコールし、これが必要なJavaストアド・プロシージャをコールします。Client
およびServer
インタフェースはJPublisherランタイムの一部です。シリアライズ可能なパラメータと戻り型を持つ静的メソッドのみがサポートされます。Oracle Database 10g リリース1(10.1)以降、oracle.jpub.runtime.Server
はデータベース内にあります。
Oracle Database 10gリリース2 (10.2)では、サーバー・サイド・コールインの場合、JPublisherがストアド・プロシージャ用のPL/SQLラッパーと、このPL/SQLラッパーをコールするJavaクライアントを生成します。静的メソッドとインスタンス・メソッドの両方がサポートされます。サポートされるパラメータおよび戻り型は、プリミティブ型、JavaBeans型、シリアライズ可能オブジェクト型およびOracle Java Database Connectivity (JDBC)型で、通常はoracle.sql
というパッケージ名が付いたものです。
Oracle Database 10g リリース2(10.2)では-java
オプションが非推奨で、サーバー・サイド・コールイン用のJPublisherオプションは-dbjava
です。ただし、-java
オプションは下位互換性のためにまだサポートされています。-compatible
オプションを10.1
に設定すると、-dbjava
は-java
と同様に機能します。
JPublisherには、JPublisher出力をフィルタ処理するためのオプションがいくつか用意されています。たとえば、パッケージからストアド・プロシージャのサブセットのみの公開、生成されたコードのパラメータ・モードまたはパラメータ型に従ったフィルタリング、生成されるクラスがJavaBeans仕様に従うことの保証などがあります。
この項の内容は、次のとおりです。
-sql
オプションの拡張機能を使用すると、パッケージまたはSQLのトップレベルから、ストアド・ファンクションまたはストアド・プロシージャのサブセットのみを公開できます。
次の構文では、パッケージのストアド・プロシージャがすべて公開されることを思い出してください。
-sql=plsql_package
パッケージのストアド・プロシージャのサブセットのみを公開するには、次の構文を使用します。
-sql=plsql_package(proc1+proc2+proc3+...)
また、ストアド・プロシージャ名および引数の型に従ってサブセットを指定することもできます。proc1
のみを指定するかわりに、次のように指定できます。
proc1(sqltype1, sqltype2, ...)
特にWebサービス用のコード生成の場合、メソッドのシグネチャまたは属性では、コードの使用目的について一部のパラメータ・モードまたは型がサポートされない場合があります。生成されるコードを必要に応じてパラメータのモードまたは型、あるいはその両方に従ってフィルタ処理できるように、-filtermodes
および-filtertypes
オプションが導入されています。
各オプションの設定で、デフォルトですべての可能性を含める、つまりフィルタリングが行われないようにするには先頭に1を指定します。その後に、除外する特定のモードまたは型を後にマイナス記号(-
)を付けて指定します。たとえば、次のようにします。
-filtertypes=1,.ORADATA-,.ORACLESQL- -filtermodes=1,out-,inout-
また、すべてをフィルタ処理するには、かわりに0を指定できます。次に、許可する特定のモードまたは型の後ろにプラス記号(+
)を付けて指定します。たとえば、次のようにします。
-filtertypes=0,.CURSOR+,.INDEXBY+ -filtermodes=0,in+,return+
この項では、下位互換性、Java Development Kit(JDK)のバージョン間の互換性、Oracle8i、Oracle9i、Oracle Database 10gおよびOracle Database 11gの各リリース間でのJPublisherユーティリティの移行の問題について説明します。
Oracle9iでは、デフォルトのオプション設定および生成されるコードの一部の機能が変更されています。JPublisherのOracle8i実装を使用してアプリケーションを作成した場合、Oracle Database 10g(またはOracle9i)ではJPublisherを再実行できなくなり、生成されたクラスを引き続きアプリケーションで動作させることができなくなる可能性があります。また、Oracle9iとOracle Database 10gの間でも、わずかですがJPublisherの機能が変更されています。主な違いは、デフォルトで.sqlj
ファイルが参照可能な状態に生成されなくなったことですが、この動作はJPublisher設定を介して変更できます。
この項の内容は、次のとおりです。
JPublisherランタイムは、ojdbc14.jar
、ojdbc5.8.jar
またはojdbc6*.jar
ライブラリにJDBCとともにパッケージされています。以前のバージョンのJPublisherで生成されたコードの互換性は、次のとおりです。
現行リリースのJPublisherランタイムで引き続き動作します。
現行リリースのJPublisherランタイムで引き続きコンパイル可能です。
以前のリリースのJPublisherランタイムおよびOracle JDBCドライバをコード生成に使用した場合、コードは生成時と同じバージョンのJPublisherランタイムでコンパイルできます。
Oracle Database 10g リリース2(10.2)以降のJPublisherでは、PL/SQL用に生成されたJavaクラス用に次の新しいAPIが追加されています。
<init>(javax.sql.DataSource)
java.sql.DataSource
オブジェクトを引数として使用するコンストラクタ
setDataSource(javax.sql.DataSource)
java.sql.DataSource
オブジェクトを引数として使用するデータ・ソース設定用のメソッド
これらのメソッドにより、Javaラッパーは、引数として渡されるデータ・ソースからJDBC接続を取得できます。
JPublisherでは、データ・リンクと呼ばれるURLを格納するSQLのURI型の使用がサポートされます。Oracle Database 10g リリース1(10.1)のJPublisherでは、SQL URI型SYS.URITYPE
とサブタイプSYS.DBURITYPE
、SYS.XDBURITYPE
およびSYS.HTTPURITYPE
をjava.net.URL
にマップします。SQLのURI型がPL/SQLストアド・プロシージャまたはSQL文のパラメータおよび戻り型として使用される場合、このマッピングは機能します。ただし、SQLのURI型がSQLの型の属性またはSQLの配列型の要素として使用される場合は、このマッピングにより実行時にClassCastException
が発生します。
この問題に対処するため、Oracle Database 10g リリース2(10.2)では、SQLのURI型がJPublisherで生成されるORAData
サブクラスにマップされます。これはユーザー定義のSQLオブジェクト型に使用されるマッピングと似ています。また、次のように指定することでJPublisherがSQLのURI型をjava.net.URL
にマップするように強制することもできます。
-adddefaulttypemap= SYS.URITYPE:java.net.URL:VARCHAR2:SYS.URIFACTORY.GETURI:SYS.SQLJUTL.URI2VCHAR -adddefaulttypemap= SYS.DBURITYPE:java.net.URL:VARCHAR2:SYS.DBURITYPE.CREATEURI:SYS.SQLJUTL.URI2VCHAR -adddefaulttypemap= SYS.XDBURITYPE:java.net.URL:VARCHAR2:SYS.XDBURITYPE.CREATEURI:SYS.SQLJUTL.URI2VCHAR -adddefaulttypemap= SYS.HTTPURITYPE:java.net.URL:VARCHAR2:SYS.HTTPURITYPE.CREATEURI:SYS.SQLJUTL.URI2VCHAR
これにはデータ変換ファンクションの指定が含まれます。
Oracle9i DatabaseとOracle Database 10gの間で、下位互換性に関するJPublisherの動作の主な違いは、デフォルトでSQLJソース・コードが自動的に変換されるようになり、.sqlj
ソース・ファイルをユーザーが参照できなくなったことです。
また、Oracle Database 10gでは、JPublisherの動作が次のように変更されていることに注意してください。
Oracle9i DatabaseのJPublisherでは、ブール引数でオブジェクトの初期化が必要かどうかを指定し、protected
コンストラクタを使用してSQLJクラスが生成されます。たとえば、次のようにします。
protected BaseClass(boolean init) { ... }
このコンストラクタは、BOOLEAN
属性を持つSQLオブジェクト型のコンストラクタ生成と競合するため、Oracle Database 10gでは削除されています。
Oracle Database 10gでは、SMALLINT
はJavaのshort
ではなくint
にマップされます。
Oracle9i Database以降は、JPublisherの動作が次のように変更されていることに注意してください。
デフォルトでは、JPublisherは、オブジェクト型ごとにSQLJ接続コンテキストのインナー・クラス_Ctx
を宣言しません。かわりに、すべてにsqlj.runtime.ref.DefaultContext
接続コンテキスト・クラスが使用されます。
また、ユーザーが記述するコードでは、Oracle8iバージョンのJPublisherで生成されたコードに宣言されていた_ctx
接続コンテキスト・フィールドを使用するかわりに、getConnectionContext()
メソッドをコールして接続コンテキスト・インスタンスを取得する必要があります。
-methods=true
に設定しても、基礎となるSQLオブジェクト型またはPL/SQLパッケージでメソッドが定義されていない場合は、非SQLJクラスが生成されます。ただし、-methods=always
に設定した場合は、常にSQLJクラスが生成されます。
デフォルトでは、JPublisherは、非推奨のoracle.sql.CustomDatum
インタフェースではなく、oracle.sql.ORAData
インタフェースを実装するコードを生成します。
デフォルトでは、JPublisherは、生成されたコードをカレント・ディレクトリのパッケージ・ディレクトリ階層に格納するのではなく、カレント・ディレクトリに格納します。
JPublisherで生成されたクラスのユーザー作成サブクラスの変更
Oracle8iバージョンのJPublisherで生成されたクラスのユーザー作成サブクラスを提供していた場合は、JPublisherによるコード生成方法についてOracle9i Databaseで複数の関連する変更点が導入されたことに注意する必要があります。Oracle8iの機能を持つアプリケーションをOracle9i Database、Oracle Database 10gまたはOracle Database 11gで使用する場合は、そのアプリケーションに変更を加える必要があります。
注意: -compatible=8i または-compatible=both8i オプション設定を使用すると、ここで説明する変更を意識することなく、アプリケーションを従来どおりにビルドして使用できます。詳細は、「下位互換性オプション」を参照してください。
ただし、Oracle Database 11gまたはOracle Database 10gのJPublisherの機能への変換を行い、ユーザー・コードをJPublisherで生成されたクラスの実装の詳細から切り離すことをお薦めします。 |
Oracle9i Database、Oracle Database 10gまたはOracle Database 11gでコードを使用するには、次の変更が必要です。
宣言されたctx
接続コンテキスト・フィールドではなく、用意されたgetConnectionContext()
メソッドを使用します。_ctx
フィールドはサポートされなくなりました。
create()
メソッドを明示的に実装するかわりにスーパークラスのcreate()
メソッドがコールされ、戻り型としてCustomDatum
のかわりにORAData
が使用されます。
次の例では、UserClass
がBaseClass
を拡張するとします。UserClass
に次のメソッドを記述するかわりに、
public CustomDatum create(Datum d, int sqlType) throws SQLException { if (d == null) return null; UserClass o = new UserClass(); o._struct = new MutableStruct((STRUCT) d, _sqlType, _factory); o._ctx = new _Ctx(((STRUCT) d).getConnection()); return o; }
次のように指定します。
public ORAData create(Datum d, int sqlType) throws SQLException { return create(new UserClass(),d,sqlType); }
または、クラスが継承階層に含まれる場合は、次のように記述します。
protected ORAData createExact(Datum d, int sqlType) throws SQLException { return create(new UserClass(),d,sqlType); }
JPublisherには、getConnectionContext()
メソッドに加えて、オブジェクトに対応付けられたJDBC接続インスタンスの取得に使用できるgetConnection()
メソッドが用意されています。
JPublisherでは、-compatible
オプションを介して下位互換性モードの設定がサポートされます。最も基本的なレベルには、.sqlj
ファイルを明示的に生成する設定が含まれます。この動作は、デフォルトでOracle Database 11gおよびOracle Database 10gのユーザーに対して透過的です。Oracle9iおよびOracle8i互換モードも用意されており、それぞれ生成されるコード自体と参照可能な.sqlj
ファイルの作成に違いがあります。次の内容について説明します。
Oracle Database 11gでは、自動SQLJ変換を回避して直接操作できる.sqlj
ファイルがJPublisherで生成されるようにする場合、JPublisherの-compatible=sqlj
設定を使用できます。
注意: Oracle Database 11gでは、.sqlj ファイルを明示的に変換するためにSQLJ Translatorを直接起動する必要はありません。かわりにJPublisherの-sqlj オプションを使用できます。 |
JPublisherのオプション設定-compatible=9i
によりOracle9i互換モードが使用可能になります。このモードでは、Oracle9iのSQLJおよびJDBCリリースと互換性のあるコードが生成されます。さらに通常、Oracle9iのJPublisherの場合と同様に、ユーザーが参照可能な.sqlj
ファイルが生成されます。
Oracle9i互換モードのJPublisherには、次の機能があります。
SQLJクラスでは、Oracle9iの場合と同様に、オブジェクトの初期化が必要かどうかを指定するboolean
引数を持つprotected
コンストラクタが生成されます。
protected BaseClass(boolean init) { ... }
このコンストラクタはOracle Database 10g以降は削除されています。
JavaでのSMALLINT
からのマッピングは、Oracle Database 11gでのマッピングであるint
からshort
に戻ります。
JPublisherの設定-compatible=both8i
または-compatible=8i
のどちらでも、Oracle8i互換モードが使用可能になります。このモードでは、Oracle8iのSQLJおよびJDBCリリースと互換性のあるコードが生成されます。さらに通常、Oracle8iのJPublisherの場合と同様に、ユーザーが参照可能な.sqlj
ファイルが生成されます。
ただし、このモードを使用するには、少なくとも次のいずれかに該当する必要があります。
JPublisherで生成された.sqlj
ファイルの変換時に、SQLJのデフォルトの-codegen=oracle
設定を使用する場合。
JPublisherで生成されたコードが、JDK 1.5以上で実行されSQLJ runtime12.jar
ライブラリを使用するか、Oracle Database 11gリリースのサーバー・サイドOracle JVMで実行される場合。
JPublisherを、-methods=false
または-methods=none
を設定して実行する場合。
Oracle8i互換モードの次の機能に注意してください。
JPublisherでは、ORAData
インタフェースおよびORADataFactory
インタフェースのかわりに、非推奨のCustomDatum
インタフェースおよびCustomDatumFactory
インタフェースを実装するコードが生成されます。これは-compatible=customdatum
の設定時と同様です。また、-compatible=both8i
設定を選択した場合、生成されたコードはORAData
インタフェースを実装しますが、ORADataFactory
は実装しません。
-methods=true
設定を使用すると、オブジェクト型でメソッドが定義されていない場合でも、常にSQLオブジェクト型用のSQLJクラスが生成されます。これは、-methods=always
の設定時と同様です。
JPublisherでは、次のように、オブジェクトのラッパー・クラスごとに接続コンテキスト宣言と接続コンテキスト・インスタンスが生成されます。
#sql static context _Ctx; protected _Ctx _ctx;
これは、-context=generated
の設定時と同様です。
JPublisherには、標準sqlj.runtime.ConnectionContext
インタフェースを実装するクラスのインスタンスである汎用ConnectionContext
インスタンスを入力とするラッパー・クラスのコンストラクタが用意されています。Oracle Database 11gでは、このコンストラクタが受け入れるのは、DefaultContext
インスタンス、あるいはJPublisherの実行時に-context
オプションで指定されたクラスのインスタンスのみです。
JPublisherには、JPublisherオブジェクトで暗黙的に作成された接続コンテキスト・インスタンスを解放するためのAPIは用意されていません。
これに対して、Oracle Database 11gのJPublisherユーティリティには、オブジェクト用の接続コンテキスト・インスタンスを明示的に設定するためのsetConnectionContext()
メソッドと、オブジェクトについて暗黙的に作成された接続コンテキスト・インスタンスを解放するためのrelease()
メソッドが用意されています。
Oracle8i互換モードの選択が必要な場合は、-compatible=both8i
設定の使用をお薦めします。これにより、アプリケーションをOracle Application Serverなどの中間層環境で使用でき、JDBC接続はデータ・ソースを介して取得され、oracle.jdbc.Oracle
Xxxx
インタフェースを使用してラップされます。CustomDatum
実装では、このようにラップされた接続はサポートされません。
注意: -compatible=both8i 設定には、Oracle9iリリース1(9.0.1)以上のJDBCの実装が必要です。 |
JPublisherで生成されるコードで接続コンテキスト・インスタンス_ctx
を宣言する唯一の方法は、Oracle8i互換モードを使用することです。この特定のOracle8i動作を指定できる他のオプション設定はありません。_ctx
インスタンスが役立つのは、それに依存する従来型コードがあっても、それ以外はgetConnectionContext()
メソッドを通じて接続コンテキスト・インスタンスを取得する必要がある場合です。
表4-1に詳細を示した個々のオプション設定は、Oracle8i互換モードでJPublisherを使用した場合とほぼ同じ結果を生成します。
表4-1 JPublisherの下位互換性オプション
オプション設定 | 動作 |
---|---|
|
この設定では、SQLJ接続コンテキスト用のインナー・クラス |
|
この設定では、基礎となるSQLオブジェクトまたはパッケージでメソッドが定義されているかどうかに関係なく、JPublisherで生成されるすべてのクラス用に、非SQLJクラスではなくSQLJクラスが強制的に生成されます。 |
|
この設定では、Oracle固有のラッパー・クラスについて、 |
|
このオプションをピリオド( |
これらのオプションの詳細は、次の各項を参照してください。