Sun GlassFish Enterprise Server v3 管理ガイド

第 14 章 データベース接続の管理

この章では、asadmin コマンド行ユーティリティーを使用して、Sun GlassFishTM Enterprise Server v3 環境でデータベース接続タスクを実行する手順について説明します。

ここでは、次のテーマを取り上げます。

これらのタスクを管理コンソールを使用して実行する場合の手順は、管理コンソールのオンラインヘルプで説明します。

データベース接続について

データベース管理システム (DBMS) は、データを格納、編成、および取得するための機能を提供します。多くの場合、データベース内の情報は持続的なデータとして表現されますが、これはデータがディスク上に保存され、アプリケーションプロセスが終了したあとも存在するためです。ほとんどのビジネスアプリケーションは、データをリレーショナルデータベースに格納します。アプリケーションは JDBC (Java Database Connectivity) API を使用して、データベース情報にアクセスできます。

データベース接続の主な要素は次のとおりです。

実行時には、アプリケーションがデータベースに接続するときに次の一連の処理が発生します。

  1. アプリケーションは JNDI API を通して呼び出しを行い、データベースに関連付けられた JDBC リソースを取得します。

    リソースの JNDI 名を使用して、ネームサービスとディレクトリサービスが JDBC リソースを検索します。JDBC リソースはそれぞれ接続プールを指定します。

  2. アプリケーションは JDBC リソースを使用してデータベース接続を取得します。

    Enterprise Server は、データベースに対応する接続プールから物理接続を取得します。プールは、データベース名 (URL)、ユーザー名、パスワードなどの接続属性を定義します。

  3. データベース接続が確立されると、アプリケーションはデータベースに対してデータの読み取り、変更、および追加を実行できるようになります。

    アプリケーションは JDBC API を呼び出すことにより、データベースにアクセスします。JDBC ドライバはアプリケーションの JDBC 呼び出しをデータベースサーバーのプロトコルに変換します。

  4. データベースへのアクセスが完了すると、アプリケーションは接続を閉じ、接続を接続プールに戻します。

データベースの設定

多くのアプリケーションは、リレーショナルデータベースを使用してデータを保存、編成、および取得します。アプリケーションは、JDBC (JavaTM Database Connectivity) API を通してリレーショナルデータベースにアクセスします。

ここでは、次のテーマを取り上げます。

Procedureデータベースおよびデータベースドライバをインストールする

  1. サポートされたデータベース製品をインストールします。

    Enterprise Server でサポートされているデータベース製品の最新のリストを確認するには、『Sun GlassFish Enterprise Server v3 リリースノート』を参照してください。

  2. データベース製品用のサポートされている JDBC ドライバをインストールします。

    Enterprise Server でサポートされているドライバのリストについては、「JDBC ドライバに固有の構成」を参照してください。

  3. ドメイン管理サーバー (DAS) が JDBC ドライバの JAR ファイルにアクセスできるようにします。

    「JDBC ドライバの統合」を参照してください。

  4. データベースを作成します。

    通常はアプリケーションプロバイダが、データベースを作成しデータを生成するためのスクリプトを提供しています。

Procedureデータベースを起動する

Enterprise Server には、Java DB (以前の名称は Derby) の実装が含まれていますが、JDBC に準拠した任意のデータベースも使用できます。データベースは Enterprise Server の起動時に自動では起動されません。したがって、データベースを必要とするアプリケーションを使用する場合は、start-database サブコマンドを使用して Java DB を手動で起動する必要があります。

  1. start-database(1) サブコマンドを使用して、データベースを起動します。

    データベースサーバーの起動時、またはクライアントがデータベースサーバーに正常に接続したときに、--dbhome オプションで指定された場所に次のファイルが作成されます。

    • derby.log ファイルには、データベースサーバープロセスのログが、標準出力および標準エラー情報とともに保存されます。

    • データベースのファイルには、使用するスキーマ (たとえば、データベース表) が保存されます。


例 14–1 データベースの起動

この例では、host1 というホストのポート 5001 で Derby を起動します。


asadmin> start-database --dbhost host1 --dbport 5001 --terse=true
Starting database in the background. 
Log redirected to /opt/SUNWappserver/databases/javadb.log.
Command start-database executed successfully.

参照

コマンド行に asadmin help start-database と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedureデータベースを停止する

ローカルの stop-database サブコマンドを使用して、指定したポートの Java DB を停止します。同一のホストのほかのポートで、複数のデータベースサーバープロセスが動作している場合があります。

  1. 必要に応じて、データベースを停止することをユーザーに通知します。

  2. stop-database(1) サブコマンドを使用して、データベースを停止します。


