データベースでのJavaの実行

このチュートリアルでは、データベース内でJavaプログラムを開発および実行する方法について説明します。

約30分

トピック

このチュートリアルでは、以下のトピックについて説明します。

このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (警告: すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)

注: 各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。

概要

ストアド・プロシージャを利用すると、リレーショナル・データベース管理システム(RDBMS)の機能を最大限に活用できます。 ストアド・プロシージャは、データベース・プログラミングを簡素化し、すぐに実行が可能で、データ・ロジックを集中管理し、ネットワーク通信量を最適化します。

Javaを使用したストアド・プロシージャ

Java言語は、オブジェクト指向のプログラミング言語として設計されており、セキュリティ・メカニズムと効率的なガベージ・コレクション・システムを組み込んでいます。 また、Javaには非常に豊富な標準ライブラリが含まれているため、迅速かつ低コストのアプリケーション開発が実現できます。 Javaのストアド・プロシージャを利用すると、開発者は、上述したすべてのJava性能を活用してデータベース・アプリケーションを構築できます。

このOBEは、Kuassi Mensah氏の著作『Oracle Database Programming using Java and Web Services』に基づいています。 この本の説明については、http://db360.blogspot.com/2006/08/oracle-database-programming-using-java_01.html (英語)を参照してください。また、コード・サンプルはUS OTNのサイトhttp://download.oracle.com/technology/tech/java/jsp/pdf/Code_depot.zipからダウンロードできます。

トピック・リストに戻る

このチュートリアルを始める前に、次の手順を完了してください。

1.

Oracle Database 11gのインストール

2.

SunからのJDK 6.0のダウンロードおよびインストール

4

作業ディレクトリ(wkdir)へのjava.zipファイルのダウンロードおよび解凍

トピック・リストに戻る

以下の手順に従って、デフォルトのサーバー側接続(conn = DriverManager.getConnection("jdbc:default:connection:");)を使用してTrimLoad.javaをデータベースにロードした後、プロシージャTrimLobProcを使用してこれを実行します。

1.

端末ウィンドウを開いて、ファイルを解凍したディレクトリへ移動します。 次のコマンドを実行します。

loadjava -u hr/hr TrimLob.java      

 

2.

端末ウィンドウを開いて、ファイルを解凍したディレクトリへ移動します。 次のコマンドを実行します。

drop table basic_lob_table;
create table basic_lob_table (x varchar2 (30), b blob, c clob);
/ 

 

3.

次のコマンドを使用して、プロシージャTrimLobProcを実行します。

set serveroutput on
call dbms_java.set_output(50000);
call TrimLobProc();

 

トピック・リストに戻る

SQLのデータ・タイプとJavaプログラミング言語のデータ・タイプは異なるため、Javaタイプを使用したアプリケーションとSQLタイプを使用したデータベースの間でデータを送信するマッピングを行います。 以下の手順に従って、各種のSQLタイプと対応するJavaタイプのマッピングを行います。

1.

oracle.sql.charからSQL CHARへのマッピングを行います。 TypesTab.sqlスクリプトとorasqlCHAR.sqlスクリプトを実行します。

@TypesTab
@orasqlCHAR

 

2.

CLOBロケータとjava.sql.Clobのマッピングを行います。 XobTypesTab.sqlスクリプトとClobMap.sqlスクリプトを実行します。

@XobTypesTab
@ClobMap

 

3.

REFカーソルからjava.sql.ResultSetへのマッピングを行います。ResultSet.sqlスクリプトを実行します。

@ResultSet

 

4.

VARRAYからスカラーSQLタイプNumberへのマッピングを行います。XVARRAY.SQLスクリプトとNumVarray.sqlスクリプトを実行します。

@XVARRAY
@NumVarray

 

トピック・リストに戻る

以下の手順に従い、ojvmjavaまたはPL/SQLラッパーを使用して、Javaアプリケーションを起動します。

1.

データベース表の設定を行います。 Workers.SQLスクリプトを実行します。

@Workers
exit

 

2.

