SQLJ
4. デバッガの接続 デバッガの接続 デバッガの接続 デバッガの接続
jdbを起動し、DebugAgentがDebugProxyへの接続時に提供されるパスワードを使用し て、起動したjdbをデバッグ・プロキシに連結します。 タイムアウトを保持するために、
jdbを通じてすべてのスレッドを一時停止し、ブレーク・ポイントを設定してから再開しま す。
デバッグ・エージェントがデバッグ・プロキシに接続されるたびに、デバッグ・プロキシに よりスレッドが起動されて、デバッガからの接続を待機します。スレッドでは、接続元エー ジェントの番号、名前およびアドレス、待機しているポート、およびポートから生成したパ スワードが出力されます。次にポートとパスワードの例を示します。
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フラグを使用することによって、これらのストリームをデバッグ用コンソール にリダイレクトすることもできます。
サーバー上での実行を見分ける方法
例例例
例3-1 サーバーでのサーバーでのサーバーでのサーバーでのDebugAgentの起動の起動の起動の起動
次の例は、サーバーに常駐するオブジェクトをデバッグする方法を示しています。 まず、
debugproxyコマンドライン・ツールを使用してプロキシを起動する必要があります。 この 例では、サーバーtstHost上でプロキシを起動し、デバッグ・エージェントによって接続 されたときにdebugproxyにjdbデバッガを起動するように指示しています。
もう1つのウィンドウでは、デバッグ・エージェント・ユーザーが正しい権限を持っている かどうかを確認してから、デバッグ・エージェントを起動します。 エージェントが起動され ると、debugproxyによりjdbデバッガが起動され、ブレーク・ポイントを設定できます。
エージェントのタイムアウトまでの指定した時間内に、まずするべきことは、すべてのス レッドを一時停止することです。 次に、再開する前にブレーク・ポイントをすべて設定しま
す。 これにより、実行する準備ができるまではタイムアウトが一時停止されます。
サーバー上での実行を見分ける方法 サーバー上での実行を見分ける方法 サーバー上での実行を見分ける方法 サーバー上での実行を見分ける方法
サーバーでの実行方法とクライアントでの実行方法が異なるJavaコードを作成する場合が あります。通常はこのようなJavaコードの作成をお薦めしません。実際、JDBCとSQLJで は、サーバー側とクライアント側で使用するドライバが異なる場合でも、この問題を回避す る移植可能なコードの作成は手間がかかります。
このコードがサーバー側で実行しているかどうかを判断するには、次のように System.getPropertyメソッドを使用します。
System.getProperty ("oracle.jserver.version") getPropertyメソッドは次のものを戻します。
tstHostのウィンドウ1
% debugproxy -port 2286 start jdb -password . (wait until a debug agent starts up and . contact this proxy... when it does, jdb . starts up automatically and you can set
SQL> grant JavaDebugPriv to SCOTT
. breakpoints and debug the object, as follows:)
> suspend
> stop in myCode:updateAccount
> resume
> ...
% loadjava -u SCOTT/TIGER -v -f -r myCode.java
SQL> call dbms_java.set_compiler_option(’’, ’debug’, ’true’);
SQL> exit
tstHostのウィンドウ2
SQL> call dbms_java.start_debugging('tstHost',2286,30);
> load SCOTT:myCode
サーバー上の出力のリダイレクト
■ サーバーで実行している場合、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データベースにOracle8i JVMをインストールおよび構成するために 必要な事柄を詳しく説明します。 Javaメモリーを構成する方法は、第6章「Oracle8i Javaア プリケーションの パフォーマンス」の「Javaのメモリー使用量」の項を参照してください。
■ Java対応データベースの初期化
■ Oracle8i JVMの構成
■ Javaクライアントの使用可能化
Java対応データベースの初期化
Java 対応データベースの初期化 対応データベースの初期化 対応データベースの初期化 対応データベースの初期化
Oracle8iと一緒にOracle8i JVMをインストールした場合、そのデータベースはJava対応に
なります。 つまり、Javaストアド・プロシージャ、JDBC、SQLJおよびCORBA/EJBオブ ジェクトをすぐに実行できます。 独自のスクリプトでOracleインスタンスを作成する場合 は、明示的にOracle8i JVMを初期化する必要があります。
Oracle8i JVMをインストールするには次の3つのうちいずれかの方法を使用します。
■ Oracle8i標準または最小セットアップ − 標準または最小Oracle8iインストールを選択す
ると、Oracle8i JVMが自動的にインストールされます。
■ Oracle8iカスタム・インストール −「カスタム」Oracle8iインストールからOracle8i
JVMオプションを選択します。
■ 手動インストール − initjvm.sqlスクリプトを起動してOracle8i JVMをインストー ルします。
手動インストール 手動インストール 手動インストール 手動インストール
Oracle8iインストール・オプションでOracle8i JVMをインストールしていない場合には、
ORACLE_HOME/javavm/installにあるinitjvm.sqlスクリプトを使用し、既存のデー タベースにOracle8i JVMを追加できます。
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. ロードされたクラスに全ユーザーがアクセスするためのパブリック・シノニムを作成し ます。
Java対応データベースの初期化
3. 一部のクラスを変更し、定義者権限で実行してCORBAのコールアウトをサポートしま す。
4. データベースの起動トリガーおよびシャットダウン・トリガーを定義します。
要件 要件 要件 要件
Java対応データベースの初期化には、50MBのSHARED_POOL_SIZE、約20MBのJAVA_
POOL_SIZE、システム表領域として追加に30MB、および十分なロールバック・セグメント が必要になります。 リソース不足などの原因により、スクリプトが失敗した場合は、必要に 応じてリソースを調整し、initjvm.sqlを再実行できます。データベース初期化ファイル の構成パラメータ、および要件に関する最新情報は、6-7ページの「Javaのメモリー使用 量」、および/javavm/README.txt ファイルを参照してください。
EJBおよびCORBAの通信を可能にするための要件もあります。 初めのうちは、Oracle8i
JVMの標準インストールによる初期設定で十分です。 詳細は、『Oracle8i Enterprise
JavaBeans開発者ガイドおよびリファレンス』、 『Oracle8i CORBA開発者ガイド』および
『Oracle8i Net8管理者ガイド』を参照してください。
パッケージ パッケージ パッケージ
パッケージ DBMS_JAVA
Oracle8i JVMを初期化する際に、initjvm.sqlスクリプトによってPL/SQLパッケージ
DBMS_JAVAが作成されます。DBMS_JAVAのエントリ・ポイントの一部は、開発者が使用す るものです。残りのエントリ・ポイントは内部的に使用されます。 対応するJavaクラス DbmsJavaは、JavaからRDBMSにアクセスするための手段を提供します。
DBMS_JAVAパッケージにより次のエントリ・ポイントが提供されます。
FUNCTION longname (shortname VARCHAR2) RETURN VARCHAR2
Javaスキーマ・オブジェクトから完全名を戻します。 Javaのクラスとメソッドの名前はSQL の識別子の最大長を超えることがあるので、Auroraでは内部的にSQLアクセス用の短縮名 を使用します。 この関数は、切り捨てられた名前の元の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時間程度かかります。