例 14–2 データベースの停止

この例では、localhost のポート 5001 で動作している Java DB を停止します。


asadmin> stop-database --dbhost=localhost --dbport=5001
onnection obtained for host: localhost, port number 5001.
Apache Derby Network Server - 10.2.2.1 - (538595) shutdown at 2008-10-17 23:34:2
7.218 GMT
Command stop-database executed successfully.

注意事項

ネットワーク間を移動するノートパソコンでは、データベースのシャットダウンに関して問題が発生する場合があります。Java DB を起動したあとに IP アドレスを変更した場合は、--dbhost 引数を指定しなければ Java DB を停止できません。たとえば、asadmin start-database --dbhost = 0.0.0.0 を実行したあと、Ethernet を切断してワイヤレス接続に切り替えた場合、データベースを停止するには次のようなコマンドを実行する必要があります。

asadmin stop-database --dbhost localhost

参照

コマンド行に asadmin help stop-database と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Java DB ユーティリティースクリプト

Enterprise Server で利用できる Java DB の構成には、Java DB の使用に役立つスクリプトが含まれます。次のスクリプトが、as-install/javadb/frameworks/NetworkServer/bin ディレクトリに格納されています。

startNetworkServer、startNetworkServer.bat

ネットワークサーバーを起動するスクリプト

stopNetworkServer、stopNetworkServer.bat

ネットワークサーバーを停止するスクリプト

ij、ij.bat

対話式の JDBC スクリプト作成ツール

dblook、dblook.bat

データベースのすべてまたは一部の DDL を表示するスクリプト

sysinfo、sysinfo.bat

Java DB 環境に関するバージョン情報を表示するスクリプト

NetworkServerControl、NetworkServerControl.bat

NetworkServerControl API でコマンドを実行するスクリプト

ProcedureJava DB ユーティリティースクリプトを実行するための環境を設定する

  1. JAVA_HOME 環境変数が JDK のインストールディレクトリを指定していることを確認します。

  2. as-install/derby ディレクトリをポイントするように JAVADB_HOME 環境変数を設定します。

参照

これらのユーティリティーの詳細については、次のドキュメントを参照してください。

データベースへのアクセスの設定

データベース接続を確立したら、Enterprise Server アプリケーションのアクセス設定を実行できます。データベースにアクセスする前に、アプリケーションは接続を取得する必要があります。

ここでは、次のテーマを取り上げます。

JDBC 接続プールの管理

「JDBC 接続プール」は、特定のデータベースのための再利用可能な接続のグループです。新しい物理接続の作成には時間がかかるため、Enterprise Server は使用可能な接続のプールを維持します。アプリケーションが接続を要求すると、プールから 1 つの接続が取得されます。アプリケーションが接続を閉じると、接続はプールに返されます。

JDBC リソースは、リソースが関連付けられている接続プールを指定することで作成されます。複数の JDBC リソースが 1 つの接続プールを指定することもできます。接続プールのプロパティーは、データベースベンダーによっては異なる場合もあります。共通のプロパティーには、データベースの名前 (URL)、ユーザー名、パスワードなどがあります。

次のタスクと情報を使用して、JDBC 接続プールを管理します。

ProcedureJDBC 接続プールを作成する

指定した JDBC 接続プール名で新しい JDBC 接続プールを登録するには、リモートモードで create-jdbc-connection-pool サブコマンドを使用します。。JDBC 接続プールまたはコネクタ接続プールは、認証を使用して作成できます。asadmin ユーティリティーでユーザー、パスワード、またはその他の接続情報を指定するサブコマンドオプションを使用するか、XML 記述子ファイルで接続情報を指定します。

各データベースには接続プールが 1 つ必要です。アプリケーションによっては、複数の接続プールが必要な場合もあります。接続プールを構築するときに、JDBC ドライバとデータベースベンダーに固有のデータが必要となります。次に示す固有データの例の一部は、「JDBC ドライバに固有の構成」にも示してあります。

JDBC 接続プールの作成は動的なイベントであり、サーバーの再起動は必要ありません。ただし、パラメータの中には、サーバーの再起動を求めるものもあります。「サーバーの再起動が必要な構成の変更」を参照してください。

始める前に

接続プールを作成する前に、データベースとデータベースに関連する JDBC ドライバをインストールして統合しておく必要があります。手順については、「データベースの設定」を参照してください。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. create-jdbc-connection-pool(1) サブコマンドを使用して、JDBC 接続プールを作成します。

  3. (省略可能) 必要な場合は、サーバーを再起動します。

    一部のパラメータはサーバーの再起動を必要とします。「サーバーの再起動が必要な構成の変更」を参照してください。


