SQLJ
3. デバッガの接続 デバッガの接続 デバッガの接続 デバッガの接続
デバッグ・エージェントがプロキシに接続するたびに、プロキシはスレッドを起動して、デ バッガからの接続を待機します。スレッドは、接続元エージェントの番号、名前およびアド レス、待機しているポート、およびポートから生成したパスワードを出力します。次にポー トとパスワードの例を示します。
Agent Number: 1 Agent Name: servername
Agent Address: eee.fff.jjj.kkk Agent Port: 2286
Agent Password: 3i65bn
このパスワードをjdb対応デバッガ(JDK 1.1.6以降)に渡すには、次のように指定します。
jdb -password 3i65bn
デバッガで最初に行う操作は、すべてのスレッドの一時停止です。一時停止しないと、ブ レーク・ポイントを設定する前に、start_debuggingコールがタイムアウトによって終了 します。
使用するコードがSystem.outまたはSystem.errに書き込みを行う場合は、jdbに対し てdbgtraceフラグを使用することによって、これらのストリームをデバッグ用コンソール にリダイレクトすることもできます。
jdb -dbgtrace -password 3i65bn
サーバー上での実行を見分ける方法 サーバー上での実行を見分ける方法 サーバー上での実行を見分ける方法 サーバー上での実行を見分ける方法
サーバーでの実行方法とクライアントでの実行方法が異なるJavaコードを作成する場合が あります。通常はこのようなJavaコードの作成をお薦めしません。 実際、JDBCとSQLJで は、サーバー側とクライアント側で使用するドライバが異なる場合でも、この問題を回避す る移植可能なコードの作成は手間がかかります。
このコードがサーバー側で実行しているかどうかを判断するには、次のように System.getPropertyメソッドを使用します。
System.getProperty ("oracle.jserver.version")
サーバー上の出力のリダイレクト
getPropertyメソッドは次のものを返します。
■ サーバーで実行している場合、Oracle8iデータベースのバージョンを表す文字列
("8.1.5"または"8.1.6")。
■ クライアント上で実行している場合はNULL。
サーバー上の出力のリダイレクト サーバー上の出力のリダイレクト サーバー上の出力のリダイレクト サーバー上の出力のリダイレクト
System.out とSystem.err の出力先は、カレント・トレース・ファイルです。 出力を
SQL*Plusテキスト・バッファにリダイレクトするには、次のように指定します。
SQL> SET SERVEROUTPUT ON
SQL> CALL dbms_java.set_output(2000);
最小(デフォルト)バッファ・サイズは2,000バイトです。最大サイズは1,000,000バイトで
す。 次の例では、バッファ・サイズを5,000バイトに増やしています。
SQL> SET SERVEROUTPUT ON SIZE 5000 SQL> CALL dbms_java.set_output(5000);
出力は、コール終了時に行われます。
SQL*Plusの詳細は、『Oracle8i SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照
してください。
サーバー上の出力のリダイレクト
4
Java のインストールと構成 のインストールと構成 のインストールと構成 のインストールと構成
この章では、Oracle8iデータベースにJServerをインストールおよび構成するための必要事 項を詳しく説明します。Javaメモリーを構成する方法は、第5章「セキュリティとパフォー マンス」の「Javaのメモリー使用量」の項を参照してください。
■ Java対応データベースの初期化
■ JServerの構成
■ Javaクライアントの使用可能化
Java対応データベースの初期化
Java 対応データベースの初期化 対応データベースの初期化 対応データベースの初期化 対応データベースの初期化
Oracle8iと一緒にJServerをインストールした場合、そのデータベースはJava対応になりま
す。つまり、Javaストアド・プロシージャ、JDBC、SQLJおよびCORBA/EJBオブジェクト をすぐに実行できます。独自のスクリプトでOracleインスタンスを作成する場合は、明示
的にJServerを初期化する必要があります。
JServerをインストールするには次の3つのうちいずれかの方法を使用します。
■ Oracle8i標準または最小セットアップ − 標準または最小Oracle8iインストールを選択す
ると、JServerが自動的にインストールされます。
■ Oracle8iカスタム・インストール −「カスタム」Oracle8iインストールからJServerオプ
ションを選択します。
■ 手動インストール − initjvm.sqlスクリプトを起動してJServerをインストールしま す。
手動インストール 手動インストール 手動インストール 手動インストール
Oracle8iインストール・オプションでJServerをインストールしていない場合には、
ORACLE_HOME/javavm/installにあるinitjvm.sqlスクリプトを使用し、既存のデー タベースにJServerを追加できます。
initjvm.sqlスクリプトは、Javaのサポートに必要なJavaクラスの初期セットをロード し、JavaおよびCORBA名前空間をサポートする表を初期化し、コール仕様によって最上位 のエントリ・ポイントを公開します。initjvm.sqlスクリプトは、サポートJavaクラスを データベースにロードします。このJavaクラスには次のものが含まれます。
■ 標準のJavaランタイム
■ バイトコード・ベリファイアおよびオプティマイザ
■ JavaコンパイラとSQLJコンパイラ
■ JDBCランタイム
■ CORBA ORBおよびEJBランタイム
■ 4-3ページの「パッケージDBMS_JAVA」で説明するDBMS_JAVAなど、その他のサポー ト・クラス。
initjvm.sqlスクリプトは次のようなアクションを実行します。
1. SYSスキーマにクラスをロードします。
2. ロードされたクラスに全ユーザーがアクセスするためのパブリック・シノニムを作成し ます。
3. 一部のクラスを変更し、定義者権限で実行してCORBAのコールアウトをサポートでき るようにします。
Java対応データベースの初期化
4. データベースの起動トリガーおよびシャットダウン・トリガーを定義します。
要件 要件 要件 要件
Java対応データベースの初期化には、50MBのSHARED_POOL_SIZE、約20MBのJAVA_
POOL_SIZE、システム表領域として追加に30MB、および十分なロールバック・セグメント が必要になります。リソース不足などの原因により、スクリプトが違反を起こした場合は、
必要に応じてリソースを調整し、initjvm.sqlを再実行します。データベース初期化ファ イルの構成パラメータ、および用件に関する最新情報は、5-26ページの「Javaのメモリー使 用量」、および/javavm/README.txtファイルを参照してください。
加えて、EJBおよびCORBAの通信を可能にするための要件もあります。初めのうちは、
Oracle8i JServerの標準インストールによる初期設定で十分です。詳細は、『Oracle8i
Enterprise JavaBeansとCORBA開発者ガイド』および『Oracle8i Net8管理者ガイド』を参
照してください。
パッケージ パッケージ パッケージ
パッケージ DBMS_JAVA
Jserverを初期化する際に、initjvm.sqlスクリプトによってPL/SQLパッケージDBMS_
JAVAが作成されます。DBMS_JAVAのエントリ・ポイントの一部は、開発者が使用するもの です。残りのエントリ・ポイントは内部的に使用されます。対応するJavaクラス
DbmsJavaは、JavaからRDBMSにアクセスするための手段を提供します。
DBMS_JAVAパッケージにより次のエントリ・ポイントが提供されます。
FUNCTION longname (shortname VARCHAR2) RETURN VARCHAR2
Javaスキーマ・オブジェクトから完全名を戻します。Javaのクラスとメソッドの名前は SQLの識別子の最大長を超えることがあるので、SQLアクセス用にAuroraでは内部的に略 称を使用します。このファンクションは、切り捨てられた名前の元のJava名を戻すだけで す。次の例は、このファンクションが無効なクラスの完全なクラス名指定を出力するもので す。
select dbms_java.longname (object_name) from user_objects where object_type = 'JAVA CLASS' and status = 'INVALID';
FUNCTION shortname (longname VARCHAR2)))) RETURN VARCHAR2
DBMS_JAVAパッケージのshortname()ルーチンを使用してデータベースに完全名を指定 できます。このルーチンは完全名を入力として取り、対応する短縮名を戻します。USER_
OBJECTSビューの問合せを通じてロードしたクラスの妥当性の検証に便利です。
注意 注意注意
注意: initjvm.sqlスクリプトの実行には約1時間かかることがあり ます。
Java対応データベースの初期化
これらのファンクションの例は、2-29ページの「クラスの短縮名」および『Oracle8i Java ス トアド・プロシージャ開発者ガイド』を参照してください。
FUNCTION get_compiler_option (what VARCHAR2, optionName VARCHAR2) PROCEDURE set_compiler_option (what VARCHAR2, optionName VARCHAR2,
value VARCHAR2)
PROCEDURE reset_compiler_option (what VARCHAR2, optionName VARCHAR2) この3つのエントリ・ポイントは、Oracle8iに同梱されているJServerオプションのJavaと SQLJコンパイラを制御します。これらのオプションの例は、2-14ページの「Javaクラスの コンパイル」を参照してください。また、『Oracle8i Java ストアド・プロシージャ開発者ガ イド』および『Oracle8i SQLJ開発者ガイドおよびリファレンス』にもオプションとこれら のエントリ・ポイントの説明があります。
PROCEDURE set_output (buffersize NUMBER)
このプロシージャはJavaストアド・プロシージャとトリガーの出力をDBMS_OUTPUTパッ ケージにリダイレクトします。例については、3-21ページの「サーバー上の出力のリダイレ クト」を参照してください。
PROCEDURE loadjava (options varchar2)
PROCEDURE loadjava (options varchar2, resolver varchar2) PROCEDURE dropjava (options varchar2)
これらのプロシージャを使用すると、コマンドライン・ツールのloadjavaまたは dropjavaではなく、コールを使用して、データベースにクラスをロードしたり、削除でき ます。Javaアプリケーションで実行するには、次のようにします。
call dbms_java.loadjava ('... options...');
call dbms_java.dropjava ('... options...');
このオプションは、loadjavaおよびdropjavaコマンドライン・ツールに指定するオプ ションと同じです。各オプションは空白で区切ります。オプションはカンマで区切らないで ください。唯一の例外は、空白を含むloadjava -resolverオプションです。 -resolver の場合、他のオプションを先に指定してから、これらのオプションをカンマで区切り、次に -resolverをその定義と共に指定してください。次のオプションは、loadjavaコマンド ライン・ツールのデータベース接続に関連するため、指定しないでください。-thin、
-oci8、-user、-password。出力はstderrに送られます。
使用可能なオプションの詳細は、A-7ページの「loadjava」を参照してください。