ojvmjavaを使用して、データベースでJavaを起動します。ojvmjavaはインタラクティブなコマンドライン・ユーティリティであり、データベースでのJavaクラスの実行をクライアント・マシンから行えます。 ojvmjavaは、JDBC接続を使用してデータベース・セッションを作成し、ojvmjavaクライアントからojvmjavaサーバーへバイト配列を渡します。ojvmjavaサーバーでは、ユーザー・クラスのmainメソッドが実行されます。 次に、ojvmjavaサーバーは出力結果をクライアントに送り返します。 端末ウィンドウから、次のコマンドを実行します。

ojvmjava -thin -user hr/hr
Java Workers 621 "Senior VP" 650000  

 

3.

PL/SQLラッパーを使用して、データベースでJavaを起動します。 端末ウィンドウから、次のコマンドを実行します。

sqlplus hr/hr
create or replace procedure WorkerSp
  (wid IN varchar2, wpos in varchar2, wsal in varchar2) as
  language Java name 
  'Workers.main(java.lang.String[])';
call WorkerSp('621','Senior VP','650000');  

 

トピック・リストに戻る

Object Type Call Specは、STATICキーワードを使用して、あるオブジェクト・タイプのパブリックな静的メンバーを公開します。 ただし、その他のPL/SQLパッケージのCall Specとは異なり、Object Type Call Specは、MEMBERキーワードを使用して静的でないインスタンス・メソッドを公開することもできます。以下の手順に従って、Object Type Call Specの作成とテストを行います。

1.

PL/SQLラッパーを使用して、データベースでJavaを起動します。 端末ウィンドウから、@BasicObjTyp.sqlスクリプトを実行します。

@BasicObjTyp

 

トピック・リストに戻る

バイナリ実行可能ファイルを使用すると、最善のJava実行パフォーマンスを達成できます。バイナリ実行可能ファイルを作成するには、JITコンパイラおよび/または静的コンパイラを使用してJavaソース・コードをコンパイルします。 Oracle Database 11g以降のOJVMでは、JITコンパイラが使用されており、動的な選択やネイティブ・コンパイル、および頻繁に使用されるJavaメソッドの実行が可能であるため、Oracle Database 10gで使用されているNCOMPと比較して、パフォーマンスと管理性が向上します。 以下の手順に従って、Javaアプリケーションの解析と比較した場合のJITコンパイルのメリットを表示します。

1.

端末ウィンドウから、@JITDemo.sqlスクリプトを実行します。

@JITDemo

解析コードとコンパイル・コードの時間比率に注目してください。

 

トピック・リストに戻る

OracleJVMでは、特定の目的で使用されるJavaオブジェクトの状態は、"オブジェクト・メモリー"と呼ばれる、特定の各種メモリー領域(Newspace、Oldspace、Runspace、Stackspace、Sessionspaceなど)に保存されます。以下の手順に従って、各種のJavaメモリー領域を表示します。

1.

端末ウィンドウから、@memtest.sqlスクリプトを実行します。

@memtest

 

トピック・リストに戻る

このチュートリアルで学習した内容は、以下のとおりです。

データベースへのJavaアプリケーションのロードと実行
SQLタイプからJavaタイプへのマッピング
データベースでのJavaの起動
Object Type Call Specの説明
JITを使用したJavaのコンパイル
Javaメモリー領域の表示

トピック・リストに戻る

このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。

 

 

 


Copyright (c) Oracle Corporation 2007 All Rights Reserved
Oracle Corporation発行の「Running Java in the Database」の翻訳版です。

この文書はあくまで参考資料であり、掲載されている情報は予告なしに変更されることがあります。 万一、誤植などにお気づきの場合は、オラクル社までお知らせください。 オラクル社は本書の内容に関していかなる保証もしません。 また、本書の内容に関連したいかなる損害についても責任を負いかねます。

Oracleはオラクル社の登録商標です。
その他の会社名および製品名は、 あくまでその製品および会社を識別する目的にのみ使用されており、 それぞれの所有者の商標または登録商標です。