例 14–3 JDBC 接続プールの作成

この例では、sample_derby_pool という名前の接続プールを localhost に作成します。


asadmin> create-jdbc-connection-pool 
--datasourceclassname org.apache.derby.jdbc.ClientDataSource 
--restype javax.sql.XADataSource 
--property portNumber=1527:password=APP:user=APP:serverName=
localhost:databaseName=sun-appserv-samples:connectionAttribut
es=\;create\\=true sample_derby_pool
Command create-jdbc-connection-pool executed successfully.

参照

コマンド行に asadmin help create-jdbc-connection-pool と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

ProcedureJDBC 接続プールを一覧表示する

既存の JDBC 接続プールをすべて表示するには、リモートモードで list-jdbc-connection-pools サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jdbc-connection-pools(1) サブコマンドを使用して、JDBC 接続プールを一覧表示します。


例 14–4 JDBC 接続プールの一覧表示

この例では、localhost 上の JDBC 接続プールを一覧表示します。


asadmin> list-jdbc-connection-pools
sample_derby_pool2
poolA
__TimerPool
DerbyPool
sample_derby_pool
Command list-jdbc-connection-pools executed successfully.

参照

コマンド行に asadmin help list-jdbc-connection-pools と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedure接続プールと通信する (ping を実行する)

接続プールが使用可能かどうかをテストするには、リモートモードで ping-connection-pool サブコマンドを使用します。たとえば、あとで配備する予定のアプリケーション用に新しい JDBC 接続プールを作成した場合、そのアプリケーションを配備する前に、このコマンドを使用して JDBC プールをテストすることができます。ping を実行すると、プールがまだ作成されていない場合は作成を強制されます。

始める前に

接続プールと通信する前に、認証を使用して接続プールを作成し、サーバーまたはデータベースを実行しておく必要があります。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. ping-connection-pool(1) サブコマンドを使用して、接続プールに ping を実行します。


例 14–5 接続プールとの通信

この例では、DerbyPool 接続プールが使用可能かどうかを確認します。


asadmin> ping-connection-pool DerbyPool
Command ping-connection-pool executed successfully

参照

コマンド行に asadmin help ping-connection-pool と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedure接続プールをリセット (フラッシュ) する

指定した接続プールで確立されたすべての接続を再初期化するには、リモートモードで flush-connection-pool を使用します。JDBC 接続プールまたはコネクタ接続プールは、初期状態にリセットされます。既存の動作中の接続はすべて破棄され、これらの接続に関連付けられているトランザクションは失われます。続いてプールの初期接続が再作成され、プールは通常プールサイズに復元されます。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. flush-connection-pool(1) サブコマンドを使用して、接続プールをリセットします。


例 14–6 接続プールのリセット (フラッシュ)

この例では、__TimerPool という名前の JDBC 接続プールを通常プールサイズにリセットします。


asadmin> flush-connection-pool __TimerPool 
Command flush-connection-pool executed successfully.

参照

コマンド行に asadmin help flush-connection-pool と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

ProcedureJDBC 接続プールを更新する

get および set サブコマンドを使用して、JDBC 接続プールのプロパティーの値を表示および変更します。

  1. list-jdbc-connection-pools(1) サブコマンドを使用して、JDBC 接続プールを一覧表示します。

  2. get サブコマンドを使用して、JDBC 接続プールの属性を表示します。

    次に例を示します。


    asadmin get resources.jdbc-connection-pool.DerbyPool.property
    
  3. set サブコマンドを使用して、JDBC 接続プールの属性を設定します。

    次に例を示します。


    asadmin set resources.jdbc-connection-pool.DerbyPool.steady-pool-size=9
    
  4. (省略可能) 必要な場合は、サーバーを再起動します。

    一部のパラメータはサーバーの再起動を必要とします。「サーバーの再起動が必要な構成の変更」を参照してください。

ProcedureJDBC 接続プールを削除する

既存の JDBC 接続プールを削除するには、リモートモードで delete-jdbc-connection-pool サブコマンドを使用します。JDBC 接続プールの削除は動的なイベントであり、サーバーの再起動は必要ありません。

始める前に

JDBC 接続プールを削除する前に、リソースのすべての関連付けを削除する必要があります。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jdbc-connection-pools(1) サブコマンドを使用して、JDBC 接続プールを一覧表示します。

  3. 必要に応じて、JDBC 接続プールを削除することをユーザーに通知します。

  4. delete-jdbc-connection-pool(1) サブコマンドを使用して、接続プールを削除します。


