この章では、Oracle JVMをインストールおよび構成する方法について説明します。また、Javaクライアントを使用可能にする方法についても説明します。この章の構成は、次のとおりです。
Oracle JVMオプションを指定してOracle Databaseをインストールすると、データベースはJava対応になります。つまり、Javaストアド・プロシージャ、Java Database Connectivity(JDBC)およびSQLJが実行可能な状態になります。
この項の内容は、次のとおりです。
Oracle JVMオプションをデータベース・テンプレート内に構成します。Javaのインストールには、この方法をお薦めします。
Database Configuration Assistantを使用すると、各データベース・インスタンスのインストールに含める内容を定義するためのデータベース・テンプレートを作成できます。Javaプラットフォームをデータベース内にインストールする場合は、Oracle JVMオプションを選択してください。
Oracle JVMを組み込まずにOracle Databaseをすでにインストールしている場合は、Oracle Database 11gのDatabase Configuration Assistantの変更モードを使用してデータベースにJavaを追加できます。変更モードでは、既存のOracle Databaseインスタンス上にインストールする機能(Oracle JVMなど)を選択できます。
Oracle JVMをOracle Databaseの標準インストールの一部としてインストールする前に、Oracle JVMの構成要件がすべて満たされていることを確認する必要があります。Oracle Database内のJavaクラスの主な構成には、次の構成要件が含まれます。
Oracle JVMをインストールすると、PL/SQLのDBMS_JAVA
パッケージが作成されます。DBMS_JAVA
のエントリ・ポイントの一部は、外部的に使用されます。つまり、このエントリ・ポイントは開発者が使用します。残りのエントリ・ポイントは内部的に使用されます。対応するJavaクラスDbmsJava
で、Javaからデータベースの機能にアクセスするためのメソッドが提供されます。
クライアントとサーバー間でJavaを実行するには、次の手順を実行する必要があります。
クライアントにはJava Development Kit(JDK)1.5.2以上が必要です。使用しているJDKのバージョンを確認するには、コマンドラインで次のコマンドを実行します。
$ which java /usr/local/j2se1.5.2/bin/java $ which javac /usr/local/j2se1.5.2/bin/javac $ java -version java version "1.5.2"
クライアントにJDKをインストールした後に、次の環境変数にディレクトリ・パスを追加します。
$JAVA_HOME
この変数は、インストールしたJDKベースの最上位ディレクトリに設定する必要があります。
$PATH
この変数には、$JAVA_HOME/bin
を組み込む必要があります。
$LD_LIBRARY_PATH
この変数には、$JAVA_HOME/lib
を組み込む必要があります。
Java2クライアントに必要なJARファイル
Javaクライアントでサーバーと正常に通信できるようにするには、CLASSPATH
に次のファイルを組み込みます。
注意: CLASSPATH 要件の詳細は、異なるプラットフォームで実行されるOracle JVMごとに異なる可能性があります。Oracle JVMユーティリティのスクリプトに定義されたすべてのCLASSPATH の要素が存在する必要があります。 |
JDK 1.5.2の場合は、$JAVA_HOME/lib/dt.jar
を組み込みます。
JRE 1.5.2の場合は、$JAVA_HOME/lib/rt.jar
を組み込みます。
JDBCと対話するには、$ORACLE_HOME/jdbc/lib/ojdbc5.jar
を組み込みます。
SSLを使用するクライアントの場合は、$ORACLE_HOME/jlib/jssl-1_2.jar
および$ORACLE_HOME/jlib/javax-ssl-1_2.jar
を組み込みます。
Java Transaction API(JTA)の機能を使用するクライアントの場合は、$ORACLE_HOME/jlib/jta.jar
を組み込みます。
Java Naming and Directory Interface(JNDI)の機能を使用するクライアントの場合は、$ORACLE_HOME/jlib/jndi.jar
を組み込みます。
ネイティブ・コンパイル用のAcceleratorを使用している場合は、$JAVA_HOME/lib/tools.jar
を組み込みます。
SQLJを使用するクライアント用に組み込むJARファイル
SQLJ用に$ORACLE_HOME/sqlj/lib/translator.zip
ファイルを組み込む必要があります。
このファイル以外に、適切なruntime
X
.zip
ファイルを次のように追加します。
現行リリースのJDBCを使用しているJavaクライアントの場合は、$ORACLE_HOME/sqlj/lib/runtime12.zip
を組み込みます。
現行リリースのJDBCを使用しているJava2 Platform, Enterprise Edition(J2EE)クライアントの場合は、$ORACLE_HOME/sqlj/lib/runtime12ee.zip
を組み込みます。
8.1.7バージョンより前のJDBCを使用しているJDKクライアントの場合は、$ORACLE_HOME/sqlj/lib/runtime.zip
を組み込みます。
クライアントでのサーバー・アプリケーションの開発
クライアントでサーバー・アプリケーションを開発およびコンパイルし、サーバーにロードされている同じJavaアーカイブ(JAR)ファイルを使用する場合は、CLASSPATH
に$ORACLE_HOME/lib/aurora.zip
を組み込みます。これは、Javaクライアントの実行には必要ありません。
Oracle JVMオプションを指定してOracle Databaseをインストールすると、$ORACLE_HOME/javavm/demo
ディレクトリにサンプル・セットもインストールされ、使用できます。これらのサンプルはインストールのテストとしてコンパイルおよび実行できます。
サンプルがコンパイルまたは実行されない場合は、環境が正しく設定されていない可能性があります。同様に、これらのサンプルがコンパイルおよび実行されても、ユーザーが作成したコードがコンパイルおよび実行されない場合は、作成環境またはコードに問題があります。
注意: インストールを検証するときは、提供されているMakeファイルを使用してこれらの例を実行することが重要です。 |
Visual Cafe、JDeveloperまたはVisualAgeなどのより複雑な作成環境を使用する前に、サンプルが動作することを確認してください。
11gリリース1 (11.1)以前では、Javaセッションの状態は単一層で、ここには、Javaの実行に関連するすべての値(システム・プロパティの値や静的変数の値など)、およびセッション中にロードされたクラスのセットなどが含まれていました。この状態の期間は、RDBMSセッションで最初にJavaメソッドを起動すると開始し、java.lang.System.exit
または類似するOracleRuntime
メソッドのコール、捕捉されない例外、致命的エラーまたはRDBMSセッションの終了のいずれかによってJVMが終了するまで続いていました。この場合、Javaコードの変更が必要であり、さらにRDBMSコールの終了前にセッションを完全に終了することができませんでした。そのため、同じコール内で新しいJavaセッションを起動できませんでした。
11gリリース1 (11.1)以降では、Javaセッションの状態が2層に分けられています。一方の層の期間の方が長く、この中にもう一方の層の期間が含まれます。短い層の期間は以前と同じで、つまり、Javaメソッドを起動すると開始し、JVMが終了すると終了します。長い層の期間は、RDBMSセッションで最初にJavaメソッドを起動すると開始します。このセッションは、RDBMSセッションが終了するか、またはファンクションdbms_java.endsession_and_related_state
のコールによってセッションを明示的に終了するまで続きます。Javaセッションの2種類の期間で構成される、次の2つのPL/SQLファンクションをDBMS_JAVA
パッケージに追加することで、この問題に対応しています。
FUNCTION endsession RETURN VARCHAR2;
このファンクションは、以前にJavaを実行したときからRDBMS現行セッションに残っているJavaセッションの状態をすべて消去します。戻り値は、実行されるアクションを示すメッセージです。
FUNCTION endsession_and_related_state RETURN VARCHAR2;
このファンクションは、以前にJavaを実行したときからRDBMS現行セッションに残っているJavaセッションの状態と、Javaの実行に関連するサポート・データ(プロパティの設定や出力仕様など)をすべて消去します。戻り値は、実行されるアクションを示すメッセージです。
Javaの実行に関連するほとんどの値は、引き続き短い層にあります。JVMを複数起動する場合に役立つ値は、長い層に移動されました。たとえば、dbms_java.set_property
で設定するシステム・プロパティの値や出力リダイレクトの仕様などです。
RDBMSセッション内では、JavaセッションをRDBMSセッションで起動する場合、システム・プロパティに追加される値のセットを管理できます。この値のセットは、Javaセッションの状態の長い層の期間で有効な状態が維持され、これは、通常、RDBMSセッションと同じ期間です。
DBMS_JAVA
パッケージには、内部のRDBMSセッション期間表でキーと値のペアを設定、取得、削除および表示するためのPL/SQLファンクションのセットがあります。ここでは、ペアのどちらの要素も文字列(VARCHAR2
)であり、指定のキーに対して最大1つのペアがあります。ファンクションは次のとおりです。タスクの機能は次のとおりです。
set_property
このファンクションでは、Javaセッションが初期化されると、RDBMSの現行セッションの期間に使用されるシステム・プロパティの値を設定します。最初の引数はプロパティの名前、2番目の引数はプロパティに設定される値です。set_property
の戻り値は、エラーがないかぎりNULLになります。たとえば、規定のプロパティの値を設定しようとすると、エラー・メッセージが戻されます。
FUNCTION set_property(name VARCHAR2, value VARCHAR2) RETURN VARCHAR2;
get_property
このファンクションは、set_property
で以前に設定された値を戻します。値がない場合はNULLを戻します。
FUNCTION get_property(name VARCHAR2) RETURN VARCHAR2;
remove_property
このファンクションは、set_property
で以前に設定された値を削除します。エラーが発生しなければ、戻り値はNULLになり、エラーが発生した場合、エラー・メッセージが戻されます。
FUNCTION remove_property(name VARCHAR2) RETURN VARCHAR2;
show_property
このファンクションは、nameがNULLの場合、入力名または設定されたすべてのプロパティのバインディングについて、name = value
という形式のメッセージを表示します。このファンクションの戻り値は、正常に実行された場合はNULL、それ以外はエラー・メッセージになります。出力は、現在のJava出力の指定先に表示されます。
FUNCTION show_property(name VARCHAR2) RETURN VARCHAR2;
Javaセッションを初期化する前に、Oracle JVMですでに管理されているデフォルトのシステム・プロパティの値セットにこの表の値が追加されます。コマンドライン・インタフェースを使用してJavaメソッドを実行する場合、-D
オプション(指定する場合)で決定した値は、表の値セットをオーバーライドします。Javaセッションを終了するとすぐに、-D
オプションで設定した値は使用されなくなり、キーは表にある元の値に設定されます。