ヘッダーをスキップ
Oracle® Database Java開発者ガイド
12cリリース1 (12.1)
B72466-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

4 Javaのインストールと構成

この章では、Oracle JVMをインストールおよび構成する方法について説明します。また、Javaクライアントを使用可能にする方法についても説明します。この章の構成は、次のとおりです。

Java対応のデータベースの初期化

Oracle JVMオプションを指定してOracle Databaseをインストールすると、データベースはJava対応になります。つまり、Javaストアド・プロシージャ、Java Database Connectivity(JDBC)およびSQLJが実行可能な状態になります。

この項の内容は、次のとおりです。

Oracle Databaseのテンプレートを使用した構成

Oracle JVMオプションをデータベース・テンプレート内に構成します。Javaのインストールには、この方法をお薦めします。

Database Configuration Assistantを使用すると、各データベース・インスタンスのインストールに含める内容を定義するためのデータベース・テンプレートを作成できます。Javaプラットフォームをデータベース内にインストールする場合は、Oracle JVMオプションを選択してください。

Oracle JVMを組み込むための既存のOracle Databaseの変更

Oracle JVMを組み込まずにOracle Databaseをすでにインストールしている場合は、Oracle Database 12cリリース1 (12.1)のDatabase Configuration Assistantの変更モードを使用してデータベースにJavaを追加できます。変更モードでは、既存のOracle Databaseインスタンス上にインストールする機能(Oracle JVMなど)を選択できます。

Oracle JVMの構成

Oracle JVMをOracle Databaseの標準インストールの一部としてインストールする前に、Oracle JVMの構成要件がすべて満たされていることを確認する必要があります。Oracle Database内のJavaクラスの主な構成には、次の構成要件が含まれます。

  • Javaメモリー要件

    JAVA_POOL_SIZEに最低50MB、SHARED_POOL_SIZEに最低96MB必要です。

  • データベース・プロセス

    データベース・サーバーに専用サーバー・プロセスまたは共有サーバー・プロセスのどちらを使用するかを決定する必要があります。

DBMS_JAVAパッケージの使用方法

Oracle JVMをインストールすると、PL/SQLのDBMS_JAVAパッケージが作成されます。DBMS_JAVAパッケージ・ファンクションは、データベース・サーバーとデータベース・クライアントのどちらでも使用できます。対応するJavaクラスDbmsJavaで、Javaからデータベースの機能にアクセスするためのメソッドが提供されます。

Javaクライアントを使用可能にする方法

クライアントとサーバー間でJavaを実行するには、次の手順を実行する必要があります。

  1. クライアントへのJava SEのインストール

  2. 環境変数の設定

  3. サンプルを使用したインストールのテスト

クライアントへのJava SEのインストール

クライアントにはJava Development Kit(JDK)1.6以上が必要です。使用しているJDKのバージョンを確認するには、コマンドラインで次のコマンドを実行します。

$ which java
/usr/local/jdk1.6.0_26/bin/java

$ which javac
/usr/local/jdk1.6.0_26/bin/javac

$ java -version
java version "1.6.0_26"

環境変数の設定

クライアントにJDKをインストールした後に、次の環境変数にディレクトリ・パスを追加します。

  • $JAVA_HOME

    この変数は、インストールしたJDKベースの最上位ディレクトリに設定する必要があります。

  • $PATH

    この変数には、$JAVA_HOME/binを組み込む必要があります。

  • $LD_LIBRARY_PATH

    この変数には、$JAVA_HOME/libを組み込む必要があります。

Java 2クライアントに必要な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ファイルを組み込む必要があります。

このファイル以外に、適切なruntimeX.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などのより複雑な作成環境を使用する前に、サンプルが動作することを確認してください。

Javaセッションの状態に使用する2層の期間

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オプションで設定した値は使用されなくなり、キーは表にある元の値に設定されます。