例 14–7 JDBC 接続プールの削除

この例では、DerbyPool という名前の JDBC 接続プールを削除します。


asadmin> delete-jdbc-connection-pool jdbc/DerbyPool
Command delete-jdbc-connection-pool executed successfully.

参照

コマンド行に asadmin help delete-jdbc-connection-pool と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

JDBC リソースの管理

「JDBC リソース」はデータソースとも呼ばれ、アプリケーションがデータベースに接続する手段を提供します。一般的には、ドメインに配備されたアプリケーションがアクセスするデータベースごとに 1 つの JDBC リソースを作成します。1 つのデータベースに複数の JDBC リソースを指定することもできます。

JDBC リソースは、リソースを関連付ける接続プールを指定することで作成されます。一意の Java Naming and Directory Interface (JNDI) 名を使用して、リソースを識別します。たとえば、給与データベースのリソースには、java:comp/env/jdbc/payrolldb のような JNDI 名を付けることができます。

次のタスクと情報を使用して、JDBC リソースを管理します。

ProcedureJDBC リソースを作成する

JDBC リソースを作成するには、リモートモードで create-jdbc-resource サブコマンドを使用します。JDBC リソースの作成は動的なイベントであり、サーバーの再起動は必要ありません。

すべての JNDI 名は java:comp/env サブコンテキストにあるので、管理コンソール で JDBC リソ スの JNDI を指定するときは、jdbc/name の形式だけを使用します。たとえば、先に述べた給与データベースは、jdbc/payrolldb のように指定できます。

始める前に

JDBC リソースを作成する前に、JDBC 接続プールを作成する必要があります。手順については、「JDBC 接続プールを作成する」を参照してください。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. create-jdbc-resource(1) サブコマンドを使用して、JDBC リソースを作成します。

    このサブコマンドのプロパティーについては、このマニュアルページに記載されています。

  3. 必要に応じて、新しいリソースを作成したことをユーザーに通知します。


例 14–8 JDBC リソースの作成

この例では、DerbyPool という名前の JDBC リソースを作成します。


asadmin> create-jdbc-resource --connectionpoolid DerbyPool jdbc/DerbyPool
Command create-jdbc-resource executed successfully.

参照

コマンド行に asadmin help create-jdbc-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

ProcedureJDBC リソースを一覧表示する

既存の JDBC リソースを一覧表示するには、リモートモードで list-jdbc-resources サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jdbc-resources(1) サブコマンドを使用して、JDBC リソースを一覧表示します。


例 14–9 JDBC リソースの一覧表示

この例では、localhost の JDBC リソースを一覧表示します。


asadmin> list-jdbc-resources
jdbc/__TimerPool
jdbc/DerbyPool
jdbc/__default
jdbc1
Command list-jdbc-resources executed successfully.

参照

コマンド行に asadmin help list-jdbc-resources と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

ProcedureJDBC リソースを更新する

set サブコマンドを使用して、JDBC リソースを有効または無効にできます。JDBC リソースはドット表記名で識別されます。

  1. list-jdbc-resources(1) サブコマンドを使用して、JDBC リソースを一覧表示します。

  2. set(1) サブコマンドを使用して、指定した JDBC リソースの値を変更します。

    次に例を示します。


例 14–10 JDBC リソースの更新

この例では、res1 の enabled の設定を false に変更します。


asadmin>set resources.jdbc-resource.res1.enabled=false

ProcedureJDBC リソースを削除する

既存の JDBC リソースを削除するには、リモートモードで delete-jdbc-resource サブコマンドを使用します。JDBC リソースの削除は動的なイベントであり、サーバーの再起動は必要ありません。

始める前に

JDBC リソースを削除する前に、削除するリソースのすべての関連付けを削除する必要があります。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jdbc-resources(1) サブコマンドを使用して、JDBC リソースを一覧表示します。

  3. 必要に応じて、JDBC リソースを削除することをユーザーに通知します。

  4. delete-jdbc-resource(1) サブコマンドを使用して、JDBC リソースを削除します。


例 14–11 JDBC リソースの削除

この例では、DerbyPool という名前の JDBC リソースを削除します。


asadmin> delete-jdbc-resource jdbc/DerbyPool
Command delete-jdbc-resource executed successfully.

参照

コマンド行に asadmin help delete-jdbc-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

JDBC ドライバの統合

接続プールとリソースを設定したあと、次のいずれかの方法で JDBC ドライバを統合します。

JDBC ドライバに固有の構成

Enterprise Server は、対応する JDBC ドライバを使用して、すべてのデータベース管理システムに接続できるように設計されています。

完全にサポートされている JDBC ドライバ

次の JDBC ドライバとデータベースの組み合わせはテスト済みで、コンテナ管理による持続性がサポートされています。

サポートされている JDBC ドライバの最新のリストについては、『Sun GlassFish Enterprise Server v3 リリースノート』を参照してください。

DB2 データベース用の Sun GlassFish JDBC ドライバ

このドライバの JAR ファイルは smdb2.jar です。次のように接続プールを設定します。

Oracle 11 データベース用の Sun GlassFish JDBC ドライバ

このドライバの JAR ファイルは smoracle.jar です。次のように接続プールを設定します。

Microsoft SQL Server データベース用の Sun GlassFish JDBC ドライバ

このドライバの JAR ファイルは smsqlserver.jar です。次のように接続プールを設定します。

MySQL Server データベース用の Sun GlassFish JDBC ドライバ

Sun MySQL ドライバは、MySQL Enterprise のみで動作します。このドライバの JAR ファイルは smmysql.jar です。次のように接続プールを設定します。

Sybase データベース用の Sun GlassFish JDBC ドライバ

このドライバの JAR ファイルは smsybase.jar です。次のように接続プールを設定します。

IBM DB2 Type 2 ドライバ

この DB2 ドライバの JAR ファイルは db2jcc.jardb2jcc_license_cu.jar、および db2java.zip です。環境変数を設定してください。次に例を示します。

LD_LIBRARY_PATH=/usr/db2user/sqllib/lib:${Java EE.home}/lib
DB2DIR=/opt/IBM/db2/V8.2
DB2INSTANCE=db2user
INSTHOME=/usr/db2user
VWSPATH=/usr/db2user/sqllib
THREADS_FLAG=native

次のように接続プールを設定します。

Java DB/Derby Type 4 ドライバ

Java DB ドライバの JAR ファイルは derbyclient.jar です。Java DB は Apache Derby に基づいています。次のように接続プールを設定します。

MySQL Type 4 JDBC ドライバ

MySQLTM ドライバの JAR ファイルは mysql-connector-java-5.1.7-bin.jar です。次のように接続プールを設定します。

PostgreSQL ドライバ

PostgreSQL ドライバの JAR ファイルは postgresql-8.4-701.jdbc4.jar です。次のように接続プールを設定します。

限定的にサポートされている JDBC ドライバ

次の JDBC ドライバも Enterprise Server で使用できますが、これらのドライバは完全にはテストされていません。Sun では、これらのドライバの製品サポートは提供していませんが、Enterprise Server &; での使用についての限定サポートを提供しています。


注 –

Oracle データベースユーザーが capture-schema コマンドを実行するには、そのユーザーがスキーマの所有者でないかぎり、ANALYZE ANY TABLE 特権が必要です。この特権は、データベース管理者がユーザーに付与します。capture-schema の詳細は、『Sun GlassFish Enterprise Server v3 Reference Manual 』を参照してください。


IBM Informix Type 4 ドライバ

次のように接続プールを設定します。

Oracle データベース用の Inet Oraxo JDBC ドライバ

この Oracle ドライバの JAR ファイルは Oranxo.jar です。次のように接続プールを設定します。

Microsoft SQL Server データベース用の Inet Merlia JDBC ドライバ

この Microsoft SQL Server ドライバの JAR ファイルは Merlia.jar です。次のように接続プールを設定します。

Sybase データベース用の Inet Sybelux JDBC ドライバ

この Inet Sybase ドライバの JAR ファイルは Sybelux.jar です。次のように接続プールを設定します。

Sybase ASE 12.5 データベース用の JConnect Type 4 ドライバ

この Sybase ドライバの JAR ファイルは jconn4.jar です。次のように接続プールを設定します。

Oracle 11 データベース用の Oracle Thin Type 4 JDBC ドライバ

この Oracle ドライバの JAR ファイルは ojdbc6.jar です。


注 –

このドライバを使用する場合は、1 つの列に 2000 バイトを超えるデータを挿入できないことに注意してください。この問題を回避するには、OCI ドライバ (JDBC Type 2) を使用します。


次のように接続プールを設定します。

Oracle データベース用の OCI Oracle Type 2 ドライバ

この OCI Oracle ドライバの JAR ファイルは ojdbc14.jar です。LD_LIBRARY_PATH を介して共用ライブラリが使用可能であること、および ORACLE_HOME プロパティーが設定されていることを確認してください。次のように接続プールを設定します。