190
BEA WebLogic Server and WebLogic Express ® WebLogic JDBC BEA WebLogic Server 7.0 : 2004 10 13

BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

  • Upload
    trandat

  • View
    258

  • Download
    3

Embed Size (px)

Citation preview

Page 1: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

BEA

WebLogic Server™ and WebLogic Express®

WebLogic JDBC プログラマーズ ガイド

BEA WebLogic Server バージョン 7.0マニュアルの改訂 : 2004 年 10 月 13 日

Page 2: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

著作権

Copyright © 2002, 2003 BEA Systems, Inc. All Rights Reserved.

限定的権利条項

本ソフトウェアおよびマニュアルは、BEA Systems, Inc. 又は日本ビー・イー・エー・システムズ株式会社 (以下、「BEA」といいます ) の使用許諾契約に基づいて提供され、その内容に同意する場合にのみ使用することができ、同契約の条項通りにのみ使用またはコピーすることができます。

同契約で明示的に許可されている以外の方法で同ソフトウェアをコピーすることは法律に違反し

ます。このマニュアルの一部または全部を、BEA からの書面による事前の同意なしに、複写、複製、翻訳、あるいはいかなる電子媒体または機械可読形式への変換も行うことはできません。

米国政府による使用、複製もしくは開示は、BEA の使用許諾契約、および FAR 52.227-19 の「Commercial Computer Software-Restricted Rights」条項のサブパラグラフ (c)(1)、DFARS 252.227-7013 の「Rights in Technical Data and Computer Software」条項のサブパラグラフ (c)(1)(ii) 、NASA FAR 補遺 16-52.227-86 の「Commercial Computer Software--Licensing」条項のサブパラグラフ (d)、もしくはそれらと同等の条項で定める制限の対象となります。

このマニュアルに記載されている内容は予告なく変更されることがあり、また BEA による責務を意味するものではありません。本ソフトウェアおよびマニュアルは「現状のまま」提供され、商

品性や特定用途への適合性を始めとする (ただし、これらには限定されない ) いかなる種類の保証も与えません。さらに、BEA は、正当性、正確さ、信頼性などについて、本ソフトウェアまたはマニュアルの使用もしくは使用結果に関していかなる確約、保証、あるいは表明も行いません。

商標または登録商標

BEA、Jolt、Tuxedo、および WebLogic は BEA Systems, Inc. の登録商標です。BEA Builder、BEA Campaign Manager for WebLogic、BEA eLink、BEA Manager、BEA WebLogic Commerce Server、BEA WebLogic Enterprise、BEA WebLogic Enterprise Platform、BEA WebLogic Express、BEA WebLogic Integration、BEA WebLogic Personalization Server、BEA WebLogic Platform、BEA WebLogic Portal、BEA WebLogic Server、BEA WebLogic Workshop および How Business Becomes E-Business は、BEA Systems, Inc. の商標です。

その他の商標はすべて、関係各社がその権利を有します。

WebLogic JDBC プログラマーズ ガイド

パート番号 マニュアルの日付 ソフトウェアのバージョン

なし 2004 年 4 月 8 日 BEA WebLogic Server バージョン 7.0

Page 3: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

目次

このマニュアルの内容対象読者.............................................................................................................. xiie-docs Web サイト ............................................................................................. xiiこのマニュアルの印刷方法 ............................................................................... xii関連情報.............................................................................................................xiiiサポート情報 .....................................................................................................xiii表記規則............................................................................................................. xiv

1. WebLogic JDBC の概要JDBC の概要......................................................................................................1-1

JDBC ドライバと WebLogic Server の使用 ....................................................1-2

JDBC ドライバのタイプ ...........................................................................1-2

WebLogic Server JDBC ドライバの表......................................................1-3

WebLogic Server 2 層 JDBC ドライバ......................................................1-4WebLogic jDriver for Oracle...............................................................1-4

WebLogic jDriver for Microsoft SQL Server......................................1-4

WebLogic Server JDBC 多層ドライバ......................................................1-5

WebLogic RMI ドライバ....................................................................1-5

WebLogic Pool ドライバ ....................................................................1-6

WebLogic JTS ドライバ .....................................................................1-6

サードパーティ ドライバ..........................................................................1-6

Sybase jConnect ドライバ ..................................................................1-7

Oracle Thin ドライバ ..........................................................................1-7

接続プールの概要 .............................................................................................1-7

サーバサイド アプリケーションでの接続プールの使い方 ....................1-9

クライアントサイド アプリケーションでの接続プールの使い方 .......1-10

マルチプールの概要 ........................................................................................1-10

クラスタ化された JDBC の概要 ....................................................................1-11

DataSource の概要 ...........................................................................................1-11JDBC API.........................................................................................................1-12

JDBC 2.0 ..........................................................................................................1-12

WebLogic JDBC プログラマーズ ガイド iii

Page 4: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

プラットフォーム............................................................................................1-12

2. WebLogic JDBC のコンフィグレーションと管理接続プールのコンフィグレーションと使い方 ................................................2-2

接続プールを使用するメリット ...............................................................2-2

起動時の接続プールの作成 .......................................................................2-3

正しい接続数によるサーバのロックアップの回避..........................2-3

接続プールのコンフィグレーションにおけるデータベース パスワード...................................................................................................2-4

接続プールの制限事項 .......................................................................2-5

JDBC 接続プールの接続の更新に関する注意事項 ..........................2-6

JDBC接続プールのテスト機能の強化 .....................................................2-6

データベース接続消失後の接続テストでの遅延を最小限に抑える..2-7

接続テスト失敗後の接続要求の遅延を最小限に抑える ..................2-8

secondsToTrustAnIdlePoolConnection を使用して接続要求の遅延を最小限に抑える............................................................................2-9

接続プールの動的作成 ............................................................................2-10

動的接続プールのサンプル コード.........................................................2-11

パッケージをインポートする ..........................................................2-12

管理 MBeanHome をルックアップする ..........................................2-12

サーバ MBean を取得する ...............................................................2-12

接続プール MBean を作成する........................................................2-12

接続プール プロパティを設定する .................................................2-12

対象を追加する .................................................................................2-13

DataSource を作成する .....................................................................2-13

動的接続プールと DataSource を削除する .....................................2-14

接続プールの管理 ....................................................................................2-15

プールに関する情報の取得 ..............................................................2-15

接続プールの無効化 .........................................................................2-16

接続プールの縮小 .............................................................................2-16

接続プールの停止 .............................................................................2-17

プールのリセット .............................................................................2-17

weblogic.jdbc.common.JdbcServices と weblogic.jdbc.common.Pool クラス (非推奨 ) の使用 ...............................................................................2-18

アプリケーション スコープの JDBC 接続プール.........................................2-19

iv WebLogic JDBC プログラマーズ ガイド

Page 5: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

マルチプールのコンフィグレーションと使い方 ..........................................2-20

マルチプールの機能 ................................................................................2-21

マルチプール アルゴリズムの選択 ........................................................2-21

高可用性 ............................................................................................2-21

ロード バランシング ........................................................................2-22

マルチプールのフェイルオーバの拡張 ..................................................2-22

接続プールが失敗したときの接続要求の転送の改良 ....................2-23

マルチプール内の失敗した接続プールが回復するときの自動的な再

有効化 .........................................................................................2-23

マルチプールの使用されている接続プールのフェイルオーバの有効

化 ................................................................................................2-24

コールバックによるマルチプールのフェイルオーバの制御 ........2-25

コールバックによるマルチプールのフェイルバックの制御 ........2-29

マルチプール フェイルオーバの制限事項と要件..................................2-31

フェイルオーバを有効にするための予約時の接続のテスト ........2-31

使用中の接続ではフェイルオーバは行われない ...........................2-31

DataSource のコンフィグレーションと使い方 .............................................2-32

DataSource オブジェクトにアクセスするパッケージのインポート....2-33

DataSource を使用したクライアント接続の取得 ..................................2-33

コード例 ............................................................................................2-34

JDBC データ ソース ファクトリ ............................................................2-34

3. JDBC アプリケーションのパフォーマンス チューニングJDBC パフォーマンスの概要 ...........................................................................3-1

WebLogic のパフォーマンス向上機能 ............................................................3-1

接続プールによるパフォーマンスの向上 ................................................3-2

Prepared Statement とデータのキャッシング...........................................3-2

ベスト パフォーマンスのためのアプリケーション設計 ...............................3-3

1. データをできるだけデータベースの内部で処理する .........................3-3

2. 組み込み DBMS セットベース処理を使用する...................................3-4

3. クエリを効率化する ..............................................................................3-4

4. トランザクションを単一バッチにする ................................................3-6

5. DBMS トランザクションがユーザ入力に依存しないようにする .....3-7

6. 同位置更新を使用する...........................................................................3-8

7. 操作データをできるだけ小さくする....................................................3-8

WebLogic JDBC プログラマーズ ガイド v

Page 6: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

8. パイプラインと並行処理を使用する....................................................3-9

4. WebLogic 多層 JDBC ドライバの使い方WebLogic RMI ドライバの使い方 ...................................................................4-1

WebLogic RMI ドライバを使用するための WebLogic Server の設定 ...4-2

RMI ドライバを使用するサンプル クライアント コード ......................4-2

必要なパッケージをインポートする.................................................4-3

データベース接続を取得する ............................................................4-3

JNDI ルックアップを使用した接続の取得 .......................................4-3

WebLogic RMI ドライバだけを使用して接続を取得する...............4-4

WebLogic RMI ドライバによる行キャッシング .....................................4-5

WebLogic RMI ドライバによる行キャッシングの重要な制限事項..4-6

WebLogic JTS ドライバの使い方 ....................................................................4-7

JTS ドライバを使用するサンプル クライアント コード........................4-8

WebLogic Pool ドライバの使い方 ................................................................4-10

5. WebLogic Server でのサードパーティ ドライバの使い方サードパーティ JDBC ドライバの概要 ...........................................................5-1

サードパーティの JDBC ドライバに対する環境設定 ....................................5-4

Windows でのサードパーティ JDBC ドライバの CLASSPATH ...........5-4

UNIX でのサードパーティ JDBC ドライバの CLASSPATH.................5-5

Oracle Thin Driver の変更または更新.......................................................5-5

Oracle Thin Driver 9.x および 10g でのパッケージの変更 ..............5-6

nls_charset12.zip による文字セットのサポート ...............................5-7

Sybase jConnect Driver の更新 ..................................................................5-7

IBM Infomix JDBC Driver のインストールと使い方 ..............................5-8

IBM Infomix JDBC Driver 使用時の接続プール属性 .......................5-9

IBM Infomix JDBC Driver のプログラミング上の注意 .................5-11

Microsoft SQL Server 2000 Driver for JDBC のインストールと使い方...5-11

Microsoft SQL Server Driver for JDBC の Windows システムへのインストール .....................................................................................5-12

Microsoft SQL Server Driver for JDBC の UNIX システムへのインストール .........................................................................................5-12

Microsoft SQL Server Driver for JDBC 使用時の接続プール属性 .5-13

vi WebLogic JDBC プログラマーズ ガイド

Page 7: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

サードパーティ ドライバを使用した接続の取得 .........................................5-14

サードパーティ ドライバでの接続プールの使い方 ..............................5-14

接続プールと DataSource の作成 ....................................................5-14

JNDI を使用した接続の取得............................................................5-15

接続プールからの物理的な接続の取得 ..................................................5-16

物理的な接続を取得するサンプル コード ......................................5-17

物理的な接続を使用する際の制限事項...........................................5-19

Oracle 拡張機能と Oracle Thin Driver の使用 ...............................................5-19

Oracle JDBC 拡張機能の使用時の制限 ..................................................5-20

Oracle 拡張機能から JDBC インタフェースにアクセスするサンプル コード........................................................................................................5-21

Oracle 拡張機能へアクセスするパッケージをインポートする ....5-21

接続を確立する .................................................................................5-22

デフォルトの行プリフェッチ値を取得する ...................................5-22

ARRAY によるプログラミング..............................................................5-23

ARRAY を取得する .........................................................................5-24

データベースで ARRAY を更新する..............................................5-24

Oracle Array 拡張機能メソッドを使用する ....................................5-25

STRUCT によるプログラミング ............................................................5-25

STRUCT を取得する ........................................................................5-26

OracleStruct 拡張機能メソッドを使用する.....................................5-27

STRUCT 属性を取得する ................................................................5-27

STRUCT によってデータベース オブジェクトを更新する ..........5-29

データベース オブジェクトを作成する..........................................5-29

STRUCT 属性を自動バッファリングする......................................5-30

REF によるプログラミング ....................................................................5-30

REF を取得する ................................................................................5-31

OracleRef 拡張機能メソッドを使用する ........................................5-32

値を取得する.....................................................................................5-32

REF 値を更新する ............................................................................5-33

データベースで REF を作成する ....................................................5-35

BLOB と CLOB によるプログラミング ...............................................5-36

DBMS から BLOB ロケータを選択するクエリを実行する ..........5-36

WebLogic Server java.sql オブジェクトを宣言する .......................5-36

SQL 例外ブロックを開始する .........................................................5-36

WebLogic JDBC プログラマーズ ガイド vii

Page 8: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

PreparedStatement を使用した CLOB 値の更新 .............................5-37

Oracle 仮想プライベート データベースによるプログラミング ..................5-37

Oracle 拡張機能インタフェースとサポートされるメソッドの表 ...............5-39

6. dbKona (非推奨 ) の使い方dbKona の概要 ...................................................................................................6-1

多層コンフィグレーションでの dbKona..................................................6-2

dbKona と JDBC ドライバの相互作用 .....................................................6-2

dbKona と WebLogic Event の相互作用 ...................................................6-3

dbKona アーキテクチャ ............................................................................6-3dbKona API ........................................................................................................6-4

dbKona API リファレンス .........................................................................6-4

dbKona オブジェクトとそれらのクラス ..................................................6-5

dbKona のデータ コンテナ オブジェクト.........................................6-5DataSet .................................................................................................6-6

QueryDataSet .......................................................................................6-6

TableDataSet........................................................................................6-7

EventfulTableDataSet (非推奨 ) .......................................................6-10Record ................................................................................................6-12

Value ..................................................................................................6-13

dbKona のデータ記述オブジェクト ................................................6-14Schema...............................................................................................6-14

Column...............................................................................................6-15

KeyDef ...............................................................................................6-15

SelectStmt ..........................................................................................6-16

dbKona のその他オブジェクト ........................................................6-17

例外 ....................................................................................................6-17

定数 ....................................................................................................6-17

エンティティの関係 ........................................................................................6-18

継承関係 ............................................................................................6-18

所有関係 ............................................................................................6-18

dbKona の実装 .................................................................................................6-19

dbKona を使用した DBMS へのアクセス ..............................................6-19

手順 1. パッケージのインポート .....................................................6-19

手順 2. 接続確立用のプロパティの設定..........................................6-20

viii WebLogic JDBC プログラマーズ ガイド

Page 9: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

手順 3. DBMS との接続の確立 ........................................................6-20

クエリの準備、およびデータの検索と表示 ..........................................6-21

手順 1. データ検索用のパラメータの設定......................................6-21

手順 2. クエリ結果用の DataSet の生成 ..........................................6-22

手順 3. 結果の取り出し ....................................................................6-23

手順 4. TableDataSet の Schema の検査 ..........................................6-24

手順 5. htmlKona を使用したデータの検査 ....................................6-24

手順 6. htmlKona を使用した結果の表示........................................6-25

手順 7. DataSet および接続のクローズ ...........................................6-26

SelectStmt オブジェクトを使用したクエリの作成................................6-28

手順 1. SelectStmt パラメータの設定 ..............................................6-28

手順 2. QBE を使用したパラメータの修正 ....................................6-29

SQL 文を使用した DBMS データの変更 ...............................................6-29

手順 1. SQL 文の記述 .......................................................................6-30

手順 1. SQL 文の記述 .......................................................................6-30

手順 2. 各 SQL 文の実行 ..................................................................6-30

手順 3. htmlKona を使用した結果の表示........................................6-31

KeyDef を使用した DBMS データの変更..............................................6-34

手順 1. KeyDef とその属性の作成...................................................6-34

手順 2. KeyDef を使用した TableDataSet の作成 ...........................6-35

手順 3. TableDataSet へのレコードの挿入......................................6-35

手順 4. TableDataSet でのレコードの更新 ......................................6-36

手順 5. TableDataSet からのレコードの削除 ..................................6-36

手順 6. TableDataSet の保存の詳細 .................................................6-37

保存前の Record 状態の確認............................................................6-37

手順 7. 変更内容の検証 ....................................................................6-38

コードのまとめ .................................................................................6-38

dbKona での JDBC PreparedStatement の使い方 ...................................6-40

dbKona でのストアド プロシージャの使い方 .......................................6-41

手順 1. ストアド プロシージャの作成 ............................................6-41

手順 2. パラメータの設定 ................................................................6-42

手順 3. 結果の検査............................................................................6-42

画像およびオーディオ用バイト配列の使い方 ......................................6-42

手順 1. 画像データの検索と表示 .....................................................6-43

手順 2. データベースへの画像の挿入 .............................................6-43

WebLogic JDBC プログラマーズ ガイド ix

Page 10: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle シーケンス用の dbKona の使い方...............................................6-44

手順 1. dbKona Sequence オブジェクトの作成 ...............................6-44

手順 2. dbKona からの Oracle サーバのシーケンスの作成と破棄 6-44

手順 3. Sequence の使い方 ...............................................................6-45

コードのまとめ .................................................................................6-45

7. JDBC 接続のテストとトラブルシューティングJDBC 接続のモニタ ..........................................................................................7-1

コマンドラインからの DBMS 接続の有効性の検証 .....................................7-2

構文 ......................................................................................................7-2

引数 ......................................................................................................7-2

サンプル ..............................................................................................7-3

JDBC のトラブルシューティング....................................................................7-4

JDBC 接続 ..................................................................................................7-4Windows ..............................................................................................7-4

UNIX....................................................................................................7-5

コードセットのサポート ...........................................................................7-5

UNIX での Oracle に関わる他の問題 .......................................................7-5

UNIX でのスレッド関連の問題 ................................................................7-6

JDBC オブジェクトを閉じる ....................................................................7-7

JDBC オブジェクトの破棄.................................................................7-7

UNIX での共有ライブラリに関連する問題のトラブルシューティング .....7-8WebLogic jDriver for Oracle ......................................................................7-8

Solaris..........................................................................................................7-9

HP-UX.........................................................................................................7-9

不適切なファイル パーミッションの設定 ........................................7-9

不適切な SHLIB_PATH ...................................................................7-10

x WebLogic JDBC プログラマーズ ガイド

Page 11: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

このマニュアルの内容

このマニュアルでは、 WebLogic Server™ における JDBC の使い方について説明します。

このマニュアルの構成は次のとおりです。

� 第 1 章 「WebLogic JDBC の概要」 では、 JDBC コンポーネン ト と JDBC API の概要について説明します。

� 第 2 章 「WebLogic JDBC のコンフ ィ グレーシ ョ ン と管理」 では、 WebLogic Server Java アプ リ ケーシ ョ ンでの JDBC の使い方について説明します。

� 第 3 章 「JDBC アプリ ケーシ ョ ンのパフォーマンス チューニング」 では、JDBC アプ リ ケーシ ョ ンから最高のパフォーマンスを得る方法について説明します。

� 第 4 章 「WebLogic 多層 JDBC ド ラ イバの使い方」 では、 WebLogic Server を使用するための WebLogic RMI ド ラ イバおよび JDBC ク ラ イアン トの設定方法について説明します。

� 第 5 章 「WebLogic Server でのサードパーテ ィ ド ラ イバの使い方」 では、WebLogic Server でサードパーティ製ド ライバを設定および使用する方法について説明します。

� 第 6 章 「dbKona (非推奨 ) の使い方」 では、 アプ リ ケーシ ョ ンで dbKone クラスを使用する方法について説明します。

� 第 7 章 「JDBC 接続のテス ト と ト ラブルシューティ ング」 では、 WebLogic Server で JDBC を使用する際の ト ラブルシューティングのヒ ン ト を紹介します。

WebLogic JDBC プログラマーズ ガイ ド xi

Page 12: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

対象読者

このマニュアルは、 Sun Microsystems, Inc. の Java 2 Platform, Enterprise Edition (J2EE) を使用して e- コマース アプリ ケーシ ョ ンを構築するアプ リ ケーシ ョ ン開発者を対象と しています。 Web 技術、 オブジェ ク ト指向プログラ ミ ング技術、および Java プログラ ミ ング言語に読者が精通している こ と を前提と して書かれてます。

e-docs Web サイ ト

BEA 製品のドキュ メ ン ト は、 BEA の Web サイ ト で入手できます。 BEA のホーム ページで [製品のドキュ メ ン ト ] をク リ ッ ク します。

このマニュアルの印刷方法

Web ブラウザの [ ファ イル|印刷 ] オプシ ョ ンを使用する と、 Web ブラウザからこのマニュアルを一度に 1 章ずつ印刷できます。

このマニュアルの PDF 版は、 WebLogic Server の Web サイ ト で入手できます。PDF を Adobe Acrobat Reader で開く と、 マニュアルの全体 ( または一部分 ) を書籍の形式で印刷できます。 PDF を表示するには、 WebLogic Server ドキュ メ ン トのホーム ページを開き、 [ ドキュ メ ン トのダウンロード ] をク リ ッ ク して、 印刷するマニュアルを選択します。

Adobe Acrobat Reader は Adobe の Web サイ ト (http://www.adobe.co.jp) で無料で入手できます。

xii WebLogic JDBC プログラマーズ ガイ ド

Page 13: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

関連情報

BEA の Web サイ ト では、 WebLogic Server の全マニュアルを提供しています。JDBC の詳細については、 Sun Microsystems Javasoft Web サイ ト にある JDBC セクシ ョ ンを参照して ください。

サポート情報

BEA のドキュ メ ン トに関するユーザからのフ ィードバッ クは弊社にと って非常に重要です。質問や意見などがあれば、電子メールで [email protected] までお送り ください。 寄せられた意見については、 WebLogic Server のドキュ メン ト を作成および改訂する BEA の専門の担当者が直に目を通します。

電子メールのメ ッセージには、 ご使用のソフ ト ウェアの名前とバージ ョ ン、 およびドキュ メン ト のタイ トルと日付をお書き添えください。 本バージ ョ ンの BEA WebLogic Server について不明な点がある場合、 または BEA WebLogic Server のインス トールおよび動作に問題がある場合は、 BEA WebSupport (www.bea.com) を通じて BEA カスタマ サポート までお問い合わせください。 カスタマ サポートへの連絡方法については、 製品パッケージに同梱されているカスタマ サポート カードにも記載されています。

カスタマ サポートでは以下の情報をお尋ねしますので、 お問い合わせの際はあらかじめご用意ください。

� お名前、 電子メール アドレス、 電話番号、 ファ ク ス番号

� 会社の名前と住所

� お使いの機種と コード番号

� 製品の名前とバージ ョ ン

� 問題の状況と表示されるエラー メ ッセージの内容

WebLogic JDBC プログラマーズ ガイ ド xiii

Page 14: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

表記規則

このマニュアルでは、 全体を通して以下の表記規則が使用されています。

表記法 適用

〔Ctrl〕 +〔Tab〕

複数のキーを同時に押すこ とを示す。

斜体 強調または書籍のタイ トルを示す。

等幅テキスト コード サンプル、 コマンド とそのオプシ ョ ン、 データ構造体とそのメンバー、 データ型、 ディレク ト リ、 およびファ イル名とその

拡張子を示す。 等幅テキス トはキーボードから入力するテキス ト

も示す。

例 :import java.util.Enumeration;

chmod u+w *

config/examples/applications

.java

config.xml

float

斜体の等幅テ

キスト

コード内の変数を示す。

例 :String CustomerName;

すべて大文

字のテキス

デバイス名、 環境変数、 および論理演算子を示す。

例 :

LPT1

BEA_HOME

OR

{ } 構文の中で複数の選択肢を示す。

xiv WebLogic JDBC プログラマーズ ガイ ド

Page 15: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

[ ] 構文の中で任意指定の項目を示す。

例 :

java utils.MulticastTest -n name -a address [-p portnumber] [-t timeout] [-s send]

| 構文の中で相互に排他的な選択肢を区切る。

例 :

java weblogic.deploy [list|deploy|undeploy|update] password {application} {source}

... コマン ド ラ インで以下のいずれかを示す。

� 引数を複数回繰り返すこ とができる。

� 任意指定の引数が省略されている。

� パラ メータや値などの情報を追加入力できる。

.

.

.

コード サンプルまたは構文で項目が省略されている こ と を示す。

表記法 適用

WebLogic JDBC プログラマーズ ガイ ド xv

Page 16: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

xvi WebLogic JDBC プログラマーズ ガイ ド

Page 17: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

1 WebLogic JDBC の概要

以下の節では JDBC コンポーネン ト と JDBC API の概要について説明します。

� 1-1 ページの 「JDBC の概要」

� 1-2 ページの 「JDBC ド ラ イバと WebLogic Server の使用」

� 1-7 ページの 「接続プールの概要」

� 1-10 ページの 「マルチプールの概要」

� 1-11 ページの 「ク ラスタ化された JDBC の概要」

� 1-11 ページの 「DataSource の概要」

� 1-12 ページの 「JDBC API」

� 1-12 ページの 「JDBC 2.0」

� 1-12 ページの 「プラ ッ ト フォーム」

JDBC の概要

Java Database Connectivity (JDBC) とは、 Java プログラ ミ ング言語で作成された一連のク ラス と インタフェースで構成された標準 Java API のこ とです。 アプ リ

ケーシ ョ ン、 ツール、 およびデータベースの開発者は、 JDBC を使用するこ とによ り、 データベース アプリ ケーシ ョ ンを作成した り、 SQL 文を実行した りできます。

JDBC は低レベルインタフェースであ り、 SQL コマンドを直接起動する (呼び出す ) ために使用されます。 また、 JDBC は Java Messaging Service (JMS) や Enterprise JavaBean (EJB) などの高レベルのインタフェース と ツールを構築するための基盤でもあ り ます。

WebLogic JDBC プログラマーズ ガイ ド 1-1

Page 18: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

1 WebLogic JDBC の概要

JDBC ドライバと WebLogic Server の使用

JDBC ド ラ イバは、 JDBC API のインタフェースと ク ラスを実装します。 以下の節では、 WebLogic Server で使用できる JDBC ド ラ イバ オプシ ョ ンについて説明

します。

JDBC ドライバのタイプ

WebLogic Server は、 以下のタイプの JDBC ド ラ イバを使用します。 これらのドライバが互いに連携する こ とによって、 データベース アクセスが提供されます。

� 2 層ド ラ イバ-接続プールとデータベース間の直接的なデータベース アクセスを提供します。 WebLogic Server は、 DBMS ベンダ固有の JDBC ド ラ イバ (WebLogic jDriver for Oracle、 および WebLogic jDriver for Microsoft SQL Server など ) を使用してバッ クエンド データベースに接続します。

� 多層ド ライバ - ベンダに依存しないデータベース アクセスを提供します。Java ク ラ イアン ト アプリ ケーシ ョ ンは多層ド ライバを使用して、 WebLogic Server でコンフ ィグレーシ ョ ンされた任意のデータベースにアクセスできます。 BEA は、 RMI、 Pool、 および JTS とい う 3 種類の多層ド ラ イバを提供しています。 WebLogic Server システムでは、 JNDI ルッ クアップを使用して接続プールとデータ ソースを接続する と きに、 その背後でこれらのド ラ イバを使用します。

WebLogic Server の中間層アーキテクチャ ( データ ソース、 および接続プール ) によ り、 データベース リ ソースを集中管理できます。 ベンダに依存しない多層 JDBC ド ラ イバを使用すれば、 購入したコンポーネン ト を自社の DBMS 環境によ り簡単に適合させ、 よ り移植性の高いコードを記述できます。

1-2 WebLogic JDBC プログラマーズ ガイ ド

Page 19: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

JDBC ド ライバと WebLogic Server の使用

WebLogic Server JDBC ドライバの表

次の表に、 WebLogic Server で使用する ド ライバの一覧を示します。

表 1-1 JDBC ドライバ

ドライバ

ドライバのタイプと名前 データベース接続性 ドキュメン ト ソース

2 層分散ト ラン

ザクシ ョ ン

のサポート

なし (XA 非対応 )

Type 2 ( ネイテ ィブ ラ イブラ リが必要 )

� WebLogic jDriver for Oracle

� サードパーテ ィ ド ラ イバ

Type 4 (pure Java)

� WebLogic jDriver for Microsoft SQL Server

� 以下のものを含むサー

ドパーテ ィ ド ラ イバOracle ThinSybase jConnect

ローカル ト ランザクシ ョ ンでの WebLogic Server と DBMS 間

『WebLogic JDBC プログラマーズ ガイ ド』 ( このマニュアル )

『管理者ガイ ド』 の 「JDBC 接続の管理」

『WebLogic jDriver for Oracle のコンフ ィ グレーシ ョ ン と使

い方』

『WebLogic jDriver for Microsoft SQL Server のコンフ ィグレーシ ョ ン と使い方』

2 層分散ト ラン

ザクシ ョ ン

のサポート

付き (XA 非対応 )

Type 2 ( ネイテ ィブ ラ イブラ リが必要 )

� WebLogic jDriver for Oracle XA

分散ト ランザクシ ョ ン

での WebLogic Server と DBMS 間

『WebLogic JTA プログラマーズ ガイ ド 』

『管理者ガイ ド』 の 「JDBC 接続の管理」

『WebLogic jDriver for Oracle のコンフ ィ グレーシ ョ ン と使

い方』

WebLogic JDBC プログラマーズ ガイ ド 1-3

Page 20: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

1 WebLogic JDBC の概要

WebLogic Server 2 層 JDBC ドライバ

以下の節では、 ベンダ固有の DBMS に接続するために WebLogic Server で使用される Type 2 および Type 4 の BEA 2 層ド ライバについて説明します。

WebLogic jDriver for Oracle

BEA の WebLogic jDriver for Oracle WebLogic Server の配布キッ ト の中に入っています。 このド ライバを使用するには、 Oracle ク ラ イアン トがインス トールされている必要があ り ます。 WebLogic jDriver for Oracle XA ド ラ イバは、 WebLogic jDriver for Oracle を分散ト ランザクシ ョ ン用に拡張します。 詳細については、

『WebLogic jDriver for Oracle のコンフ ィグレーシ ョ ン と使い方』 を参照して くだ

さい。

WebLogic jDriver for Microsoft SQL Server

WebLogic Server 配布キッ トに同梱の BEA WebLogic jDriver for Microsoft SQL Server は、 Microsoft SQL Server への接続を提供する pure-Java、 Type 4 JDBC ドラ イバです。 詳細については、 『WebLogic jDriver for Microsoft SQL Server のコンフ ィグレーシ ョ ンと使い方』 を参照して ください。

多層 Type 3

� WebLogic RMI ド ラ イバ

� WebLogic Pool ド ラ イバ

� WebLogic JTS (Type 3 以外 )

ク ラ イアン ト と WebLogic Server (接続プール ) 間。 RMI ド ライバは非推奨の t3 ド ライバの代わりに使用さ

れる。 JTS ド ラ イバは分散ト ランザクシ ョ ン

で使用される。 Pool および JTS ド ラ イバはサーバサイ ドのみ。

『WebLogic JDBC プログラマーズ ガイ ド 』 ( このマニュアル )

表 1-1 JDBC ドライバ

ドライバ

ドライバのタイプと名前 データベース接続性 ドキュメント ソース

1-4 WebLogic JDBC プログラマーズ ガイ ド

Page 21: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

JDBC ド ライバと WebLogic Server の使用

WebLogic Server JDBC 多層ドライバ

以下の節では、 アプ リ ケーシ ョ ンへのデータベース アクセスを提供する WebLogic 多層 JDBC ド ラ イバについて簡単に説明します。 これらのド ラ イバは、サーバ サイ ドのアプリ ケーシ ョ ン ( および RMI ド ラ イバのク ライアン ト アプ リ

ケーシ ョ ン ) で使用できますが、 JNDI ツ リーからデータ ソースをルッ クアップして、 接続プールからデータベース接続を確立するこ とをお勧めします。

各ド ライバの使用については、第 4 章 「WebLogic 多層 JDBC ド ラ イバの使い方」を参照して ください。

WebLogic RMI ドライバ

WebLogic RMI ド ラ イバは WebLogic Server 内で動作する多層 Type 3 Java Database Connectivity (JDBC) ド ラ イバです。 WebLogic RMI ド ラ イバを使用して、 データベース と接続プールを接続する こ と もできますが、 これはお勧めでき

る方法ではあ り ません。 BEA では、 JNDI ツ リーのデータ ソースをルッ クアップして、 接続プールからデータベース接続を確立するこ とをお勧めします。 以降、

データ ソースでは内部的に RMI ド ラ イバを使用するよ うにな り ます。 いずれの方法でも、 WebLogic RMI ド ラ イバは WebLogic と WebLogic JTS の各ド ライバ

を内部的に使用して、 接続プールを接続します。

また、 WebLogic Server ク ラスタ内でコンフ ィ グレーシ ョ ンされている場合は、

ク ラスタ化 JDBC 用に使用できます。 これによ り、 JDBC ク ラ イアン トは WebLogic ク ラスタのロード バランシング機能と ファ イルオーバ機能を活用でき

ます。

WebLogic RMI は、 サーバ サイ ド アプリ ケーシ ョ ン、 またはク ライアン ト アプリ ケーシ ョ ン と共に使用できます。

WebLogic ド ラ イバの使用については、 4-1 ページの 「WebLogic RMI ド ラ イバの使い方」 を参照して ください。

WebLogic JDBC プログラマーズ ガイ ド 1-5

Page 22: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

1 WebLogic JDBC の概要

WebLogic Pool ド ライバ

WebLogic Pool ド ラ イバを使用する と、 HTTP サーブレッ トや EJB などのサーバサイ ド アプリ ケーシ ョ ンから接続プールを利用できます。 WebLogic Pool ド ラ イバは、 サーバ サイ ド アプリ ケーシ ョ ンで直接使用できますが、 JNDI のルッ クアップによ り、 接続プールからデータベース接続を確立するこ とをお勧めしま

す。 WebLogic Server のデータ ソースでは、 WebLogic Pool ド ラ イバを内部的に使用して、 接続プールを接続します。

Pool ド ラ イバの使い方については、 『WebLogic HTTP サーブレ ッ ト プログラマーズ ガイ ド』 の 「プログラ ミ ング タスク」 の 「データベースへのアクセス」

を参照して ください。

WebLogic JTS ド ライバ

WebLogic JTS は WebLogic Pool ド ラ イバに似た多層 JDBC ド ラ イバです。 ただし、 1 つのデータベース インスタンスを使用する複数のサーバ間での分散ト ラン

ザクシ ョ ンで使用されます。 JTS ド ラ イバは 2 フェーズ コ ミ ッ ト を回避するため、 単一のデータベース インスタンスを使用する場合に限り WebLogic jDriver for Oracle XA ド ラ イバよ り効率的に動作します。 このド ラ イバは、 サーバ サイド アプリ ケーシ ョ ンでのみ使用します。

WebLogic JTS ド ラ イバの使用については、 4-7 ページの 「WebLogic JTS ド ラ イバの使い方」 を参照して ください。

サードパーティ ドライバ

WebLogic Server は、 以下の要件を満たすサードパーティ JDBC ド ラ イバと連携して動作します。

� スレ ッ ドセーフ

� JDBC API をサポート している ド ライバでは、 API の拡張もサポート されま

すが、 最低条件と して JDBC API がサポート されていなければな り ません。

� JDBC で EJB ト ランザクシ ョ ン呼び出しを実装する

1-6 WebLogic JDBC プログラマーズ ガイ ド

Page 23: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

接続プールの概要

これらのド ラ イバは通常、 WebLogic Server をコンフ ィグレーシ ョ ンして、 接続

プールに物理的なデータベース接続を作成する と きに使用します。

Sybase jConnect ドライバ

2 層 Sybase jConnect Type 4 ド ラ イバは、 WebLogic Server 配布キッ ト に付属しています。 このド ライバは、 Sybase Web サイ トから最新版を入手して、 使用してください。 WebLogic Server でのこのド ラ イバの使い方の詳細については、 5-1 ページの 「WebLogic Server でのサードパーティ ド ラ イバの使い方」 を参照してください。

Oracle Thin ドライバ

WebLogic Server に付属する 2 層 Oracle Thin Type 4 ド ラ イバは、 WebLogic Server から Oracle DBMS への接続を提供します。 Oracle Thin ド ラ イバは、Oracle Web サイ トから最新版を入手して、 使用して ください。 WebLogic Server でのこのド ラ イバの使い方の詳細については、 5-1 ページの 「WebLogic Server でのサードパーティ ド ラ イバの使い方」 を参照して ください。

接続プールの概要

WebLogic Server では、 DBMS への接続にそのまま利用できる接続プールをコンフ ィグレーシ ョ ンできます。 ク ライアン ト 、 およびサーバ サイ ドのアプ リ ケー

シ ョ ンでは、 JNDI ツ リーにある DataSource を介して接続プールから接続を利用する こ と ( 推奨方法 ) も、 多層 WebLogic ド ラ イバを介して接続を利用するこ ともできます。 接続が完了する と、 アプ リ ケーシ ョ ンによ り、 接続プールに接続が

返されます。

WebLogic JDBC プログラマーズ ガイ ド 1-7

Page 24: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

1 WebLogic JDBC の概要

図 1-1 接続プール アーキテクチャへの WebLogic Server の接続

接続プールが起動される と、 指定された数の物理的なデータベース接続が作成さ

れます。 起動時に接続を確立しておく こ とによ り、 接続プールでは個々のアプリ

ケーシ ョ ンごとにデータベース接続を作成するためのオーバーヘッ ドを解消でき

ます。

接続プールを使って WebLogic Server から DBMS へ物理的に接続するには、2 層 JDBC ド ラ イバが必要にな り ます。 2 層ド ライバには、 WebLogic jDrivers、 または JDBC ド ラ イバ (Sybase jConnect ド ラ イバ、または Oracle Thin ド ラ イバ ) のいずれかを使用できます。 次の表に、 接続プールを使用する場合のメ リ ッ ト をま と

めています。

1-8 WebLogic JDBC プログラマーズ ガイ ド

Page 25: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

接続プールの概要

この節は、 接続プールの概要です。 詳細については、 2-2 ページの 「接続プール

のコンフ ィグレーシ ョ ン と使い方」 を参照して ください。

サーバサイド アプリケーシ ョンでの接続プールの使い方

サーバ サイ ド アプリ ケーシ ョ ンからデータベースにアクセスする場合は、 Java Naming and Directory Interface (JNDI) ツ リーの DataSource、 または WebLogic Pool ド ラ イバのいずれかを使用します。 2 フェーズ コ ミ ッ ト ト ランザクシ ョ ン

の場合は、 JNDI ツ リーの TxDataSource を使用するか、 WebLogic Server JDBC/XA ド ラ イバ (WebLogic jDriver for Oracle/XA) を使用します。 1 つのデー

表 1-2 接続プールを使用するメ リ ッ ト

接続プールのメ リ ッ ト 実現される機能

時間の節約、 オーバーヘッ

ドの削減

DBMS 接続は非常に低速である。 接続プールを使用する と、 接続が確立されてユーザが利

用できるよ うになる。 代わりの手段は、 アプ

リケーシ ョ ンが必要に応じて独自の JDBC 接続を行う こ とである。 DBMS は、 実行時にユーザからの接続試行を処理する場合よ り専

用接続を使う方が高速に動作する。

DBMS ユーザの管理 システム上で複数の並列 DBMS 接続を管理できる。 これは、 DBMS 接続にライセンス上の制限があるか、 または リ ソースに不安がある

場合に重要となる。

アプ リケーシ ョ ンは DBMS ユーザ名、 パスワード、 および DBMS の場所を認識する必要も、 伝送する必要もない。

DBMS 永続性オプシ ョ ンを使用できる

DBMS 永続性オプシ ョ ンと EJB のよ うな API を使う場合、 WebLogic Server が JDBC 接続を管理するにはプールが必須となる。 これによ

り、 EJB ト ランザクシ ョ ンが正確かつ完全にコミ ッ ト またはロール バッ ク される。

WebLogic JDBC プログラマーズ ガイ ド 1-9

Page 26: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

1 WebLogic JDBC の概要

タベース インスタンスを使う複数のサーバ間での分散ト ランザクシ ョ ンの場合

は、 JNDI ツ リーの TxDataSource、 または JTS ド ラ イバを使用します。WebLogic 多層ド ライバではな く、 JNDI ツ リー、 および DataSource を使用して、接続プールにアクセスするこ とをお勧めします。

クライアントサイド アプリケーションでの接続プールの使い方

BEA は、 ク ライアン トサイ ドの多層 JDBC 用に RMI ド ラ イバを提供しています。RMI ド ラ イバでは、 Java 2 Enterprise Edition (J2EE) 仕様を使って標準ベースのアプローチが利用できます。 新しいデプロイ メ ン トの場合は、 RMI ド ラ イバの代わりに、 JNDI ツ リーの DataSource を使用する こ と をお勧めします。

WebLogic RMI ド ラ イバは Type 3、 多層 JDBC ド ラ イバで、 RMI と DataSource オブジェ ク ト を使ってデータベース接続を作成します。 このド ラ イバはク ラスタ

化された JDBC にも対応し、 WebLogic Server ク ラスタのロード バランシングおよびフェイルオーバ機能を活用します。 DataSource オブジェ ク ト を定義して、ト ランザクシ ョ ン サポート を有効にした り無効にした りできます。

マルチプールの概要

JDBC マルチプールは、 「接続プールのプール」 であ り、 高可用性、 またはロード バランス アルゴ リ ズムのいずれかに従って設定できます。 マルチプールは、接続プールと同じ方法で使用できます。 アプ リ ケーシ ョ ンで接続が必要になる場

合、 マルチプールでは選択されたアルゴ リ ズムに従って、 どの接続プールから接続を提供するかを特定します。 マルチプールは、 複数サーバ コンフ ィグレーシ ョ ンまたは分散ト ランザクシ ョ ンではサポート されません。

WebLogic Server 構成で使用するマルチプールごとに、 次のいずれかのアルゴ リズム オプシ ョ ンを選択できます。

� 高可用性 - 接続プールは順序付けされた リ ス ト と して設定され、 順番に使用

されます。

1-10 WebLogic JDBC プログラマーズ ガイ ド

Page 27: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

クラスタ化された JDBC の概要

� ロード バランシング - リ ス ト されたすべてのプールはラウンド ロビン方式でアクセスされます。

詳細については、 2-20 ページの 「マルチプールのコンフ ィ グレーシ ョ ン と使い

方」 を参照して ください。

クラスタ化された JDBC の概要

WebLogic Server を使用する と、 データ ソース、 接続プール、 マルチプールなどの JDBC オブジェ ク ト を ク ラスタ化して、 ク ラスタにホス ト されるアプ リ ケー

シ ョ ンの可用性を高めるこ とができます。 ク ラスタ用にコンフ ィグレーシ ョ ンす

る各 JDBC オブジェ ク トは、 ク ラスタ内の各管理対象サーバに存在する必要があり ます。 JDBC オブジェク ト をコンフ ィ グレーシ ョ ンする と きに、 それらをク ラ

スタに割り当てます。

ク ラスタ環境での JDBC オブジェ ク トについては、 『WebLogic Server ク ラスタ ユーザーズ ガイ ド』 の 「J DBC 接続」 を参照して ください。

DataSource の概要

ク ラ イアン ト、 およびサーバ サイ ドの JDBC アプリ ケーシ ョ ンでは、

DataSource を使用して、 DBMS 接続を確立するこ とができます。 DataSource は、アプ リ ケーシ ョ ンと接続プールの間のインタフェースです。 各データ ソース (DBMS インスタンスなど ) には、 独自の DataSource オブジェ ク ト が必要です。DataSource オブジェ ク トは、 分散ト ランザクシ ョ ンをサポートする DataSource ク ラス と して実装できます。 詳細については、 2-32 ページの 「DataSource のコンフ ィグレーシ ョ ン と使い方」 を参照して ください。

WebLogic JDBC プログラマーズ ガイ ド 1-11

Page 28: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

1 WebLogic JDBC の概要

JDBC API

JDBC アプリ ケーシ ョ ンを作成するには、 java.sql API を使用して、 データ ソースへの接続の確立、 クエ リの送信、 データ ソースへの文の更新、 および結果の処理に必要なク ラス オブジェク ト を作成します。 各 JDBC インタフェースの詳細については、 java.sql Javadoc の標準 JDBC インタフェースを参照して ください。 また次の WebLogic の Javadoc も参照して ください。

� weblogic.jdbc.pool

� weblogic.management.configuration ( データ ソース、 接続プール、 およびマルチプールを作成する Mbean)

JDBC 2.0

WebLogic Server は、 JDBC 2.0 をサポートする JDK 1.3.1 を使用します。

プラッ ト フォーム

サポート されるプラ ッ ト フォームは、 ベンダ固有の DBMS と ド ラ イバによって異な り ます。 現時点での情報については、 「動作確認状況」 を参照して ください。

1-12 WebLogic JDBC プログラマーズ ガイ ド

Page 29: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーションと管理

WebLogic Server Administration Console を使用して、 JDBC などの WebLogic Server の機能を有効化した り、 コンフ ィ グレーシ ョ ンやモニタを行った りできま

す。

以下の節では、 JDBC 接続コンポーネン トのプログラ ミ ング方法について説明します。

� 2-2 ページの 「接続プールのコンフ ィ グレーシ ョ ン と使い方」

� 2-19 ページの 「アプ リ ケーシ ョ ン スコープの JDBC 接続プール」

� 2-20 ページの 「マルチプールのコンフ ィグレーシ ョ ン と使い方」

� 2-32 ページの 「DataSource のコンフ ィグレーシ ョ ン と使い方」

詳細については、 以下を参照して ください。

� 『管理者ガイ ド』 の 「JDBC 接続の管理」。 Administration Console およびコマンド ライン インタフェースを使用して、 接続をコンフ ィグレーシ ョ ンおよび管理する方法について説明します。

� Administration Console オンラインヘルプ。 Administration Console を使用して特定のコンフ ィ グレーシ ョ ン タスクを行う方法について説明します。

WebLogic JDBC プログラマーズ ガイ ド 2-1

Page 30: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

接続プールのコンフ ィグレーシ ョンと使い

接続プールとは、 データベースへの同一の JDBC 接続の集ま りです。 データベースへの接続は、 接続プールを登録する と実行されます。 この実行は、 WebLogic Server の起動時または実行時に動的に行われます。 アプ リ ケーシ ョ ンはプールか

ら接続を 「借 り 」、 使用後に接続を閉じるこ とでプールに接続を返します。 1-7 ページの 「接続プールの概要」 も参照して ください。

接続プールを使用するメ リ ッ ト

接続プールには、 数多くの性能およびアプリ ケーシ ョ ン設計上の利点があ り ます。

� 接続プールの使用は、 データベースへのアクセスが必要になるたびにク ライ

アン ト別に新しい接続を確立するよ り もはるかに効率的です。

� アプリ ケーシ ョ ンで DBMS パスワードなどの詳細をハード コード化する必要があ り ません。

� DBMS への接続数を制限できます。 DBMS への接続数に対するライセンス制限を管理する場合に便利です。

� アプリ ケーシ ョ ンのコードを変更せずに、 使用中の DBMS を変更できます。

接続プールのコンフ ィグレーシ ョ ンの属性は Administration Console オンラ イン ヘルプで定義されます。 WebLogic Server の実行中に接続プールをプログラムで作成する場合に使用できる API もあ り ます。 2-10 ページの 「接続プールの動的

作成」 を参照して ください。 コマンド ラインを使用する こ と もできます。 『管理者ガイ ド』 の 「WebLogic Server コマンド ライン インタフェース リ フ ァレンス」を参照して ください。

2-2 WebLogic JDBC プログラマーズ ガイ ド

Page 31: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

接続プールのコンフ ィ グレーシ ョ ンと使い方

起動時の接続プールの作成

起動 (静的 ) 接続プールを作成するには、 Administration Console で属性とパー

ミ ッシ ョ ンを定義してから、 WebLogic Server を起動します。 WebLogic Server は、 起動処理中にデータベースに対する JDBC 接続を開き、 接続をプールに追加します。

Administration Console で接続プールを設定するには、 左ペインに表示されるナビゲーシ ョ ン ツ リーでサービス と JDBC ノードを展開し、 接続プールを選択します。 右ペインには、 既存の接続プールの リ ス ト が表示されます。 [ 新しい JDBC Connection Pool のコンフ ィグレーシ ョ ン ] テキス ト リ ンクをク リ ッ ク して、 接続プールを作成します。

手順説明、 および接続プール属性の説明については、 Administration Console オンライン ヘルプ (Administration Console の右上の疑問符をク リ ッ ク したと きに表示される ) を参照して ください。 詳細については、 『管理者ガイ ド』 の 「JDBC 接続の管理」 を参照して ください。

正しい接続数によるサーバのロックアップの回避

アプ リ ケーシ ョ ンで、 接続プールから接続を取得しよ う と したが使用できる接続がない場合、 使用できる接続がないとい う旨の例外が送出されます。 接続プールでは、 接続要求のキューは作成されません。 このエラーを避けるには、 接続プールのサイズを接続要求の最大負荷に対応できるサイズに拡大するよ うにして ください。

Administration Console で接続プールの最大接続数を設定するには、 左ペインのナビゲーシ ョ ン ツ リーを展開して [ サービス| JDBC|接続プール ] ノードを表

示し、 接続プールを選択します。 次に右ペインで、 [ コンフ ィ グレーシ ョ ン|接

続 ] タブを選択して、 [ 最大容量 ] の値を指定します。

WebLogic JDBC プログラマーズ ガイ ド 2-3

Page 32: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

接続プールのコンフ ィグレーションにおけるデータベース パスワード

接続プールを作成する場合、 一般にはデータベースへの接続用と して、 1 つ以上のパスワードを組み込みます。 オープン文字列を使用して、 XA を有効にする場合は、 パスワードを 2 つ使用できます。 パスワードは、 名前と値のペアと して [プロパティ ] フ ィールドに入力するか、 名前と値をそれぞれ対応するフ ィールドに入力します。

� [パスワード ]。 このフ ィールドを使用して、 データベース パスワードを設定します。 物理的なデータベース接続を作成した時点で、 2 層 JDBC ド ラ イバに送る [ プロパティ ] で定義されたパスワードの値がすべてオーバーライ ド

されます。 値は、 config.xml ファ イルで暗号化 (JDBCConnectionPool タグの Password 属性と して保存 ) され、 Administration Console では表示されなく な り ます。

� [オープン文字列のパスワード ]。 このフ ィールドを使用して、 WebLogic Server の ト ランザクシ ョ ン マネージャがデータベース接続を開く と きに使用

するオープン文字列内にパスワードを設定します。 この値によって、 [ プロパティ ] フ ィールド内のオープン文字列の一部と して定義されたすべてのパスワードがオーバーライ ド されます。 値は、 config.xml ファ イルで暗号化 (JDBCConnectionPool タグの XAPassword 属性と して保存 ) され、Administration Console では表示されな くな り ます。 実行時に、 WebLogic Server はこのフ ィールドで指定されたオープン文字列を再構築します。 [ プロパティ ] フ ィールドのオープン文字列は、 次のフォーマッ ト にする必要があり ます。

openString=Oracle_XA+Acc=P/userName/+SesTm=177+DB=demoPool+Threads=true=Sqlnet=dvi0+logDir=

userName の後、 パスワードは表示されな くな り ます。

接続プールを初めてコンフ ィグレーシ ョ ンする と きに [ プロパティ ] フ ィールドにパスワードを指定した場合、 次の起動時に WebLogic Server は、 パスワードを Properties 文字列から取 り除き、 その値を暗号化して Password の値と して設定します。 接続プールの Password 属性に値が指定されている場合、 WebLogic Server は値を変更しません。 ただし、 Password 属性の値は Properties 文字列内のパスワード値をオーバーライ ド します。 この動作は、 オープン文字列の一部

2-4 WebLogic JDBC プログラマーズ ガイ ド

Page 33: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

接続プールのコンフ ィ グレーシ ョ ンと使い方

と して定義するすべてのパスワードに対して同じ よ うに適用されます。 たとえば、 接続プールを初めてコンフ ィグレーシ ョ ンする と きに次のプロパティ を指定

したと します。

user=scott;password=tiger;openString=Oracle_XA+Acc=p/scott/tiger+SesTm=177+db=jtaXaPool+Threads=true+Sqlnet=lcs817+logDir=.+dbgFl=0x15;server=lcs817

WebLogic Server を次に起動する と、 データベース パスワードは [ パスワード ] 属性に、 オープン文字列内のパスワードは [ オープン文字列のパスワード ] 属性に送られ、 [ プロパティ ] フ ィールドには次の値が残 り ます。

user=scott;openString=Oracle_XA+Acc=p/scott/+SesTm=177+db=jtaXaPool+Threads=true+Sqlnet=lcs817+logDir=.+dbgFl=0x15;server=lcs817

[ パスワード ] または [ オープン文字列のパスワード ] 属性の値が確定したら、 これらの属性の値は [ プロパティ ] フ ィールドのそれぞれの値をオーバーラ イ ド します。 前述の例で説明する と、 tiger2 をデータベース パスワード と して [ プロパテ ィ ] 属性に指定した場合、 WebLogic Server はこの値を無視し、 暗号化された [ パスワード ] 属性の現在の値である tiger をデータベース パスワード と して使い続けます。 データベース パスワードを変更するには、 [ パスワード ] 属性を変更しなければな り ません。

注意 : [ パスワード ] と [ オープン文字列のパスワード ] の値は、 同じでな くてもかまいません。

接続プールの制限事項

接続プールを使用する場合、 データベース接続プロパティ を変更する DBMS 固有の SQL コードや、 WebLogic Server および JDBC ド ラ イバでは認識されない SQL コードを実行するこ とが可能です。 接続が接続プールに戻されたと きに、 接続の特性が有効な状態に戻らない場合があ り ます。 たとえば、 Sybase DBMS では、 set rowcount 3 select * from y とい う文を使用する と、 接続から返さ

れる行は最大で 3 行です。 この接続が接続プールに戻されて再利用される際、 選択しているテーブルが 500 行だったと しても、 ク ラ イアン ト に返されるのは 3 行のみとな り ます。 ほとんどの場合は、 同じ結果を実現でき、 WebLogic Server または JDBC ド ラ イバによって接続がリセッ ト される標準の (DBMS 固有でない ) SQL コードが用意されています。 この例であれば、 set rowcount の代わりに

setMaxRows() を使用できます。

WebLogic JDBC プログラマーズ ガイ ド 2-5

Page 34: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

接続を変更する DBMS 固有の SQL コードを使用する場合は、 接続プールに戻す

前に接続を適切な状態に設定しなおす必要があ り ます。

JDBC 接続プールの接続の更新に関する注意事項

更新プロセスで置換できない不良なデータベース接続が見つかると、そのプロセ

スは現在のサイクルを停止します。 残っている壊れた接続は、接続プールから削除されません。 それらの接続は、新しい接続で置換できるまで接続プールに留まります。 この動作設計は、DBMS がアクセス不能な場合にシステムのサイクルを利用してデータベース接続を更新することによるパフォーマンスの低下を防止す

るためでした。

更新プロセスでは、 アプ リ ケーシ ョ ン コードで現在使用されている接続をテス

ト または更新する こ とはできません。 テス ト されるのは、 現時点で予約されていない接続だけです。 したがって、 たとえ見つかった不良接続を置換できる場合であっても、 アプ リ ケーシ ョ ンが接続を要求している場合には更新サイ クルで接続プールのすべての接続がテス ト されるこ とはあ り ません。

更新プロセスでは使用されていない接続しかテス ト されないので、 一部の接続はまった く テス ト されるこ とがない、 とい う こ と も考えられます。 testConnsOnReserve を有効にしない限りは、 ク ライアン トは常に壊れた接続

を取得する リ スクを負います。 実際に、 たとえアプリ ケーシ ョ ンに渡される前に

接続がテス ト を受けていても、 その接続はテス トの成功の直後に不良化するこ とがあ り ます。

JDBC接続プールのテスト機能の強化

WebLogic Server 7.0SP5 では、 プールされた接続に対するデータベース接続テスト の機能を改良するために、 JDBC 接続プールに以下の属性が追加されました。

� CountOfTestFailuresTillFlush—指定する回数のテス ト が失敗した後で接

続プール内のすべての接続を閉じ、 それ以上データベース テス ト を行う こ と

で発生する遅延を最小限に抑えます。 「データベース接続消失後の接続テスト での遅延を最小限に抑える」 を参照して ください。

� CountOfRefreshFailuresTillDisable—指定する回数のテス トが失敗した

後で接続プールを無効にし、 データベースの障害発生後に接続要求を処理す

2-6 WebLogic JDBC プログラマーズ ガイ ド

Page 35: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

接続プールのコンフ ィ グレーシ ョ ンと使い方

る際の遅延を最小限に抑えます。 「接続テス ト失敗後の接続要求の遅延を最小限に抑える」 を参照して ください。

データベース接続消失後の接続テストでの遅延を最小限に抑

える

DBMS への接続が一時的にでも失われる と、 接続プール内の一部または全部の JDBC 接続は停止した状態にな り ます。 接続プールが予約時に接続をテス トするよ うにコンフ ィグレーシ ョ ンされている場合 (推奨 )、 アプ リ ケーシ ョ ンがデー

タベース接続を要求する と、 WebLogic Server は接続をテス ト します。 接続が停止している こ と を検出する と、 要求に応じるためにその接続を新しい接続で置き換えます。 通常、 DBMS がオンラ インに復帰する と更新処理が行われます。 ただし、 特定の状況や失敗の状態によっては、 停止した接続をテス トする と長い遅延が発生する こ とがあ り ます。 この遅延は、 接続プール内の停止した接続ごとに発生し、 すべての接続が置き換えられるまで続きます。

停止したデータベース接続のテス ト中に発生する遅延を最小限に抑えるために、接続プールで CountOfTestFailuresTillFlush 属性を設定できます。 この接続を設定する場合、 WebLogic Server では、 テス トが指定された回数続けて失敗する と、 接続プール内のすべての接続を停止した状態と見なして、 接続プール内のすべての接続を閉じます。

アプ リ ケーシ ョ ンが接続を要求した と きに、 接続プールは停止した接続のテス トを最初に行わずに、 接続を作成するこ とができます。 この動作によ り、 接続プールがフラ ッシュ された後は、 接続要求の遅延を最小限に抑えられます。

CountOfTestFailuresTillFlush 属性は config.xml ファ イルの JDBCConnectionPool エン ト リ内に指定します。 TestConnectionsOnReserve も true に設定する必要があ り ます。 次に例を示します。

<JDBCConnectionPool CapacityIncrement="1" DriverName="com.pointbase.xa.xaDataSource" InitialCapacity="2" MaxCapacity="10" Name="demoXAPool" Password="password" Properties="user=examples; DatabaseName=jdbc:pointbase:server://localhost/demo" Targets="examplesServer" TestConnectionsOnReserve="true" CountOfTestFailuresTillFlush="1" URL="jdbc:pointbase:server://localhost/demo" />

WebLogic JDBC プログラマーズ ガイ ド 2-7

Page 36: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

注意 : CountOfTestFailuresTillFlush 属性は、 Administration Console では使用できません。

ネッ ト ワークに小さな障害が発生した り、 フ ァ イアウォールが唯一のソケッ ト または接続を停止するこ とがよ く ある場合は、 テス ト の失敗数を 2 または 3 に設定するこ とができます。 ただし、 データベースの可用性の問題を解決した場合は、値を 1 に設定する と最良のパフォーマンスが得られます。

接続テスト失敗後の接続要求の遅延を最小限に抑える

DBMS が使用不能になる と、 接続プールは接続要求に応じよ う と して、 永続的にテス ト を行い、 停止した接続を置き換えよ う と します。 接続プールはデータベースが使用可能になる とすぐに反応できるため、 この動作は有益です。 ただし、 停止したデータベース接続のテス トはネッ ト ワークがタイムアウ トするまで行われるこ とがあ り、 その結果ク ラ イアン トで遅延が発生します。

データベースが使用できない場合にク ライアン ト アプリ ケーシ ョ ンで発生する

遅延を最小限に抑えるために、 接続プールで CountOfRefreshFailuresTillDisable 属性を設定できます。 この属性を設定する と、 WebLogic Server は、 停止した接続の置き換えに特定の回数続けて失敗した後、 接続プールを無効にします。 アプリ ケーシ ョ ンが無効な接続プールの接続

を要求した場合、WebLogic Server は直ちに ConnectDisabledException を送出して、 ク ラ イアン ト に接続が使用できないこ とを通知します。

この方法で無効になった接続プールに対して、 WebLogic Server は定期的に更新処理を実行します。 更新処理によって新しいデータベース接続が正常に作成される と、 WebLogic Server は接続プールを再び有効にします。 weblogic.Admin ENABLE_POOL コマンドを使用して、 接続プールを手動で最有効化する こ と もできます。

CountOfRefreshFailuresTillDisable 属性は config.xml ファ イルの JDBCConnectionPool エン ト リ内に指定します。 TestConnectionsOnReserve も true に設定する必要があ り ます。 次に例を示します。

<JDBCConnectionPool CapacityIncrement="1" DriverName="com.pointbase.xa.xaDataSource" InitialCapacity="2" MaxCapacity="10" Name="demoXAPool" Password="password" Properties="user=examples; DatabaseName=jdbc:pointbase:server://localhost/demo" Targets="examplesServer"

2-8 WebLogic JDBC プログラマーズ ガイ ド

Page 37: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

接続プールのコンフ ィ グレーシ ョ ンと使い方

TestConnectionsOnReserve="true" CountOfRefreshFailuresTillDisable="1" URL="jdbc:pointbase:server://localhost/demo" />

注意 : CountOfRefreshFailuresTillDisable 属性は、 Administration Console では使用できません。

ネッ ト ワークに小さな障害が発生した り、 ファ イアウォールが唯一のソケッ ト または接続を停止するこ とがよ く ある場合は、更新の失敗数を 2 または 3 に設定するこ とができます。 ただし、 値を 1 に設定する と最良のパフォーマンスが得られます。

secondsToTrustAnIdlePoolConnection を使用して接続要求の遅延を最小限に抑える

大量の ト ラフ ィ ッ ク発生時にデータベース接続をテス トする と、 アプ リ ケーシ ョ

ンのパフォーマンスが低下するおそれがあ り ます。 接続テス トへの影響を最小限に抑えるために、 JDBC 接続プールのコンフ ィ グレーシ ョ ンで secondsToTrustAnIdlePoolConnection 接続プロパティ を設定して、 最近使用された、 またはテス ト されたデータベース接続の有効性を信頼するこ とで、 接続テス ト を省略できます。

使用する接続プールが、 予約時に接続をテス トするよ うにコンフ ィ グレーシ ョ ン

されている場合 ( 推奨 )、 アプ リ ケーシ ョ ンがデータベース接続を要求する と、

WebLogic Server ではそのデータベース接続をテス ト してからアプ リ ケーシ ョ ン

に渡します。 ただし、 接続がテス ト されたか正常に使用されて接続プールに返されたと きから、 secondsToTrustAnIdlePoolConnection で指定された時間が経過するまでの間に行われた要求については、 接続をアプリ ケーシ ョ ンに渡す前の接続テス ト が省略されます。

使用する接続プールが、 プール内で使用可能な接続を定期的にテス トするよ うにコンフ ィグレーシ ョ ンされている場合 (RefreshMinutes を指定 )、 正常に使用されて接続プールに返された接続については、

secondsToTrustAnIdlePoolConnection で指定された時間内の接続テス ト が同様に省略されます。

secondsToTrustAnIdlePoolConnection を設定するには、 Administration Console の [JDBC 接続プール|コンフ ィグレーシ ョ ン|一般 ] タブにあるプロパティの リ ス

トに secondsToTrustAnIdlePoolConnection を追加します。 Administration Console

WebLogic JDBC プログラマーズ ガイ ド 2-9

Page 38: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

オンライン ヘルプの 「[JDBC 接続プール ] --> [ コンフ ィグレーシ ョ ン ] --> [一般 ]」 を参照して ください。 また、 このプロパティは config.xml ファ イルで直接設定するこ と もできます。 次に例を示します。

<JDBCConnectionPool CapacityIncrement="1" DriverName="com.pointbase.xa.xaDataSource" InitialCapacity="2" MaxCapacity="10" Name="demoXAPool" Password="password" Properties="user=examples; secondsToTrustAnIdlePoolConnection=15; DatabaseName=jdbc:pointbase:server://localhost/demo" Targets="examplesServer" TestConnectionsOnReserve="true" TestTableName="SYSTABLES" URL="jdbc:pointbase:server://localhost/demo" />

secondsToTrustAnIdlePoolConnection は、 (特に大量のト ラフ ィ ッ ク発生時の ) データベース接続テス ト による遅延を最小限に抑えるこ とによ り、 アプ リ ケー

シ ョ ンのパフォーマンスを向上できるチューニング機能です。 ただし、 値を高く

設定しすぎる と、 接続テス ト の有効性が低くなるこ とがあ り ます。 適切な値は、使用する環境と接続の切断が発生しやすいかど うかによって決ま り ます。

接続プールの動的作成

JDBCConnectionPool 管理 MBean は WebLogic Server 管理アーキテクチャ (JMX) の一部と して提供されます。 JDBCConnectionPool MBean を使用して、Java アプリ ケーシ ョ ンの内部から、 接続プールを動的に作成、 およびコンフ ィ

グレーシ ョ ンできます。 すなわち、 ク ラ イアン ト、 またはサーバ アプ リ ケー

シ ョ ン コードを使用して、既に実行中の WebLogic Server で接続プールを作成できます。

WebLogic Server コマンド ライン インタフェースで CREATE_POOL コマンドを使用しても、 接続プールを動的に作成できます。 『管理者ガイ ド』 の「CREATE_POOL」 を参照して ください。

JDBCConnectionPool 管理 MBean を使用して接続プールを動的に作成するには、次の手順に従います。

1. 必要なパッケージをインポート します。

2-10 WebLogic JDBC プログラマーズ ガイ ド

Page 39: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

接続プールのコンフ ィ グレーシ ョ ンと使い方

2. JNDI ツ リーで、 管理 MBeanHome をルッ クアップします。

3. サーバ MBean を取得します。

4. 接続プール MBean を作成します。

5. 接続プールのプロパティ を設定します。

6. 対象を追加します。

7. DataSource オブジェ ク ト を作成します。

注意 : 動的に作成した接続プールでは必ず、 動的に作成した DataSource オブジェ ク ト を使用します。 DataSource を終了するには、 これが特定の接続プールに関連付けられている必要があ り ます。 また、 WebLogic Server 中の DataSource オブジェ ク ト と接続プールの間は、 1 対 1 の関係になっています。 したがって、 接続プールに対応して使用する DataSource の作成が必要です。

JDBCConnectionPool MBean を使用して接続プールを作成する と、 サーバ コンフ ィグレーシ ョ ンに接続プールが追加され、 サーバを起動 /停止した後も、 引き続き有効になり ます。 接続プールを持続させる必要がない場合は、 プログラムで削除します。

また、 動的に作成した接続プールは一時的に無効にするこ とができます。 無効にする と、 プール中のどの接続でもデータベース サーバとの通信がサスペンド されます。 いったん無効にしたプールを再度有効にする と、 各接続ではプールを無効にした時点と同じ状態が復元されるため、 ク ライアン トは中断された地点からデータベースの操作を続行できます。

MBean を使用して WebLogic Server を管理する方法については、 『WebLogic JMX Service プログラマーズ ガイ ド』 を参照して ください。 JDBCConnectionPool MBean の詳細については、 WebLogic ク ラスの Javadoc を参照して ください。

動的接続プールのサンプル コード

接続プールを動的に作成する と きの各手順を実行するコード サンプルを以下の節で示します。

WebLogic JDBC プログラマーズ ガイ ド 2-11

Page 40: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

パッケージをインポートする

import java.sql.*;import java.util.*;import javax.naming.Context;import javax.sql.DataSource;import weblogic.jndi.Environment;import weblogic.management.configuration.JDBCConnectionPoolMBean;import weblogic.management.runtime.JDBCConnectionPoolRuntimeMBean;import weblogic.management.configuration.JDBCDataSourceMBean;import weblogic.management.configuration.ServerMBean;import weblogic.management.MBeanHome;import weblogic.management.WebLogicObjectName;

管理 MBeanHome をルックアップするmbeanHome = (MBeanHome)ctx.lookup(MBeanHome.ADMIN_JNDI_NAME);

サーバ MBean を取得するserverMBean = (ServerMBean)mbeanHome.getAdminMBean(serverName, "Server");//Server MBean の WebLogic オブジェクト名を作成する//JDBCConnectionPoolRuntime MBean の名前を作成する場合に使用WebLogicObjectName pname = new WebLogicObjectName("server1", "ServerRuntime", mbeanHome.getDomainName(),"server1");//JDBCConnectionPoolRuntime MBean の WebLogic オブジェクト名を作成する//JDBCConnectionPoolRuntime MBean の名前を作成する場合に使用するWebLogicObjectName oname = new WebLogicObjectName(cpName, "JDBCConnectionPoolRuntime", mbeanHome.getDomainName(),"server1", pname);JDBCConnectionPoolRuntimeMBean cprmb = (JDBCConnectionPoolRuntimeMBean)mbeanHome.getMBean(oname);

接続プール MBean を作成する

// ConnectionPool MBean の作成 cpMBean = (JDBCConnectionPoolMBean)mbeanHome.createAdminMBean( cpName, "JDBCConnectionPool", mbeanHome.getDomainName());

接続プール プロパティを設定する Properties pros = new Properties(); pros.put("user", "scott"); pros.put("server", "lcdbnt1");

2-12 WebLogic JDBC プログラマーズ ガイ ド

Page 41: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

接続プールのコンフ ィ グレーシ ョ ンと使い方

// DataSource 属性の設定 cpMBean.setURL("jdbc:weblogic:oracle"); cpMBean.setDriverName("weblogic.jdbc.oci.Driver"); cpMBean.setProperties(pros); cpMBean.setPassword("tiger"); cpMBean.setLoginDelaySeconds(1); cpMBean.setInitialCapacity(1); cpMBean.setMaxCapacity(10); cpMBean.setCapacityIncrement(1); cpMBean.setShrinkingEnabled(true); cpMBean.setShrinkPeriodMinutes(10); cpMBean.setRefreshMinutes(10); cpMBean.setTestTableName("dual");

注意 : この例では、 [ プロパティ ] にユーザ名とサーバ名で指定する代わりに、

setPassword(String) メ ソ ッ ドを使ってデータベース パスワードを設定します。 setPassword(String) メ ソ ッ ドを使用する と、 WebLogic Server は config.xml ファ イル中のパスワード、 および管理コンソールに表示されるパスワードを暗号化します。 このメ ソ ッ ドを使用して、config.xml ファ イル中でデータベース パスワードをク リ ア テキス ト で格納するのを避けるよ うにお勧めします。

対象を追加する

cpMBean.addTarget(serverMBean);

DataSource を作成するpublic void createDataSource() throws SQLException { try { // コンテキストの取得 Environment env = new Environment(); env.setProviderUrl(url); env.setSecurityPrincipal(userName); env.setSecurityCredentials(password); ctx = env.getInitialContext();

// DataSource MBean の作成 dsMBeans = (JDBCDataSourceMBean)mbeanHome.createAdminMBean( cpName, "JDBCDataSource", mbeanHome.getDomainName());

// DataSource 属性の設定 dsMBeans.setJNDIName(cpJNDIName); dsMBeans.setPoolName(cpName);

// DataSource の起動 dsMBeans.addTarget(serverMBean);

WebLogic JDBC プログラマーズ ガイ ド 2-13

Page 42: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

} catch (Exception ex) { ex.printStackTrace(); throw new SQLException(ex.toString());

}

}

動的接続プールと DataSource を削除する

動的に作成した接続プールを削除する方法を以下のコード サンプルで示します。動的に作成した接続プールは削除しない限り、 サーバを停止 /再起動した後も、有効です。

public void deleteConnectionPool() throws SQLException { try { // 動的に作成した接続プールをサーバから削除 cpMBean.removeTarget(serverMBean); // 動的に作成した接続プールをコンフィグレーションから削除 mbeanHome.deleteMBean(cpMBean); } catch (Exception ex) { throw new SQLException(ex.toString()); }}

public void deleteDataSource() throws SQLException {

try {

// 動的に作成した DataSource をサーバから削除

dsMBeans.removeTarget(serverMBean);

// 動的に作成した DataSource をコンフィグレーションから削除

mbeanHome.deleteMBean(dsMBeans);

} catch (Exception ex) {

throw new SQLException(ex.toString());

}

}

2-14 WebLogic JDBC プログラマーズ ガイ ド

Page 43: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

接続プールのコンフ ィ グレーシ ョ ンと使い方

接続プールの管理

JDBCConnectionPool と JDBCConnectionPoolRuntime の MBean には、 接続プールを管理し、 これに関する情報を収集するためのメ ソ ッ ドがあ り ます。 メ

ソ ッ ドの目的は以下のとおりです。

� プールに関する情報を取得します。

� 接続プールを無効にして、 そこから ク ラ イアン ト が接続を取得できないよ う

にします。

� 無効にされているプールを有効にします。

� 未使用の接続を解放して、 指定された最小サイズまでプールを縮小します。

� プールを リ フレッシュします (接続をク ローズして再び開く )。

� プールを停止します。

JDBCConnectionPool MBean と JDBCConnectionPoolRuntime MBean によって、 weblogic.jdbc.common.JdbcServices と weblogic.jdbc.common.Pool は非推奨の機能と して置き換えられています。

JDBCConnectionPool MBean で使用できる メ ソ ッ ドの詳細については、 Javadoc を参照して ください。 JDBCConnectionPoolRuntime MBean の詳細については、Javadoc を参照して ください。

プールに関する情報の取得

boolean x = JDBCConnectionPoolRuntimeMBean.poolExists(cpName);

props = JDBCConnectionPoolRuntimeMBean.getProperties();

poolExists() メ ソ ッ ドは、 指定された名前の接続プールが WebLogic Server に存在するかど うかを調べます。 このメ ソ ッ ドを使用する と、 動的接続プールが既に作成されているかど うかを調べ、 作成する動的接続プールに固有の名前を付けるこ とができます。

getProperties() メ ソ ッ ドは、 接続プールのプロパティ を取得します。

WebLogic JDBC プログラマーズ ガイ ド 2-15

Page 44: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

接続プールの無効化

JDBCConnectionPoolRuntimeMBean.disableDroppingUsers()

JDBCConnectionPoolRuntimeMBean.disableFreezingUsers()

JDBCConnectionPoolRuntimeMBean.enable()

接続プールを一時的に無効にして、 ク ライアン トがそのプールから接続を取得するのを防ぐ こ とができます。 接続プールを有効または無効にできるのは、「system」 ユーザか、 またはそのプールに関連付けられている ACL によって「admin」 パーミ ッシ ョ ンが与えられたユーザだけです。

disableFreezingUsers() を呼び出すと、 プールの接続を現在使っている ク ライアン トは中断状態に置かれます。 データベース サーバと通信し よ う とする と、例外が送出されます。 ただし、 ク ラ イアン トは接続プールが無効になっている間に自分の接続をク ローズできます。 その場合、 接続はプールに返され、 プールが

有効になるまでは別のク ラ イアン ト から予約するこ とはできません。

disableDroppingUsers() を使用する と、 接続プールが無効になるだけでな く、そのプールに対する ク ライアン トの JDBC 接続が破棄されます。 その接続で行われる ト ランザクシ ョ ンはすべてロールバッ ク され、 その接続が接続プールに返されます。 ク ライアン トの JDBC 接続コンテキス トは無効にな り ます。

disableFreezingUsers() で無効にしたプールを再び有効にした場合、 使用中だった各接続の JDBC 接続状態はその接続プールが無効にされたと き と同じなので、 ク ライアン ト はちょ う ど中断したと ころから JDBC 操作を続行できます。

さ らに、 weblogic.Admin ク ラスの disable_pool コマンド と enable_pool コマンドを使用して、 プールを無効にした り有効にした りできます。

接続プールの縮小

JDBCConnectionPoolRuntimeMBean.shrink()

接続プールは、 プール内の接続の初期数と最大数を定義する一連のプロパティ (initialCapacity と maxCapacity) と、 接続がすべて使用中のと きにプールに追加される接続の数を定義するプロパティ (capacityIncrement) を備えています。 プールがその最大容量に達する と、 最大数の接続が開く こ とにな り、 プール

を縮小しない限りそれらの接続は開いたままになり ます。

2-16 WebLogic JDBC プログラマーズ ガイ ド

Page 45: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

接続プールのコンフ ィ グレーシ ョ ンと使い方

接続の使用がピークを過ぎれば、 接続プールから接続をいくつか削除して、WebLogic Server と DBMS のリ ソースを解放してもかまいません。

接続プールの停止

JDBCConnectionPoolRuntimeMBean.shutdownSoft()

JDBCConnectionPoolRuntimeMBean.shutdownHard()

これらのメ ソ ッ ドは、 接続プールを破棄します。 接続はク ローズされてプールから削除され、 プールに残っている接続がな くなればプールは消滅します。 接続プールを破棄できるのは、 「system」 ユーザか、 またはそのプールに関連付けられている ACL によって 「admin」 パーミ ッシ ョ ンが与えられたユーザだけです。

shutdownSoft() は、 接続がプールに返されるのを待って、 それらの接続をクローズします。

shutdownHard() メ ソ ッ ドは、 すべての接続を即座に破棄します。 プールから取得した接続を使っているク ラ イアン トは、 shutdownHard() が呼び出された後で接続を使おう とする と、 例外を受け取るこ とにな り ます。

さ らに、 weblogic.Admin ク ラスの destroy_pool コマンドを使って、 プールを破棄するこ と もできます。

プールのリセッ ト

JDBCConnectionPoolRuntimeMBean.reset()

接続プールは、 定期的に、 あるいは接続が予約または解放されるたびに接続をテス トするよ うにコンフ ィ グレーシ ョ ンする こ とができます。 WebLogic Server がプール接続の一貫性を自動的に保てるよ うにする こ とで、 DBMS 接続に関する問題の大半は防げるはずです。 さ らに、 WebLogic には、 アプ リ ケーシ ョ ンから

呼び出してプール内のすべての接続、 またはプールから予約した単一の接続を リフレッシュできる メ ソ ッ ドが用意されています。

JDBCConnectionPoolRuntimeMBean.reset() メ ソ ッ ドは、 接続プール内に割 り当てられている接続をすべてク ローズしてから開き直します。 これは、 たとえば、 DBMS が再起動されたあとに必要になるこ とがあ り ます。接続プール内の 1 つの接続が失敗した場合は、 プール内のすべての接続が不良であるこ とが往々にしてあ り ます。

WebLogic JDBC プログラマーズ ガイ ド 2-17

Page 46: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

接続プールを リセッ トするには、 以下のいずれかの方法を使用します。

� Administration Console

� weblogic.Admin コマンド。 管理者 ( 管理特権を持ったユーザ ) と して接続プールを リ セッ ト します。 次にそのパターンを示します。

$ java weblogic.Admin WebLogicURL RESET_POOL poolName system passwd

コマンド ラ インからこの方法を使う こ とはめったにないかもしれません。 他にも、 次に説明するよ うにプログラムを使用したよ り効率的な方法があ り ま

す。

� ク ラ イアン ト アプリ ケーシ ョ ンにある JDBCConnectionPoolRuntimeMBean の reset() メ ソ ッ ド

最後のケースは、 行うべき作業が最も多くな り ますが、 その反面、 最初の 2 つの方法よ り も柔軟性があ り ます。 次に、 reset() メ ソ ッ ドを使用してプールを リセッ トする方法を示します。

a. try ブロ ッ クの中で、 DBMS への有効な接続が存在する限り どのよ う な

状況でも必ず成功する SQL 文を使用して、 接続プールの接続をテス ト します。 たとえば、「select 1 from dual」 とい う SQL 文は、Oracle DBMS の場合には必ず成功します。

b. SQLException を取得します。

c. catch ブロ ッ クの中で reset() メ ソ ッ ドを呼び出します。

weblogic.jdbc.common.JdbcServices と weblogic.jdbc.common.Pool クラス (非推奨 ) の使用

旧バージ ョ ンの WebLogic Server には、 プログラム上で接続プールの作成や管理のための次のク ラスが組み込まれていました。 weblogic.jdbc.common.JdbcServices and weblogic.jdbc.common.Pool. これらのク ラスは非推奨となっています。 これらのク ラスは現在でも利用できますが、 代わりに JDBCConnectionPool MBean を使用して、 接続プールを動的に作成、 および管理するこ と をお勧めします。

2-18 WebLogic JDBC プログラマーズ ガイ ド

Page 47: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

アプリケーシ ョ ン スコープの JDBC 接続プール

JDBCConnectionPool MBean を使用して、 管理対象のサーバ上の接続プールを作成、 または変更する と、 JMX サービスによ り管理サーバに変更が直ちに通知されます。 weblogic.jdbc.common.JdbcServices と weblogic.jdbc.common.Pool を使用して、 接続プールを作成、 または変更すると、 次のアクシ ョ ンは管理サーバには伝達されません。

� 停止

� 取り出し

� 更新

� 有効化

� 無効化

これらのアクシ ョ ンを実行する と、 関連する接続プールを使用した管理対象サーバ上のアプリ ケーシ ョ ンが失敗するこ とがあ り ます。

weblogic.jdbc.common.JdbcServices と weblogic.jdbc.common.Pool の詳細については、 WebLogic Server バージ ョ ン 6.1 の 『WebLogic JDBC プログラマーズ ガイ ド』 の 「WebLogic JDBC のコンフ ィグレーシ ョ ンと管理」 を参照して ください。

アプリケーション スコープの JDBC 接続プール

エンタープラ イズ アプリ ケーシ ョ ンをパッケージ化する と きに、

weblogic-application.xml 補足デプロイ メ ン ト記述子を含める こ とができます。 この記述子を使用して、 アプ リ ケーシ ョ ン スコーピングをコンフ ィグレーシ ョ ンします。 weblogic-application.xml ファ イルでは、 エンタープラ イズ アプ リ ケーシ ョ ンをデプロイする と きに作成される JDBC 接続プールをコンフ ィグレーシ ョ ンできます。

接続プールのインスタンスは、 アプ リ ケーシ ョ ンのインスタンスごとに作成され

ます。 つま り、 プールのインスタンスは、 アプ リ ケーシ ョ ンの対象となっている

各ノード上のアプリ ケーシ ョ ンで作成されます。 プールのサイズを検討する場合は、 この点に留意して ください。

WebLogic JDBC プログラマーズ ガイ ド 2-19

Page 48: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

この方法で作成された接続プールは 「アプ リ ケーシ ョ ン スコープの接続プール」( アプリ ケーシ ョ ン スコープ プール、 アプ リ ケーシ ョ ン ローカル プール、 または ローカル プール ) と呼ばれ、 そのエンタープラ イズ アプリ ケーシ ョ ンに対し

てだけスコーピングされます。 つま り、 各接続プールがエンタープライズ アプリ

ケーシ ョ ンごとに分離されます。

アプリ ケーシ ョ ン スコーピング、 およびアプリ ケーシ ョ ン スコープ リ ソースの詳細については、 以下を参照して ください。

� 『WebLogic Server アプリ ケーシ ョ ンの開発』 の 「weblogic-application.xml デプロイ メ ン ト記述子の要素」

� 『WebLogic Server アプリ ケーシ ョ ンの開発』 の 「エンタープラ イズ アプ リ

ケーシ ョ ンのパッケージ化」

� 『WebLogic Server アプリ ケーシ ョ ンの開発』 の 「2 フェーズ デプロイ メ ント 」

マルチプールのコンフ ィグレーションと使

い方

マルチプールは 「プールのプール」 です。 まず接続プールを作成し、 次に Administration Console または WebLogic 管理 API を使用してマルチプールを作成した後、 マルチプールに接続プールを割 り当てる こ とによ り、 マルチプールを作成します。

Administration Console を使用してマルチプールを作成する手順については、Administration Console オンラ イン ヘルプを参照して ください。 JDBCMultiPoolMBean の詳細については、 WebLogic Server Javadoc を参照してください。

2-20 WebLogic JDBC プログラマーズ ガイ ド

Page 49: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

マルチプールのコンフ ィ グレーシ ョ ンと使い方

マルチプールの機能

マルチプールとは、 接続プールのプールです。 特定の接続プール内のすべての接続は、 同じデータベース、 同じユーザ、 同じ接続プロパテ ィを使って作成されます。 つま り、 それらは単一のデータベースに関連付けられます。 しかし、 マルチプール内の接続プールには、 それぞれ異なる DBMS を関連付けるこ とができます。

マルチプールのデータベース接続はローカル ト ランザクシ ョ ンでのみ使用されます。 分散ト ランザクシ ョ ンでの使用は、 WebLogic Server ではサポート されて

いません。

マルチプール アルゴリズムの選択

マルチプールを設定する前に、 その主要な目的、 つま り高可用性またはロード バランシングのいずれかを指定する必要があ り ます。 アルゴ リ ズムは、 各自のニーズに合わせて選択できます。

高可用性

高可用性アルゴ リ ズムでは、 接続プールの順序付けされた リ ス ト を提供します。

通常、 このタイプのマルチプールへのすべての接続リ クエス トは、 リ ス トの最初のプールによって処理されます。 このプールを通したデータベース接続が失敗する と、 その リ ス トの次のプールから順番に接続が選択されます。

注意 : マルチプール内の接続プールに対して TestConnectionsOnReserve=true を設定するこ とで、 リ ス ト内の次の

接続プールにフェイルオーバするタイ ミ ングをマルチプールが決定できるよ うにする必要があ り ます。

デフォル ト では、 接続プール内のすべての接続が使用中の場合、 高可用性アルゴ リ ズムを備えたマルチプールではリ ス ト内の次のプールから接

続が提供される こ とはあ り ません。 これは、 接続プールの容量を設定できるよ うにするためです。 このシナ リオでフェイルオーバを有効にするには、 マルチプールのコンフ ィグレーシ ョ ンで

WebLogic JDBC プログラマーズ ガイ ド 2-21

Page 50: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

FailoverRequestIfBusy 属性を true に設定します。 詳細については、2-24 ページの 「マルチプールの使用されている接続プールのフェイル

オーバの有効化」 を参照して ください。

ロード バランシング

ロード バランシング マルチプールへの接続リ クエス トは、 リ ス ト内の任意の接

続プールから処理されます。 プールはリ ス トの順に追加され、 ラウンド ロビン方式でアクセスされます。 アプリ ケーシ ョ ンが接続を要求する と、 マルチプールは

リ ス ト内の次の接続プールから接続を提供しよ う と します。

マルチプールのフェイルオーバの拡張

WebLogic Server 7.0SP5 では、 マルチプールに以下の拡張が施されました。

� マルチプール内で自動的に無効化されている (非アクテ ィブな ) 接続プールに接続を要求しないよ うにするための、 接続要求の転送の改良。 「接続プールが失敗した と きの接続要求の転送の改良」 を参照して ください。

� マルチプール内の失敗した接続プールが回復した と きの自動フェイルバッ

ク。 「マルチプール内の失敗した接続プールが回復する と きの自動的な再有効化」 を参照して ください。

� マルチプール内の使用中の接続プールのフェイルオーバ。 「マルチプールの使用されている接続プールのフェイルオーバの有効化」 を参照して くださ

い。

� 高可用性アルゴ リ ズムを備えたマルチプールのフェイルオーバ コールバック。 「コールバッ クによるマルチプールのフェ イルオーバの制御」 を参照して ください。

� マルチプール ( アルゴ リ ズムはどちらでも同じ ) のフェイルバッ ク コールバッ ク 「コールバッ クによるマルチプールのフェイルバッ クの制御」 を参照して ください。

2-22 WebLogic JDBC プログラマーズ ガイ ド

Page 51: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

マルチプールのコンフ ィ グレーシ ョ ンと使い方

接続プールが失敗したときの接続要求の転送の改良

マルチプール内の接続プールが失敗したと きのパフォーマンスを向上させるために、 WebLogic Server はプールの接続が接続テス ト に失敗したと きにその接続プールを自動的に無効にします。 接続プールが無効化された後、WebLogic Server は接続要求をアプ リ ケーシ ョ ンからその接続プールに転送しません。 その代わり

に、 接続要求はマルチプールの リ ス ト にある次に利用可能な接続プールに転送されます。

この機能を利用するには、 マルチプールのすべての接続プールで接続プール テス ト オプシ ョ ンがコンフ ィグレーシ ョ ンされていなければな り ません (特に TestTableName と TestConnectionsOnReserve)。

マルチプールに対してコールバッ ク ハンド ラが登録されている場合、 WebLogic Server はリ ス ト の次の接続プールにフェイルオーバする前にコールバッ ク ハンド ラを呼び出します。 詳細については、 2-25 ページの 「コールバッ クによるマル

チプールのフェイルオーバの制御」 を参照して ください。

マルチプール内の失敗した接続プールが回復するときの自動

的な再有効化

接続が接続テス トに失敗したこ とが原因で接続プールが自動的に無効化された後、 WebLogic Server は定期的に無効化された接続プールの接続をテス ト して接続プール ( または基盤のデータベース ) がいつ再び利用可能になるのかを判断します。 接続プールが利用可能になる と、 WebLogic Server は自動的に接続プールを再び有効化し、 マルチプールのアルゴ リ ズム と、 接続プールのリ ス ト における

位置に基づいて、 その接続プールへの接続要求の転送を再開します。

マルチプールで自動的に無効化されている接続プールが WebLogic Server によってチェ ッ ク される頻度を制御するには、 config.xml ファ イルのマルチプールのコンフ ィグレーシ ョ ンに HealthCheckFrequencySeconds 属性の値を追加します。 次に例を示します。

<JDBCMultiPool AlgorithmType="High-Availability" Name="demoMultiPool" PoolList="demoPool2,demoPool" HealthCheckFrequencySeconds="240" Targets="examplesServer" />

WebLogic JDBC プログラマーズ ガイ ド 2-23

Page 52: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

注意 : この属性は、 Administration Console では表示されません。 この機能を実装するには、 config.xml ファ イルのマルチプールのコンフ ィグレーシ ョ ンに手動でこの属性を追加する必要があ り ます。

WebLogic Server は、 無効化されている各接続プールの接続テス ト を、 指定された期間は行いません。 デフォル ト値は、 300 秒です。 値を指定しない場合、 自動的に無効化された接続プールは 300 秒おきにテス ト されます。

この機能を利用するには、 マルチプールのすべての接続プールで接続プール テス ト オプシ ョ ンがコンフ ィグレーシ ョ ンされていなければな り ません (特に TestTableName と TestConnectionsOnReserve)。

手動で無効化された接続プールについては、 WebLogic Server はテス ト と自動的な再有効化を行いません。 テス トするのは、 自動的に無効化された接続プールだけです。

マルチプールに対してコールバッ ク ハンド ラが登録されている場合、 WebLogic Server は接続プールを再び有効にする前にコールバッ ク ハンド ラを呼び出します。 詳細については、 2-29 ページの 「コールバッ クによるマルチプールのフェイ

ルバッ クの制御」 を参照して ください。

マルチプールの使用されている接続プールのフェイルオーバ

の有効化

デフォル トでは、 マルチプールのアルゴ リ ズムが高可用性である場合、 データベース接続に対する要求の数がマルチプールの現在の接続プールで利用可能な接続の数を超える と、 それ以降の接続要求が失敗します。

現在の接続プールのすべての接続が使用中のと きにマルチプールがフェイルオーバするよ うにするには、 config.xml ファ イルのマルチプールのコンフ ィグレーシ ョ ンで FailoverRequestIfBusy 属性の値を設定する必要があ り ます。 true に設定する と、 現在の接続プールのすべての接続が使用中のと きに、 接続に対するアプリ ケーシ ョ ンの要求がマルチプールの次の利用可能な接続プールに転送されます。 false ( デフォル ト ) に設定した場合、 接続要求はフェイルオーバされません。

FailoverRequestIfBusy 属性を config.xml ファ イルに追加した後、 マルチプールのエン ト リは次のよ うにな り ます。

2-24 WebLogic JDBC プログラマーズ ガイ ド

Page 53: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

マルチプールのコンフ ィ グレーシ ョ ンと使い方

<JDBCMultiPool AlgorithmType="High-Availability" Name="demoMultiPool" PoolList="demoPool2,demoPool" FailoverRequestIfBusy="true" Targets="examplesServer" />

注意 : FailoverRequestIfBusy 属性は、 Administration Console では表示されません。 この機能を実装するには、 config.xml ファ イルのマルチプールのコンフ ィグレーシ ョ ンに手動でこの属性を追加する必要があ り ます。

ConnectionPoolFailoverCallbackHandler がマルチプールのコンフ ィグレーシ ョ ンに含まれている場合、 WebLogic Server はフェ イルオーバの前にコールバッ ク ハンド ラを呼び出します。 詳細については、 2-25 ページの 「コールバッ

クによるマルチプールのフェイルオーバの制御」 を参照して ください。

コールバックによるマルチプールのフェイルオーバの制御

WebLogic Server にはコールバッ ク ハンド ラを登録できます。 コールバッ ク ハンド ラは、 高可用性アルゴ リ ズムのマルチプールが、 その中の JDBC 接続プールから リ ス トの次の接続プールにどのタイ ミ ングで接続要求をフェ イルオーバするかを制御します。

コールバッ ク ハンド ラを使用する と フェイルオーバを行うかど うか、 および行

う場合にいつ行うのかを制御できるので、 フェイルオーバの前にシステム上の他の準備 ( データベースの準備や高可用性フレームワームとの通信 ) を行う こ とが

できます。

コールバッ ク ハンド ラは、 config.xml ファ イルにあるマルチプールの属性を介して、 マルチプールごとに登録されます。 したがって、 コールバッ ク ハンド ラはコールバッ クを適用するマルチプールごとに登録する必要があ り ます。 マルチプールごとに異なるコールバッ ク ハンド ラを登録するこ と もできます。

コールバック ハンドラの要件

マルチプール内のフェイルオーバと フェイルバッ クを制御するために使用するコールバッ ク ハンド ラには、weblogic.jdbc.extensions.ConnectionPoolFailoverCallback インタフェースの実装が必要です。 マルチプールが リ ス ト内の次の接続プールにフェイ

ルオーバする必要がある と き、 または以前に無効化された接続プールが利用可能になる と きに、 WebLogic Server は ConnectionPoolFailoverCallback インタ

WebLogic JDBC プログラマーズ ガイ ド 2-25

Page 54: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

フェースの allowPoolFailover() メ ソ ッ ドを呼び出し、 3 つのパラ メータ currPool、 nextPool、 および opcode ( いずれも定義は後述 ) の値を渡します。 その後、 WebLogic Server はコールバッ ク ハンド ラからの戻 り値を待ってからタスクを完了します。

アプ リ ケーシ ョ ンは、 下記に定義するよ うに OK、 RETRY_CURRENT、 または DONOT_FAILOVER を返す必要があ り ます。 アプ リ ケーシ ョ ンでは、 フェイル

オーバと フェイルバッ クのケースを処理します。

詳細については、

weblogic.jdbc.extensions.ConnectionPoolFailoverCallback インタフェースの Javadoc を参照して ください。

注意 : フェイルオーバのコールバッ ク ハンド ラは省略可能です。 マルチプールのコンフ ィ グレーシ ョ ンでコールバッ ク ハンド ラが指定されていない場合、 WebLogic Server はフェイルオーバか、 無効化されている接続プールを再び有効にする処理に進みます。

コールバック ハンドラのコンフ ィグレーショ ン

フェイルオーバおよびフェイルバッ ク機能に関連するマルチプールのコンフ ィグレーシ ョ ン属性には、 以下の 2 つがあ り ます。

� ConnectionPoolFailoverCallbackHandler— マルチプールのフェイルオー

バ コールバッ ク ハンド ラを登録するには、 この属性の値を config.xml ファ イルのマルチプールのコンフ ィグレーシ ョ ンに追加します。 値は、com.bea.samples.wls.jdbc.MultiPoolFailoverCallbackApplication のよ う な絶対名でなければな り ません。

� HealthCheckFrequencySeconds—WebLogic Server がマルチプールで無効化されている (非アクテ ィブな ) 接続プールをチェ ッ ク して利用可能かど うかを確認する頻度を制御するには、 この属性の値を config.xml ファ イルのマルチプールのコンフ ィグレーシ ョ ンに追加します。 詳細については、 2-23 ページの 「マルチプール内の失敗した接続プールが回復する と きの自動的な再有効化」 を参照して ください。

これらの属性を config.xml ファ イルに追加した後、 マルチプールのエン ト リは次のよ うにな り ます。

<JDBCMultiPool AlgorithmType="High-Availability"

2-26 WebLogic JDBC プログラマーズ ガイ ド

Page 55: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

マルチプールのコンフ ィ グレーシ ョ ンと使い方

Name="demoMultiPool" ConnectionPoolFailoverCallbackHandler="com.bea.samples.wls.jdbc.MultiPoolFailoverCallbackApplication"PoolList="demoPool2,demoPool" HealthCheckFrequencySeconds="120" Targets="examplesServer" />

注意 : これらの属性は、 Administration Console では表示されません。 この機能を実装するには、 config.xml ファ イルのマルチプールのコンフ ィ グレーシ ョ ンに手動でこれらの属性を追加する必要があ り ます。

仕組み— フェイルオーバ

WebLogic Server は、 現在の接続プールが接続テス トに失敗した と き、 または FailoverRequestIfBusy が有効になっている場合で現在の接続プールのすべての接続が使用中のと きに、 リ ス ト内の次の接続プールに接続要求をフェイルオーバしよ う と します。

コールバッ ク機能を有効にするには、 config.xml ファ イルのマルチプール コンフ ィグレーシ ョ ンの ConnectionPoolFailoverCallbackHandler 属性を使用してコールバッ ク ハンド ラを Weblogic Server に登録します。

高可用性アルゴ リ ズムの場合、 接続要求に対して リ ス ト内の最初の接続プールから接続が提供されます。 最初の接続プールの接続が接続テス ト に失敗する と、WebLogic Server はその接続プールに非アクテ ィブのマークを付け、 それを無効化します。 コールバッ ク ハンド ラが登録されている場合、 WebLogic Server は以下の情報を渡してコールバッ ク ハンド ラを呼び出し、 下記のいずれかの戻 り値を待ちます。

� currPool— フェ イルオーバの場合、 これはデータベース接続を提供するため

に現在使用されている接続プールの名前です。 これは、 「フェイルオーバ元」の接続プールです。

� nextPool—マルチプールでリ ス ト されている次に利用可能な接続プールの名

前です。 フェイルオーバの場合、 これは 「フェイルオーバ先」 の接続プール

です。

� opcode—呼び出しの理由を示す、 以下のいずれかのコードです。

� OPCODE_CURR_POOL_DEAD—WebLogic Server が現在の接続プールを非アクテ ィブと判断し、 無効化しました。

WebLogic JDBC プログラマーズ ガイ ド 2-27

Page 56: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

� OPCODE_CURR_POOL_BUSY— 接続プールのすべてのデータベース接続が使

用中です ( マルチプールのコンフ ィグレーシ ョ ンで FailoverIfBusy=true が設定されている必要がある。 2-24 ページの 「マ

ルチプールの使用されている接続プールのフェイルオーバの有効化」 を

参照 )。

フェイルオーバは、 接続要求と同期の関係にあ り ます。 フェイルオーバは、WebLogic Server が接続要求を満たそう と している と きにのみ行われます。

コールバッ ク ハンド ラからの戻 り値は、 以下の 3 つのオプシ ョ ンのいずれかを示します。

� OK—処理を進めます。 この場合、 リ ス ト の次の接続プールにフェイルオーバ

するこ と を意味します。

� RETRY_CURRENT—現在の接続プールで接続要求を再試行します。

� DONOT_FAILOVER—現在の接続要求を再試行せず、 フェイルオーバを行いま

せん。 weblogic.jdbc.extensions.PoolUnavailableSQLException が送出されます。

WebLogic Server は、 コールバッ ク ハンド ラから返された値に基づいて動作します。

2 番目の接続プールが失敗した場合、 マルチプール内に次に利用可能な接続プールがあれば WebLogic Server はそれに対してフェイルオーバを試み、 前回のフェイルオーバと同じよ うにコールバッ ク ハンド ラを再び呼び出します。

注意 : 接続プールが手動で無効化されている場合、 WebLogic Server はコールバッ ク ハンド ラを呼び出しません。

ロード バランシング アルゴ リ ズムのマルチプールの場合、WebLogic Server は接続プールが無効化されている と きにコールバッ ク ハンド ラを呼び出しません。 ただし、 無効化されている接続プールを再び有効化する と きにはコールバッ ク ハンド ラを呼び出します。 詳細については、 次の節を参照して ください。

2-28 WebLogic JDBC プログラマーズ ガイ ド

Page 57: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

マルチプールのコンフ ィ グレーシ ョ ンと使い方

コールバックによるマルチプールのフェイルバックの制御

マルチプールのフェイルオーバ コールバッ ク ハンド ラを登録する と、WebLogic Server は自動的に無効化された接続プールを再び有効化する と きに同じ コールバッ ク ハンド ラを呼び出します。 コールバッ クを使用する と無効化されている接続プールが再び有効化されるかど うか、 および有効化される場合はいつ有効化されるかを制御できるので、 接続プールの再有効化の前にシステム上の他の準備 (データベースの準備や高可用性フレームワームとの通信 ) を行う こ とができま

す。

コールバッ ク ハンド ラは、 config.xml ファ イルにあるマルチプールの属性を介して、 マルチプールごとに登録されます。 したがって、 コールバッ ク ハンド ラはコールバッ クを適用するマルチプールごとに登録する必要があ り ます。 マルチプールごとに異なるコールバッ ク ハンド ラを登録するこ と もできます。

コールバッ ク ハンド ラの詳細については、 以下の節を参照して ください。

� 2-25 ページの 「コールバッ ク ハンド ラの要件」

� 2-26 ページの 「コールバッ ク ハンド ラのコンフ ィ グレーシ ョ ン」

仕組み— フェイルバック

WebLogic Server は、 自動的に無効化されているマルチプール内の接続プールの状態を定期的にチェ ッ ク します (2-23 ページの 「マルチプール内の失敗した接続

プールが回復する と きの自動的な再有効化」 を参照 )。 無効化されている接続プールが利用可能にな り、 フェイルオーバ コールバッ ク ハンド ラが登録されている場合、 WebLogic Server は以下の情報を渡してコールバッ ク ハンド ラを呼び出し、 戻り値を待ちます。

� currPool— フェ イルバッ クの場合、 これは以前に無効化され、現在は利用可

能で再有効化できる接続プールの名前です。

� nextPool— フェ イルバッ クの場合、 これは null です。

� opcode—呼び出しの理由を示す、 以下のいずれかのコードです。 フェ イルバッ クの場合、 コードは常に OPCODE_REENABLE_CURR_POOL です。 このコードは、 currPool の接続プールが現時点で利用可能であるこ とを示します。

WebLogic JDBC プログラマーズ ガイ ド 2-29

Page 58: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

フェイルバッ ク (無効化されている接続プールの自動的な再有効化 ) は、 フェイルオーバとは異な り ます。 フェイルオーバは接続要求と同期的な関係にあ り ますが、 フェイルオーバは非同期です。

コールバッ ク ハンド ラは、 以下のいずれかの値を返します。

� OK—処理を進めます。 この場合は、 指定された接続プールを再び有効化するこ とを意味します。 WebLogic Server は、 マルチプールのアルゴ リ ズム と、接続プールの リ ス ト における位置に基づいて、 その接続プールへの接続要求の転送を再開します。

� DONOT_FAILOVER—currPool の接続プールを再有効化しません。 使用中の接続プールから引き続き接続要求に対処します。

WebLogic Server は、 コールバッ ク ハンド ラから返された値に基づいて動作します。

コールバッ ク ハンド ラが DONOT_FAILOVER を返す場合、 WebLogic Server はマルチプール コンフ ィグレーシ ョ ンの HealthCheckFrequencySeconds 属性で決められたとおりに次のテス ト サイ クルで接続プールを再び有効化しよ う と し、そのプロセスの過程でコールバッ ク ハンド ラを呼び出します。

マルチプールで接続プールが リ ス ト される順序はとても重要です。 高可用性アルゴ リ ズムのマルチプールは常に、 接続プールのリ ス トの最初に利用可能な接続プールから接続要求に対応しよ う と します。 以下のシナ リオを検討して ください。

MultiPool_1 は高可用性アルゴ リ ズムを使用し、ConnectionPoolFailoverCallbackHandler が登録されていて、 3 つの接続プール CP1、 CP2、 および CP3 をこの順序で保持しています。

CP1 が無効になり、 MultiPool_1 は接続要求を CP2 にフェイルオーバします。

次に CP2 が無効にな り、 MultiPool_1 は接続要求を CP3 にフェイルオーバします。

しばら く して、 CP1 が再び利用可能にな り、 コールバッ ク ハンド ラによって WebLogic Server が接続プールを再有効化できるよ うにな り ます。 それ以降の接続要求には、 CP1 から接続が提供されるよ うにな り ます。 これは、 CP1 がマルチプールで最初にリ ス ト されている接続プールであるためです。

2-30 WebLogic JDBC プログラマーズ ガイ ド

Page 59: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

マルチプールのコンフ ィ グレーシ ョ ンと使い方

CP2 が続いて利用可能にな り、 コールバッ ク ハンド ラが WebLogic Server による接続プールの再有効化を可能にしても、 接続要求は引き続き CP1 から接続を提供されます。 これは、 CP1 が接続プールのリ ス トで CP2 よ り前に位置しているためです。

マルチプール フェイルオーバの制限事項と要件

WebLogic Server はマルチプール用の高可用性アルゴ リ ズムを備えており、 接続

プールで障害 (データベース管理システムのク ラ ッシュなど ) が発生しても、 システムをそのまま稼動させるこ とができます。 ただし、 システムをコンフ ィ グレーシ ョ ンする と きには以下の制限と要件を考慮する必要があ り ます。

フェイルオーバを有効にするための予約時の接続のテスト

接続プールでは、 いつデータベース接続が失われたかを識別するために TestConnectionsOnReserve 機能を使用します。 接続は、 アプ リ ケーシ ョ ンに

よって予約されるまで、 自動的にはテス ト されません。 マルチプール内の接続プールに TestConnectionsOnReserve=true を設定する必要があ り ます。 この機能をオンにする と、 各接続はアプリ ケーシ ョ ンに戻される前にテス ト されます。これは、 高可用性アルゴ リ ズムにおいて不可欠な処理です。 高可用性アルゴ リ ズムでは、 マルチプール内の次の接続プールにフェイルオーバするタイ ミ ングが、

予約時の接続テス トの結果に基づいて決定されます。 テス トが失敗する と、 接続プールによって接続が再作成されます。 この再作成にも失敗する と、 マルチプールが次の接続プールにフェイルオーバします。 マルチプールのフェイルオーバの

拡張の詳細については、 2-22 ページの 「マルチプールのフェイルオーバの拡張」

を参照して ください。

使用中の接続ではフェイルオーバは行われない

予約後に接続が失敗する可能性もあ り ますが、 これについてはアプリ ケーシ ョ ン

で処理する必要があ り ます。 WebLogic Server では、 アプ リ ケーシ ョ ンで使用中

に失敗した接続をフェイルオーバさせるこ とはできません。 接続の使用中に障害が発生した場合は、 ト ランザクシ ョ ンをやり直す必要があ り、 こ う した障害が処理できるよ うにコーディ ングしておく必要があ り ます。

WebLogic JDBC プログラマーズ ガイ ド 2-31

Page 60: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

DataSource のコンフ ィグレーショ ンと使い方

接続プールやマルチプールと同様に、 DataSource オブジェク トは Administration Console または WebLogic 管理 API を使用して作成できます。 DataSource オブジェク ト を定義して、 ト ランザクシ ョ ン サービスを有効または無効にできます。DataSource のプール名属性を定義する前に、 接続プールとマルチプールをコンフ ィ グレーシ ョ ンします。

DataSource オブジェ ク ト を JNDI と組み合わせる と、 データベースへの接続を提供する接続プールにアクセスできます。 個々の DataSource は、 1 つの接続プール、 またはマルチプールを参照できます。 ただし、 単一の接続プールを使用する

複数の DataSource を定義できます。 これによ り、 同じデータベースを共有するト ランザクシ ョ ン対応 DataSource オブジェ ク ト と ト ランザクシ ョ ン非対応 DataSource オブジェ ク ト の両方を定義できます。

WebLogic Server では、 2 種類の DataSource オブジェ ク ト がサポート されます。

� DataSource ( ローカル ト ランザクシ ョ ンのみ )

� TxDataSource ( 分散ト ランザクシ ョ ン )

アプリ ケーシ ョ ンで次のいずれかの基準が該当する場合は、 WebLogic Server で TxDataSource を使用して ください。

� Java Transaction API (JTA) を使用している

� WebLogic Server EJB コンテナを使用して、 ト ランザクシ ョ ンを管理してい

� 単一の ト ランザクシ ョ ン中に、 何度もデータベースが更新されている

TxDataSource の使い方、 およびコンフ ィ グレーシ ョ ンの方法については、 『管理

者ガイ ド』 の 「接続プール、 マルチプール、 およびデータソースの JDBC コンフ ィ グレーシ ョ ン ガイ ド ライン」 を参照して ください。

2-32 WebLogic JDBC プログラマーズ ガイ ド

Page 61: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

DataSource のコンフ ィ グレーシ ョ ンと使い方

アプ リ ケーシ ョ ンで DataSource を使用して、 接続プールからデータベース接続を取得する ( 推奨 ) 場合は、 アプ リ ケーシ ョ ンを実行する前に、 Administration Console で DataSource 定義します。 DataSource の作成手順については、Administration Console オンライン ヘルプを参照して ください。 TxDataSource の作成手順については、 Administration Console オンライン ヘルプを参照して ください。

DataSource オブジェク トにアクセスするパッケージのインポート

アプ リ ケーシ ョ ンで DataSource オブジェ ク ト を使用するには、 以下のク ラスをク ライアン ト コードにインポート します。

import java.sql.*;import java.util.*;import javax.naming.*;

DataSource を使用したクライアント接続の取得

JDBC ク ラ イアン トから接続を取得するには、 以下のコードに示すよ うに、 Java Naming and Directory Interface (JDNI) ルッ クアップを使用して DataSource オブジェ ク ト を見つけます。

Context ctx = null; Hashtable ht = new Hashtable(); ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); ht.put(Context.PROVIDER_URL, "t3://hostname:port");

try { ctx = new InitialContext(ht); javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("myJtsDataSource"); java.sql.Connection conn = ds.getConnection();

// これで conn オブジェクトを使用して// 文を作成し、結果セットを検索できる

WebLogic JDBC プログラマーズ ガイ ド 2-33

Page 62: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

2 WebLogic JDBC のコンフ ィグレーシ ョ ンと管理

Statement stmt = conn.createStatement();stmt.execute("select * from someTable");ResultSet rs = stmt.getResultSet();

// 終了したら文と接続オブジェクトをクローズする

stmt.close(); conn.close(); } catch (NamingException e) {// エラー発生 } finally { try {ctx.close();} catch (Exception e) {// エラー発生 } }

(使用する WebLogic Server に合わせて適切な hostname と port 番号に置き換えます。)

注意 : 上のコードでは、 JNDI コンテキス ト を取得するためにいくつかの使用可

能なプロシージャが使用されています。 JNDI の詳細については、『WebLogic JNDI プログラマーズ ガイ ド』 を参照して ください。

コード例

WebLogic Server の samples/examples/jdbc/datasource ディ レク ト リに収め

られている DataSource コード例を参照して ください。

JDBC データ ソース ファク ト リ

WebLogic Server では、 JDBC データ ソース リ ソースを、 リ ソース ファ ク ト リ として WebLogic Server JNDI ツ リーにバインドできます。 その後、EJB デプロイ メン ト記述子の リ ソース ファ ク ト リ参照を、実行中の WebLogic Server の利用可能な リ ソース ファ ク ト リにマップする と、 接続プールから接続を取得できます。

JDBC データ ソース ファ ク ト リの作成、 および使用については、 『WebLogic エンタープラ イズ JavaBeans プログラマーズ ガイ ド』 の 「リ ソース ファ ク ト リ 」を参照して ください。

2-34 WebLogic JDBC プログラマーズ ガイ ド

Page 63: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

3 JDBC アプリケーションのパフォーマンス チューニング

以下の節では、 JDBC アプ リ ケーシ ョ ンを最大限に活用する方法について説明し

ます。

� 3-1 ページの 「JDBC パフォーマンスの概要」

� 3-1 ページの 「WebLogic のパフォーマンス向上機能」

� 3-3 ページの 「ベス ト パフォーマンスのためのアプリ ケーシ ョ ン設計」

JDBC パフォーマンスの概要

Java、 JDBC、 および DBMS 処理に関連する概念は、 多くのプログラマにと って

未知のものです。 Java がさ らに普及していけば、 データベース アクセス とデータベース アプリ ケーシ ョ ンの実装はよ り簡単にな り ます。 このドキュ メ ン トで

は、 JDBC アプリ ケーシ ョ ンから最高のパフォーマンスを引き出すための ヒン ト

を紹介します。

WebLogic のパフォーマンス向上機能

WebLogic には、 JDBC アプ リ ケーシ ョ ンのパフォーマンスを向上させるための

機能がいくつか用意されています。

WebLogic JDBC プログラマーズ ガイ ド 3-1

Page 64: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

3 JDBC アプリケーシ ョ ンのパフォーマンス チューニング

接続プールによるパフォーマンスの向上

DBMS への JDBC 接続を確立するには非常に時間がかかる場合があ り ます。JDBC アプリ ケーシ ョ ンでデータベース接続のオープンと クローズを繰り返す必

要がある場合、 これは重大なパフォーマンスの問題とな り ます。 WebLogic 接続プールは、 こ う した問題を効率的に解決します。

WebLogic Server を起動する と、 接続プール内の接続が開き、 すべてのク ライアン トが使用できるよ うにな り ます。 ク ライアン トが接続プールの接続をク ローズ

する と、 その接続はプールに戻され、 他のク ライアン ト が使用できる状態にな ります。 つま り、 接続そのものはクローズされません。 プール接続のオープンと ク

ローズには、 ほとんど負荷がかかり ません。

どのく らいの数の接続をプールに作成すればよいでし ょ う か。 接続プールの数は、 コンフ ィグレーシ ョ ンされたパラ メータに従って最大数と最小数の間で増減させるこ とができます。 常に最高のパフォーマンスが得られるのは、 同時ユーザと同じ く らいの数の接続が接続プールに存在する場合です。

Prepared Statement とデータのキャッシング

DBMS のアクセスでは大量にリ ソースを消費します。 プログラムで Prepared Statement を再利用する場合、 または複数のアプ リ ケーシ ョ ンでの共有や、 各接

続ど う しでの存続が可能な頻繁に使用するデータにアクセスする場合は、 以下のものを使用してデータをキャ ッシュできます。

� 接続プールの Prepared Statement キャ ッシュ

� 読み込み専用のエンテ ィテ ィ Bean

� ク ラスタ環境での JNDI

3-2 WebLogic JDBC プログラマーズ ガイ ド

Page 65: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

ベス ト パフォーマンスのためのアプ リケーシ ョ ン設計

ベスト パフォーマンスのためのアプリケーショ ン設計

データベース アプ リ ケーシ ョ ンのパフォーマンスの良し悪しはほとんどの場合、

アプ リ ケーシ ョ ン言語ではなく、 アプ リ ケーシ ョ ンがどのよ うに設計されているかによって決定ま り ます。 ク ライアン トの数と場所、 DBMS テーブルおよびインデッ クスのサイズと構造、 およびクエ リの数と タイプは、 すべてアプリ ケー

シ ョ ンのパフォーマンスに影響を与えます。

以下では、 すべての DBMS に当てはまる一般的な ヒン ト を示します。 また、 アプ リ ケーシ ョ ンで使用する特定の DBMS のドキュ メ ン トによ く目を通しておく

こ と も重要です。

1. データをできるだけデータベースの内部で処理する

DBMS アプリ ケーシ ョ ンのパフォーマンスに関する最も深刻な問題は、 生デー

タを不必要に移動する こ とから発生します。 これは、 生データをネッ ト ワーク上で移動する場合にも、 単に DBMS のキャッシュに出し入れする場合にも言えるこ とです。 こ う した無駄を最小限に抑えるための良い方法は、 ク ラ イアン ト が DBMS と同じマシンで動作している場合でも、 ロジッ クをク ラ イアン ト ではなくデータの格納場所、 つま り DBMS に置 く こ とです。 実際のと ころ、 一部の DBMS では、1 個の CPU を共有するファ ッ ト ク ラ イアン ト と ファ ッ ト DBMS はパフォーマンスの致命的な低下をもたら します。

大部分の DBMS は、 ス ト アド プロシージャ とい う、 データの格納場所にロジッ

クを置 くための理想的なツールを備えています。 ス ト アド プロシージャを呼び出して 10 個の行を更新する ク ライアン ト と、 同じ行を取得および変更し、UPDATE 文を送信してその変更を DBMS に保存するク ラ イアン ト の間には、 パフォーマンスに大きな違いがあ り ます。

WebLogic JDBC プログラマーズ ガイ ド 3-3

Page 66: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

3 JDBC アプリケーシ ョ ンのパフォーマンス チューニング

また、 DBMS のドキュ メ ン ト を参照して、 DBMS 内のキャッシュ メモ リの管理について調べる必要もあ り ます。 一部の DBMS (Sybase など ) は、 DBMS に割 り当てられた仮想メモ リ を分割し、 特定のオブジェ ク トがキャッシュの固定領域を独占的に使用できるよ うにする機能を備えています。 この機能を使用する と、 重要なテーブルまたはインデッ クスをディ スクから一度読み出しておく こ とで、

ディ スクに再度アクセスしな くてもすべてのク ラ イアン ト がそれらを使用できるよ うにな り ます。

2. 組み込み DBMS セッ トベース処理を使用する

SQL は、 セッ ト処理言語です。 DBMS は、 完全にセッ トベース処理を行う よ う

に設計されています。 データベースへの 1 行へのアクセスは、 例外なくセッ トベースの処理よ り遅 く、 また DBMS によっては実装が不完全です。 たとえば、従業員 100 名に関するデータが格納されている 4 つのテーブルがある場合、全従業員について各テーブルを一度に更新する方が、従業員 1 名ごとに各テーブルを 100 回更新するよ り常に高速です。

あま りに複雑すぎて 1 行ずつ処理する以外に方法がないと考えられていた処理の多くが、 セッ トベースの処理に書き換えられ、 パフォーマンスの向上を実現しています。 たとえば、 ある有名な給与管理アプ リ ケーシ ョ ンは、 巨大で低速な COBOL アプリ ケーシ ョ ンから、連続実行される 4 つのス ト アド プロシージャに変換されました。 この結果、 マルチ CPU マシンで何時間もかかった処理が、 より少ないリ ソースで 15 分で実行できるよ うにな り ました。

3. クエリを効率化する

ユーザからよ く尋ねられる質問に、 「特定の結果セッ トで返される行数はどのく

らいか」 とい う ものがあ り ます。 すべての行を取り出さずに調べる唯一の方法は、 次のよ うに count キーワードを使用して同じ クエ リ を発行するこ とです。

SELECT count(*) from myTable, yourTable where ...

これによ り、 関連するデータには変更がなかった場合に、 オ リ ジナルのクエ リが

戻すべき行数が返されます。 また関連するデータに影響を与えるその他の DBMS アクテ ィ ビティが起きた場合に、 クエ リ を実行すれば、 実際の行数は変

わり ます。

3-4 WebLogic JDBC プログラマーズ ガイ ド

Page 67: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

ベス ト パフォーマンスのためのアプ リケーシ ョ ン設計

ただし、 これはリ ソースを大量に消費する処理である こ とに注意して ください。元のクエ リによっては、 DBMS は行を送信するのと同じ く らいの処理を行って行をカウン トする必要があ り ます。

アプ リ ケーシ ョ ンのクエ リは、 実際にどのよ う なデータが必要なのかをできる限り具体的に指定する必要があ り ます。 たとえば、 まず一時テーブルに抽出し、 カウン ト だけを返し、 次に限定された 2 番目のクエ リ を送信して一時テーブル内の

行のサブセッ ト だけを返すよ うにします。

ク ラ イアン トが本当に必要なデータだけを抽出するこ とが、 きわめて重要です。ISAM ( リ レーシ ョナル データベース以前のアーキテクチャ ) から移植された一部のアプリ ケーシ ョ ンでは、 実際に必要なのは最初の数行だけであっても、 テーブル内のすべての行を選択する クエ リが送信されます。 また、 最初に取得する行を得るために 「sort by」 句を使用するアプリ ケーシ ョ ンもあ り ます。 このよ う な

データベース クエ リは、 パフォーマンスを不必要に低下させます。

SQL を適切に使用する と、 こ う したパフォーマンス上の問題を回避できます。たとえば、 高額給与の社員のうち上位 3 人だけのデータが必要な場合、 クエ リ を

適切に行うには、 相関サブクエ リ を使用します。 表 3-1 に SQL 文が返す全体の表を示します。

select * from payroll

表 3-1 返された完全な結果

名前 給与

Joe 10

Mikes 20

Sam 30

Tom 40

Jan 50

Ann 60

Sue 70

Hal 80

WebLogic JDBC プログラマーズ ガイ ド 3-5

Page 68: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

3 JDBC アプリケーシ ョ ンのパフォーマンス チューニング

相関サブクエ リ

select p.name, p.salary from payroll p

where 3 >= (select count(*) from payroll pp

where pp.salary >= p.salary);

表 3-2 に示すよ うに、 このクエ リでは、 よ り小さい結果が返されます。

このクエ リでは、上位 3 名の高所得者の名前と給与が登録された 3 行だけが返されます。 このクエ リでは、 給与テーブル全体をスキャンし、 次に各行について内部ループで給与テーブル全体を再スキャンして、 ループの外でスキャンした現在の行よ り高額の給与が何件あるかを調べます。 この処理は複雑なよ うに見えるかもしれませんが、 DBMS はこの種の処理では SQL を効率的に使用するよ うに設計されています。

4. ト ランザクシ ョンを単一バッチにする

可能な限り、 一連のデータ処理を収集し、 更新ト ランザクシ ョ ンを次のよ う な単

一の文で発行して ください。

BEGIN TRANSACTION

May 80

表 3-2 サブクエリの結果

名前 給与

Sue 70

Hal 80

May 80

表 3-1 返された完全な結果

名前 給与

3-6 WebLogic JDBC プログラマーズ ガイ ド

Page 69: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

ベス ト パフォーマンスのためのアプ リケーシ ョ ン設計

UPDATE TABLE1...

INSERT INTO TABLE2

DELETE TABLE3

COMMIT

この方法によ り、 別個の文と コ ミ ッ ト を使用するよ りパフォーマンスが向上します。 バッチ内で条件ロジッ ク と一時テーブルを使用する場合でも、 DBMS はさまざまな行とテーブルに必要なすべてのロッ クを取得し、 ワン ステップで使用および解放するので、 この方法は望ましいと言えます。 別個の文と コ ミ ッ ト を使

用する と、 ク ラ イアン ト と DBMS 間の転送が増加し、 DBMS 内のロ ッ ク時間が長く な り ます。 こ う したロ ッ クによ り、 他のク ライアン トはそのデータにアクセスできな く な り、 複数の更新がさまざまな順序でテーブルを更新できるかによって、 デッ ド ロ ッ クが発生する可能性があ り ます。

警告 : ユニーク キー制約の違反などによって上記の ト ランザクシ ョ ン中の任意

の文が適切に実行されなかった場合は、 条件 SQL ロジッ クを追加して文の失敗を検出し、 ト ランザクシ ョ ンをコ ミ ッ トせずにロール バッ クする必要があ り ます。 上の例の場合、 INSERT 文が失敗する と、 ほとんどの DBMS は挿入の失敗を示すエラー メ ッセージを返しますが、 2 番目と 3 番目の文の間でメ ッセージを取得したかのよ うに動作して、 コ ミ ットが行われてしまいます。 Microsoft SQL Server には、 SQL set xact_abort on の実行によって有効となる接続オプシ ョ ンがあ り ます。

このオプシ ョ ンを使用する と、 文が失敗した場合にト ランザクシ ョ ンが

自動的にロールバッ ク されます。

5. DBMS ト ランザクシ ョンがユーザ入力に依存しないようにする

アプ リ ケーシ ョ ンが、 'BEGIN TRAN' と、 更新のために行またはテーブルをロックする SQL を送信する場合、 ユーザのキー入力がなければト ランザクシ ョ ンを

コ ミ ッ トできないよ うにアプ リ ケーシ ョ ンを設計してはな り ません。 ユーザがキー入力をせずに昼食に出かけてしま う と、 ユーザが戻って く るまで DBMS 全体がロ ッ ク されてしまいます。

WebLogic JDBC プログラマーズ ガイ ド 3-7

Page 70: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

3 JDBC アプリケーシ ョ ンのパフォーマンス チューニング

ト ランザクシ ョ ンの作成と完了にユーザ入力が必要な場合は、 オプティ ミ ステ ィ ッ ク ロ ッ クを使用します。 簡単に言えば、 オプティ ミ ステ ィ ッ ク ロ ッ クではクエ リ と更新でタイムスタンプと ト リガが使用されます。 クエ リは、 ト ランザ

クシ ョ ン中にデータをロ ッ クするこ とな く、 タ イムスタンプ値を持つデータを選択し、 そのデータに基づいて ト ランザクシ ョ ンを準備します。

更新ト ランザクシ ョ ンがユーザ入力によって定義される と、 そのデータはタイムスタンプと共に単一の送信と して送られます。 これによ り、 そのデータが最初に取 り出したデータ と同じであるこ と を確認できます。 ト ランザクシ ョ ンが正常に実行される と、 変更されたデータのタイムスタンプが更新されます。 別のユーザからの更新ト ランザクシ ョ ンによって現在の ト ランザクシ ョ ンが処理するデータが変更された場合、 タイムスタンプが変更され、 現在の ト ランザクシ ョ ンは拒否

されます。 ほとんどの場合、 関連データが変更されるこ とはないので通常ト ラン

ザクシ ョ ンは正常に実行されます。 ある ト ランザクシ ョ ンが失敗する と、 アプ リ

ケーシ ョ ンは更新されたデータを リ フレッシュし、 必要に応じて ト ランザクシ ョ

ンを再作成するよ う通知します。

6. 同位置更新を使用する

データ行の同位置での更新は、 行の移動よ り非常に高速です。 行の移動は、 更新処理でテーブル設計の許容範囲を越えるスペースが必要な場合に行う必要があ り

ます。 必要なスペースを持つ行を最初から設計しておけば、 更新は早く な り ます。 ただし、 テーブルに必要なディ スク空間は大き くな り ます。 ディ スク スペースのコス トは低いので、 パフォーマンスが向上するのであれば、 使用量を少しだけ増やすこ とは価値ある投資だと言えるでし ょ う 。

7. 操作データをできるだけ小さ くする

アプリ ケーシ ョ ンによっては、 操作データを履歴データ と同じテーブルに格納する ものもあ り ます。 時間の経過と共に履歴データが蓄積されていく と、 すべての操作クエ リでは、 新しいデータを取得するために (日々の作業では ) 役に立たないデータを大量に読み取らなければなり ません。 これを回避するには、 過去のデータを別のテーブルに移動し、 まれにしか発生しない履歴クエ リのためにこれ

らのテーブルを結合します。 これを行う こ とができない場合、 最も頻繁に使用されるデータが論理的および物理的に配置されるよ う、 テーブルをインデッ クス処理およびク ラスタ化します。

3-8 WebLogic JDBC プログラマーズ ガイ ド

Page 71: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

ベス ト パフォーマンスのためのアプ リケーシ ョ ン設計

8. パイプラインと並行処理を使用する

DBMS は、 さまざまな作業を大量に処理する と きに最も能力を発揮します。DBMS の最も不適切な使い方は、 1 つの大規模なシングル スレ ッ ド アプリ ケー

シ ョ ン用のダム ファ イル ス ト レージと して使用するこ とです。 容易に区別できる作業サブセッ ト を扱 う大量の並行処理をサポートするよ う アプ リ ケーシ ョ ン と

データを設計すれば、 そのアプ リ ケーシ ョ ンはよ り高速にな り ます。 処理に複数のステップがある場合、 先行ステップが完了するまで次のステップを待つのではなく、 いずれかの先行ステップが処理を終えた部分のデータに対して後続ステップが処理を開始できるよ うにアプ リ ケーシ ョ ンを設計します。 これは常に可能である とは限り ませんが、 このこ とに留意してプログラムを設計する と、 パフォーマンスを大幅に向上させる こ とができます。

WebLogic JDBC プログラマーズ ガイ ド 3-9

Page 72: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

3 JDBC アプリケーシ ョ ンのパフォーマンス チューニング

3-10 WebLogic JDBC プログラマーズ ガイ ド

Page 73: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

4 WebLogic 多層 JDBC ド ライバの使い方

新しいアプリ ケーシ ョ ンでは、 DataSource オブジェク ト を使ってデータベース接続を取得する こ と をお勧めします。 DataSource オブジェ ク ト を JNDI と組み合わせる と、 データベースへの接続を提供する接続プールにアクセスできます。

JDBC 1.x API を使用した既存のアプリ ケーシ ョ ン、 またはレガシー アプ リ ケー

シ ョ ンの場合は、 WebLogic 多層 ド ラ イバを使用して、 データベース接続を取得できます。

以下の節では、 WebLogic Server で多層 JDBC ド ラ イバを使用する方法について説明します。

� 4-1 ページの 「WebLogic RMI ド ラ イバの使い方」

� 4-7 ページの 「WebLogic JTS ド ラ イバの使い方」

� 4-10 ページの 「WebLogic Pool ド ラ イバの使い方」

WebLogic RMI ドライバの使い方

WebLogic RMI ド ラ イバは、 WebLogic Server が接続プールからデータベース接続を、 DataSource や TxDataSource に渡すと きに使用する多層 Type 3 JDBC ド ライバです。 DataSource オブジェ ク トによ り、 WebLogic RMI ド ラ イバを介してアプリ ケーシ ョ ンのデータベース接続にアクセスできます。Administration Console または WebLogic 管理 API (DBMS へのアクセスに使用する 2 層 JDBC ド ラ イバも含め ) を使用して、 データベース接続パラ メータを接続プールに設定します。図 1-1 を参照して ください。

WebLogic JDBC プログラマーズ ガイ ド 4-1

Page 74: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

4 WebLogic 多層 JDBC ド ライバの使い方

RMI ド ラ イバ ク ラ イアン トは、 DataSource オブジェ ク ト をルッ クアップすることで、 DBMS への接続を確立します。 このルッ クアップは、 Java Naming and Directory Interface (JNDI) ルッ クアップを使うか、 またはク ライアン トに代わっ

て JNDI ルッ クアップを実行する WebLogic Server を直接呼び出すこ とによ り実行されます。

RMI ド ラ イバは、WebLogic t3 ド ラ イバ ( この リ リースでは非推奨 ) と Pool ド ライバの機能に取って代わるもので、 独自の t3 プロ ト コルではな く Java 標準の Remote Method Invocation (RMI) を使用して WebLogic Server に接続します。

RMI 実装の詳細はド ライバによって自動的に処理されるため、 WebLogic JDBC/RMI ド ラ イバを使用するために RMI の知識は必要ではあ り ません。

WebLogic RMI ド ライバを使用するための WebLogic Server の設定

RMI ド ラ イバには、 DataSource オブジェ ク ト を通してだけアクセスできます。DataSource オブジェ ク トは、 Administration Console で作成します。 アプ リ ケー

シ ョ ンで RMI ド ラ イバを使用するには、 まず WebLogic Server コンフ ィグレーシ ョ ンに DataSource オブジェク ト を作成します。 Administration Console を使用してマルチプールを作成する手順については、 Administration Console オンライン ヘルプを参照して ください。 TxDataSource の作成手順については、Administration Console オンラ イン ヘルプを参照して ください。

RMI ド ライバを使用するサンプル クライアント コード

RMI ド ラ イバを使用して、 WebLogic Server 接続プールからデータベース接続を取得し、 使用する方法を以下のコード サンプルで示します。

4-2 WebLogic JDBC プログラマーズ ガイ ド

Page 75: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

WebLogic RMI ド ライバの使い方

必要なパッケージをインポートする

RMI ド ラ イバを使用して、 データベース接続を取得 / 使用する前に、 次のパッケージをインポート します。

javax.sql.DataSource java.sql.*java.util.*javax.naming.*

データベース接続を取得する

WebLogic JDBC/RMI ク ラ イアン トは、 Administration Console で定義された DataSource から DBMS への接続を取得します。 ク ライアン トは、 以下の 2 通り

の方法で DataSource オブジェ ク ト を取得できます。

� JNDI ルッ クアップを使用します。 これが最も直接的で望ましい方法です。

� Driver.connect() メ ソ ッ ドで DataSource 名を RMI ド ラ イバに渡します。この場合、 WebLogic Server はク ライアン トに代わって JNDI ルッ クアップを実行します。

JNDI ルックアップを使用した接続の取得

JNDI を使用して WebLogic RMI ド ラ イバにアクセスするには、 DataSource オブジェ ク トの名前をルッ クアップするこ とで、 JNDI ツ リーから Context オブジェク ト を取得します。 たとえば、 Administration Console で定義された「myDataSource」 とい う DataSource にアクセスするには、 以下のよ うにします。

Context ctx = null; Hashtable ht = new Hashtable(); ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); ht.put(Context.PROVIDER_URL, "t3://hostname:port");

try { ctx = new InitialContext(ht); javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("myDataSource"); java.sql.Connection conn = ds.getConnection();

WebLogic JDBC プログラマーズ ガイ ド 4-3

Page 76: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

4 WebLogic 多層 JDBC ド ライバの使い方

// これで conn オブジェクトを使用して // Statement オブジェクトを作成して// SQL 文を実行し、結果セットを処理できる

Statement stmt = conn.createStatement();stmt.execute("select * from someTable");ResultSet rs = stmt.getResultSet();

// 完了したら、文オブジェクトと // 接続オブジェクトを忘れずにクローズすること

stmt.close(); conn.close(); } catch (NamingException e) {// エラー発生 } finally { try {ctx.close();} catch (Exception e) {// エラー発生 } }

(hostname は WebLogic Server が稼働するマシンのホス ト名、 port は WebLogic Server がリ クエス ト を リ スンするポートの番号です。 )

この例では、 Hashtable オブジェ ク ト を使って、 JNDI ルッ クアップに必要なパラメータを渡しています。 JNDI ルッ クアップを実行する方法は他にもあ り ます。詳細については、 『WebLogic JNDI プログラマーズ ガイ ド』 を参照して ください。

ルッ クアップの失敗を捕捉するために JNDI ルッ クアップが try/catch ブロッ クで包まれている点に注意して ください。 また、 コンテキス トが finally ブロ ックの中でクローズされている点にも注意して ください

WebLogic RMI ド ライバだけを使用して接続を取得する

DataSource オブジェ ク ト をルッ クアップしてデータベース接続を取得する代わりに、 Driver.connect() メ ソ ッ ドを使用して WebLogic Server にアクセスできます。 この場合は、 JDBC/RMI ド ラ イバが JNDI ルッ クアップを実行します。WebLogic Server にアクセスするには、 WebLogic Server の URL と、 DataSource オブジェ ク ト の名前を定義するパラ メータを Driver.connect() メ ソ ッ ドに渡します。 たとえば、 Administration Console で定義された 「myDataSource」 という DataSource にアクセスするには、 以下のよ うにします。

4-4 WebLogic JDBC プログラマーズ ガイ ド

Page 77: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

WebLogic RMI ド ライバの使い方

java.sql.Driver myDriver = (java.sql.Driver) Class.forName("weblogic.jdbc.rmi.Driver").newInstance();

String url ="jdbc:weblogic:rmi";

java.util.Properties props = new java.util.Properties();props.put("weblogic.server.url", "t3://hostname:port");props.put("weblogic.jdbc.datasource", "myDataSource");

java.sql.Connection conn = myDriver.connect(url, props);

(hostname は WebLogic Server が稼働するマシンのホス ト名、 port は WebLogic Server がリ クエス ト を リ スンするポートの番号です。 )

また、 JNDI ユーザ情報を設定するために使用する以下のプロパティ も定義できます。

� weblogic.user - ユーザ名を指定します。

� weblogic.credential - weblogic.user のパスワードを指定します。

WebLogic RMI ドライバによる行キャッシング

行キャ ッシングは、 アプ リ ケーシ ョ ンのパフォーマンスを向上するための WebLogic Server JDBC 機能です。 通常、 ク ライアン ト が ResultSet.next() を呼び出すと、 WebLogic は DBMS から単一行を取得し、 これをク ラ イアン ト JVM に転送します。行キャ ッシングが有効になっている と、ResultSet.next() を 1 回呼び出すだけで複数の DBMS 行が取得され、 これらがク ラ イアン ト メモリにキャッシュ されます。 行キャ ッシングを行う と、 データ取得のための通信の回数が減る こ とでパフォーマンスが向上します。

注意 : ク ラ イアン ト と WebLogic Server が同じ JVM にある場合、 行キャ ッシングは実行されません。

行キャ ッシングは、 データ ソース属性 [ 行のプ リ フェ ッチを有効化 ] で有効にした り無効にした りできます。 また、 ResultSet.next() の呼び出しごとに取得される行の数は、 データ ソース属性 [Row Prefetch サイズ ] で設定します。 データ ソース属性は、 Administration Console で設定します。 行キャッシングを有効にして、 DataSource または TxDataSource に行のプリ フェ ッチ サイズ属性を設定するには、 次の手順に従います。

WebLogic JDBC プログラマーズ ガイ ド 4-5

Page 78: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

4 WebLogic 多層 JDBC ド ライバの使い方

1. Administration Console の左ペインで、 [ サービス| JDBC|データ ソース|ト ランザクシ ョ ン データ ソース ] を選択し、 行キャッシングを有効にする DataSource、 または TxDataSource を選択します。

2. Administration Console の右ペインで、 [ コンフ ィグレーシ ョ ン ] タブを選択 (まだ選択されていない場合 ) します。

3. [ 行のプ リ フェ ッチを有効化 ] チェ ッ クボッ クスを選択します。

4. [ 行のプ リ フェ ッチを有効化 ] で、 ResultSet.next() の呼び出しごとにキャ ッシングする行の数を指定します。

WebLogic RMI ド ライバによる行キャッシングの重要な制限事項

RMI ド ラ イバを使用して行キャッシングを実装する場合は、 以下の制限事項があるこ とに注意して ください。

� 行キャッシングは、 結果セッ ト型が TYPE_FORWARD_ONLY および CONCUR_READ_ONLY の両方である場合にのみ実行されます。

� 結果セッ トのデータ型によっては、 その結果セッ ト のキャ ッシングが無効で

ある場合があ り ます。 これには以下が含まれます。

� LONGVARCHAR/LONGVARBINARY

� NULL

� BLOB/CLOB

� ARRAY

� REF

� STRUCT

� JAVA_OBJECT

� 行キャッシングが有効で、 その結果セッ トに対してアクテ ィブな場合、 一部

の ResultSet メ ソ ッ ドはサポート されません。 そのほとんどは、 ス ト リーミ

ング データ、 スク ロール可能な結果セッ ト 、 または行キャ ッシングがサポート されていないデータ型に関係しています。 これには以下が含まれます。

� getAsciiStream()

� getUnicodeStream()

4-6 WebLogic JDBC プログラマーズ ガイ ド

Page 79: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

WebLogic JTS ド ライバの使い方

� getBinaryStream()

� getCharacterStream()

� isBeforeLast()

� isAfterLast()

� isFirst()

� isLast()

� getRow()

� getObject (Map)

� getRef()

� getBlob()/getClob()

� getArray()

� getDate()

� getTime()

� getTimestamp()

WebLogic JTS ドライバの使い方

JTS (Java Transaction Services) ド ラ イバは、WebLogic Server 内で実行中のアプリ

ケーシ ョ ンから接続プールや SQL ト ランザクシ ョ ンへのアクセスを提供する、

サーバ サイ ド Java JDBC (Java Database Connectivity) ド ラ イバです。データベースへの接続は接続プールから行われ、 アプ リ ケーシ ョ ンに代わってデータベース

管理システム (DBMS) に接続するために WebLogic Server 内で実行される 2 層 JDBC ド ラ イバを使用します。

ト ランザクシ ョ ンが開始される と、 同じ接続プールから接続を取得する実行スレ ッ ドのすべてのデータベース操作は、 そのプールの同じ接続を共有するこ とになっています。 これらの操作は、 エンタープライズ JavaBean (EJB) や Java Messaging Service (JMS) のよ う なサービスを通じて、 または標準 JDBC 呼び出しを使用して直接 SQL を送信するこ とによ り行う こ とができます。 デフォル ト で

は、 これらすべての操作は同じ接続を共有し、 同じ ト ランザクシ ョ ンに参加します。 ト ランザクシ ョ ンがコ ミ ッ ト またはロールバッ ク される と、 接続はプールに

戻されます。

WebLogic JDBC プログラマーズ ガイ ド 4-7

Page 80: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

4 WebLogic 多層 JDBC ド ライバの使い方

Java ク ラ イアン ト は JTS ド ラ イバ自身を登録しない場合もあ り ますが、 Remote Method Invocation (RMI) を介して ト ランザクシ ョ ンに参加するこ とができます。

あるク ライアン ト の 1 つのスレ ッ ド内で ト ランザクシ ョ ンを開始し、 そのク ライ

アン トに リモート RMI オブジェ ク ト を呼び出させる こ とができます。 リモート オブジェ ク ト によって実行されるデータベース操作は、 そのク ラ イアン ト上で開始された ト ランザクシ ョ ンの一部分にな り ます。 その リモート オブジェク ト がそれを呼び出したク ラ イアン トに戻されたら、 その ト ランザクシ ョ ンをコ ミ ッ ト

またはロールバッ クできます。 リモート オブジェ ク ト によって実行されるデータベース操作は、 すべて同一の接続プールを使用しなければならず、 同一のト ラ

ンザクシ ョ ンの一部にならなければなり ません。

JTS ドライバを使用するサンプル クライアント コード

JTS ド ラ イバを使用するには、まず Administration Console を使用して WebLogic Server に接続プールを作成しなければな り ません。 詳細については、 2-2 ページの 「接続プールのコンフ ィ グレーシ ョ ン と使い方」 を参照して ください。

次に、 サーバサイ ド アプリ ケーシ ョ ンから JTS ト ランザクシ ョ ンを作成して使

用する方法について説明します。 こ こでは、 「myConnectionPool」 とい う接続

プールを使用します。

1. 以下のク ラスをインポート します。

import javax.transaction.UserTransaction;import java.sql.*;import javax.naming.*;import java.util.*;import weblogic.jndi.*;

2. UserTransaction ク ラスを使用して ト ランザクシ ョ ンを確立します。 JNDI ツ リー上でこのク ラスをルッ クアップできます。 UserTransaction ク ラスは、 現在の実行スレ ッ ド上の ト ランザクシ ョ ンを制御します。 このク ラスはト ランザクシ ョ ン自身を表さないこ とに注意してください。 この ト ランザク

シ ョ ンの実際のコンテキス ト は、 現在の実行スレッ ドに関連付けられています。

Context ctx = null;Hashtable env = new Hashtable();

4-8 WebLogic JDBC プログラマーズ ガイ ド

Page 81: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

WebLogic JTS ド ライバの使い方

env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); // WebLogic Server の パラメータ // 環境に合わせて適切なホスト名、ポート番号、// ユーザ名、およびパスワードに置き換えるenv.put(Context.PROVIDER_URL, "t3://localhost:7001"); env.put(Context.SECURITY_PRINCIPAL, "Fred");env.put(Context.SECURITY_CREDENTIALS, "secret"); ctx = new InitialContext(env); UserTransaction tx = (UserTransaction) ctx.lookup("javax.transaction.UserTransaction");

3. 現在のスレ ッ ドの ト ランザクシ ョ ンを開始します。

tx.begin();

4. JTS ド ラ イバをロード します。

Driver myDriver = (Driver) Class.forName("weblogic.jdbc.jts.Driver").newInstance();

5. 接続プールから接続を取得します。

Properties props = new Properties();props.put("connectionPoolID", "myConnectionPool"); conn = myDriver.connect("jdbc:weblogic:jts", props);

6. データベース操作を実行します。 これらの操作は、 EJB、 JMS、 および標準 JDBC 文など、 データベース接続を使用するどのサービスでも実行できます。これらの操作では、 JTS ド ラ イバを使用して、 手順 3 で開始した ト ランザク

シ ョ ンと同じ接続プールにアクセスするこ とによ り、 この ト ランザクシ ョ ン

に参加する必要があ り ます。

JTS ド ラ イバを使用した追加データベース操作が、 手順 5 で指定した接続プールとは違 う接続プールを使用する場合、 その ト ランザクシ ョ ンをコ ミ ッ

ト またはロールバッ ク しよ う とする と例外が発生します。

7. 接続オブジェク ト を ク ローズします。 接続をクローズしても、 それで ト ラン

ザクシ ョ ンがコ ミ ッ ト されるわけでも、 その接続がプールに戻されるわけでもないこ とに注意して ください。

conn.close();

WebLogic JDBC プログラマーズ ガイ ド 4-9

Page 82: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

4 WebLogic 多層 JDBC ド ライバの使い方

8. 他のデータベース操作を実行します。 これらの操作が同じ接続プールへの接続によって行われるのであれば、 それらの操作はプールから同じ接続を使用し、 このスレッ ド内の他のすべての操作と同じ UserTransaction の一部と

な り ます。

9. その ト ランザクシ ョ ンをコ ミ ッ ト またはロールバッ クするこ とによ り、 ト ラ

ンザクシ ョ ンを完了します。 JTS ド ラ イバは、 現在のスレ ッ ドに存在するすべての接続オブジェ ク ト のすべての ト ランザクシ ョ ンをコ ミ ッ ト し、 接続を

プールに返します。

tx.commit(); // または tx.rollback();

WebLogic Pool ドライバの使い方

WebLogic Pool ド ラ イバを使用する と、 HTTP サーブレッ トや EJB などのサーバサイ ド アプリ ケーシ ョ ンから接続プールを利用できます。 Pool ド ラ イバの使い方については、 『WebLogic HTTP サーブレッ ト プログラマーズ ガイ ド』 の 「プ

ログラ ミ ング タスク」 の 「データベースへのアクセス」 を参照して ください。

4-10 WebLogic JDBC プログラマーズ ガイ ド

Page 83: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーティ ド ライバの使い方

以下の節では、 サードパーティ JDBC ド ラ イバの設定および使用方法について説明します。

� 5-1 ページの 「サードパーテ ィ JDBC ド ラ イバの概要」

� 5-4 ページの 「サードパーテ ィの JDBC ド ラ イバに対する環境設定」

� 5-14 ページの 「サードパーティ ド ラ イバを使用した接続の取得」

� 5-19 ページの 「Oracle 拡張機能と Oracle Thin Driver の使用」

� 5-37 ページの 「Oracle 仮想プライベート データベースによるプログラ ミ ング」

� 5-39 ページの 「Oracle 拡張機能インタフェース とサポート される メ ソ ッ ドの

表」

サードパーティ JDBC ドライバの概要

WebLogic Server は、 以下の機能を提供するサードパーティ JDBC ド ラ イバと連携して機能します。

� スレッ ドセーフ

� 標準の JDBC 文を使用して ト ランザクシ ョ ンの実装が可能

この節では、 以下のサードパーティ JDBC ド ラ イバを WebLogic Server で設定して使用する方法について説明します。

� Oracle Thin Driver 8.1.7、 9.0.1、 9.2.0、 または 10g ( インス トールされている WebLogic Server に同梱 )

WebLogic JDBC プログラマーズ ガイ ド 5-1

Page 84: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

� Sybase jConnect Driver 4.5 および 5.5 ( インス トールされている WebLogic Server に同梱 )

� IBM Informix JDBC Driver

� Microsoft SQL Server Driver for JDBC

WebLogic Server 6.1 では、 Oracle Thin Driver と Sybase jConnect Driver は、weblogic.jar にバンドルされています。 バージ ョ ン 7.x では、 サードパーティの JDBC ド ラ イバは weblogic.jar のバンドルから除外されます。 代わりに、Oracle Thin Driver 10g (classes12.zip) と、 Sybase jConnect Driver の 4.5 (jConnect.jar) および 5.5 (jconn2.jar) の各バージ ョ ンが weblogic.jar で WL_HOME\server\lib フォルダにインス トールされます ( なお WL_HOME は WebLogic Platform がインス トールされるフォルダ )。 weblogic.jar のマニフェス トには、 これらのファ イルがリ ス ト されており、 weblogic.jar のロード時 (サーバの起動時 ) にロードできます。

注意 : WebLogic Server 7.0SP5 では、 Oracle Thin Driver のデフォル ト バージ ョ

ンは 10g ド ラ イバ (WL_HOME\server\lib のバージ ョ ン ) に変更されました。 WebLogic Server 7.0SP2、 SP3、 および SP4 では、 Oracle Thin Driver 9.2.0 がド ライバのデフォル ト バージ ョ ンでした。 サービス パッ ク 2 よ り前のリ リースの WebLogic Server 7.0 では、Oracle Thin Driver のデフォルトのバージ ョ ンは 8.1.7 でした。

インス トールされた WebLogic Server の WL_HOME\server\ext\jdbc フォルダ (WL_HOME は WebLogic Platform がインス トールされるフォルダ ) には、Oracle と Sybase の 各 JDBC ド ラ イバのサブフォルダが入っています。 図 5-1 を参照して ください。

5-2 WebLogic JDBC プログラマーズ ガイ ド

Page 85: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

サードパーテ ィ JDBC ド ライバの概要

図 5-1 WebLogic Server と共にインストールされる JDBC ドライバのディ レクト リ構造

oracle フォルダには、バージ ョ ン 10g を含む Oracle Thin Driver の各バージ ョ ン

が入っています (前述のとおり、 WL_HOME\server\lib フォルダにもある )。 これらのファ イルは、 WL_HOME\server\lib フォルダにコピーするこ とによ り、Oracle Thin Driver のバージ ョ ンを変更した り、 デフォル ト のバージ ョ ンに戻し

た りできます。 詳細については、 5-5 ページの 「Oracle Thin Driver の変更または更新」 を参照して ください。

sybase フォルダには、Sybase jConnect Driver 4.5 と Sybase jConnect Driver 5.5 および各サポート ファ イルを含むサブフォルダがあ り ます。 前述のとおり、 各ド

ラ イバ (jConnect.jar と jconn2.jar) は、 WL_HOME\server\lib フォルダに、ディ レ

ク ト リ構造やサポート ファ イルなしで、 インス トールされます。 WebLogic Server の実行中は、 WL_HOME\server\lib フォルダにあるファ イルが使用されます。 不良なド ライバやサポート対象外のド ライバの更新時に、 バッ クアップと して WL_HOME\server\ext\jdbc\sybase フォルダにある追加コピーを利用できます。

これらのド ラ イバのデフォル ト バージ ョ ンを使用する場合は、 いずれの変更も

必要あ り ません。 また、 別のバージ ョ ンのド ライバを使用する場合は、

WL_HOME\server\lib のファ イルを WL_HOME\server\ext\jdbc\oracle\version (version は使用する JDBC ド ライバのバージ ョ ン ) のファ イル、 または DBMS ベンダ (Oracle または Sybase) のファ イルに置き換えます。

WebLogic JDBC プログラマーズ ガイ ド 5-3

Page 86: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

weblogic.jar のマニフェス ト には、 WL_HOME\server\lib にある Oracle Thin Driver と Sybase jConnect Driver のク ラス ファ イルがリ ス ト されているため、

weblogic.jar のロード時 ( サーバの起動時 ) に、 各ド ライバがロード されます。したがって、 CLASSPATH に JDBC ド ラ イバを追加する必要はあ り ません。 また、WebLogic Server にはインス トールされていないサードパーテ ィの JDBC ド ラ イバを使用する場合は、 CLASSPATH にド ライバ ファ イルのパスを追加します。

サードパーティの JDBC ドライバに対する環境設定

WebLogic Server 7.0 には含まれていない Oracle Thin Driver または Sybase jConnect Driver 以外のサードパーティの JDBC ド ラ イバを使用する場合は、CLASSPATH に JDBC のド ライバ ク ラスに対するパスを追加する必要があ り ます。サードパーティの JDBC ド ラ イバを使用する と きに Windows、 および UNIX の環境に合わせた CLASSPATH を設定する方法について以下の節で説明します。

Windows でのサードパーティ JDBC ドライバの CLASSPATH

次のよ うに、 CLASSPATH に JDBC ド ラ イバ ク ラス と weblogic.jar へのパスを指定します。

set CLASSPATH=DRIVER_CLASSES;WL_HOME\server\lib\weblogic.jar;%CLASSPATH%

こ こで、 DRIVER_CLASSES は、 JDBC ド ラ イバ ク ラスへのパス、 WL_HOME は、WebLogic Platform をインス トールするディ レク ト リ を表します。

5-4 WebLogic JDBC プログラマーズ ガイ ド

Page 87: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

サードパーテ ィの JDBC ド ライバに対する環境設定

UNIX でのサードパーティ JDBC ド ライバの CLASSPATH

次のよ うに、 CLASSPATH に JDBC ド ラ イバ ク ラス と weblogic.jar へのパスを追加します。

export CLASSPATH=DRIVER_CLASSES:WL_HOME/server/lib/weblogic.jar:$CLASSPATH

こ こで、 DRIVER_CLASSES は、 JDBC ド ラ イバ ク ラスへのパス、 WL_HOME は、WebLogic Platform をインス トールするディ レク ト リ を表します。

Oracle Thin Driver の変更または更新

WebLogic Server にバンドルされた Oracle Thin Driver 10g (10.1.0.2.0) は事前にコンフ ィグレーシ ョ ンされ、 そのまま使用できる状態になっています。 別のバージ ョ ンを使用する場合は、 WL_HOME\server\lib\classes12.zip を該当するバージ ョ ンのファ イルに置き換えて ください。 たとえば、Oracle Thin Driver 9.2.0 を使用する場合は、 WL_HOME\server\ext\jdbc\oracle\920 フォルダから classes12.zip をコピーし、 それを WL_HOME\server\lib に置いて、 そのフォルダにあるバージ ョ ン 10g と置き換える必要があ り ます。

注意 : WebLogic Server 7.0SP5 では、 Oracle Thin Driver のデフォル ト バージ ョンは 10g ド ラ イバ (WL_HOME\server\lib にあるバージ ョ ン ) に変更されました。 WebLogic Server 7.0SP2、 SP3、 および SP4 では、 Oracle Thin Driver 9.2.0 がド ライバのデフォル ト バージ ョ ンでした。 サービス パッ ク 2 よ り前のリ リースの WebLogic Server 7.0 では、 Oracle Thin Driver のデフォル トのバージ ョ ンは 8.1.7 でした。

Oracle Thin Drive 9.2.0、 9.0.1、 または 8.1.7 を使用する場合は、 次の手順に従います。

1. Windows エクスプローラ、 またはコマンド シェルで、 使用する ド ライバのバージ ョ ンのフォルダに移動します。

� WL_HOME\server\ext\jdbc\oracle\920

� WL_HOME\server\ext\jdbc\oracle\901

WebLogic JDBC プログラマーズ ガイ ド 5-5

Page 88: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

� WL_HOME\server\ext\jdbc\oracle\817

2. classes12.zip をコピーします。

3. Windows エク スプローラ、またはコマンド シェルで、WL_HOME\server\lib に移動し、 既存のバージ ョ ン、 classes12.zip を、 コピーしたバージ ョ ンに

置き換えます。

バージ ョ ン 10g ( デフォル ト ) に戻る場合は、 上記の説明に従い、 フォルダ WL_HOME\server\ext\jdbc\oracle\10g からコピーします。

Oracle Thin Driver のバージ ョ ンを Oracle の新バージ ョ ンで更新する場合は、WL_HOME\server\lib の classes12.zip を Oracle が提供する新しいファ イルで置き換えてください。 ド ラ イバのアップデートは、次の Oracle Web サイ ト からダウンロードできます。 http://otn.oracle.com/software/content.html

注意 : CLASSPATH に Oracle Thin Driver の複数のバージ ョ ンを指定するこ とは

できません。 さまざまな メ ソ ッ ドでク ラ ッシュが発生する可能性があ ります。

Oracle Thin Driver 9.x および 10g でのパッケージの変更

Oracle 8.x 以前のリ リースでは、 Oracle Thin Driver の含まれるパッケージは oracle.jdbc.driver でした。 Oracle 8.1.7 Thin Driver を使用する JDBC 接続プールをコンフ ィグレーシ ョ ンする際には、 DriverName ( ド ラ イバのク ラス名 ) を oracle.jdbc.driver.OracleDriver と して指定します。 Oracle 9.x と 10g では、Oracle Thin Driver の含まれるパッケージは oracle.jdbc です。 Oracle 9.x または 10g Thin Driver を使用する JDBC 接続プールをコンフ ィグレーシ ョ ンする際には、 DriverName ( ド ラ イバのク ラス名 ) を oracle.jdbc.OracleDriver として指定します。 oracle.jdbc.driver.OracleDriver ク ラスは 9.x と 10g のドライバで使用できますが、 このク ラスは今後、 機能の拡張が行われない場合もあ

り ます。

Oracle Thin Driver の詳細については、 Oracle のマニュアルを参照して ください。

注意 : パッケージの変更は、 XA バージ ョ ンのド ラ イバには関係あ り ません。 Oracle Thin Driver の XA バージ ョ ンの場合、 JDBC の接続プールで DriverName ( ド ラ イバのク ラス名 ) と しては oracle.jdbc.xa.client.OracleXADataSource を使用します。

5-6 WebLogic JDBC プログラマーズ ガイ ド

Page 89: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

サードパーテ ィの JDBC ド ライバに対する環境設定

nls_charset12.zip による文字セッ トのサポート

Oracle Thin ド ラ イバには、 Oracle のオブジェ ク ト型またはコレクシ ョ ン型の一部と して取得または挿入されない、 すべての CHAR および NCHAR データ型の Oracle 文字セッ ト に対するグローバリゼーシ ョ ン サポートが含まれています。

ただし、 Oracle オブジェ ク ト またはコレ クシ ョ ンの CHAR および VARCHAR データの部分に関しては、 Oracle Thin ド ラ イバには以下の文字セッ ト のグローバリゼーシ ョ ン サポートのみ含まれています。

� US7ASCII

� WE8DEC

� ISO-LATIN-1

� UTF-8

Oracle のオブジェ ク ト型またはコレクシ ョ ンの中の CHAR および NCHAR データで他の文字セッ ト を使用する場合は、 CLASSPATH に nls_charset.zip を含める必要があ り ます。 このファ イルが CLASSPATH にない場合、次の例外が発生します。

java.sql.SQLException: Non supported character set: oracle-character-set-178

nls_charset12.zip ファ イルは WebLogic Server と共に WL_HOME\server\ext\jdbc\oracle\920 および WL_HOME\server\ext\jdbc\oracle\10g フォルダにインス トールされます (WL_HOME は WebLogic Server のインス トール先フォルダです )。 CLASSPATH の設定手順については、 5-4 ページの 「サードパーティの JDBC ド ラ イバに対する環境設定」 を参照して ください。

Sybase jConnect Driver の更新

WebLogic Server にバンドルされた Sybase jConnect Driver 4.5 および 5.5 は事前にコンフ ィグレーシ ョ ンされ、 そのまま使用できる状態になっています。 別のバージ ョ ンを使用する場合は、 WL_HOME\server\lib\jConnect.jar または jconn2.jar を DBMS ベンダが提供する別バージ ョ ンのファ イルに置き換えて

ください。

WebLogic JDBC プログラマーズ ガイ ド 5-7

Page 90: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

WebLogic Server でインス トールされたバージ ョ ンに戻す場合は、

WL_HOME\server\lib フォルダに次のファ イルをコピーします。

� WL_HOME\server\ext\jdbc\sybase\jConnect.jar

� WL_HOME\server\ext\jdbc\sybase\jConnect-5_5\classes\jconn2.jar

IBM Infomix JDBC Driver のインストールと使い方

WebLogic Server と Infomix データベースを使用する場合は、IBM Informix JDBC Driver を使用する こ と をお勧めします。 このド ラ イバは、 次の IBM Web サイ トからダウンロードできます (http://www-3.ibm.com/software/data/informix/tools/jdbc/)。 IBM Informix JDBC Driver は無償で提供されていますが、 サポートの対象にはな り ま

せん。 製品をダウンロードするには、 IBM への登録が必要になる こ とがあ り ます。 JDBC/EMBEDDED SQLJ セッシ ョ ンでド ラ イバをダウンロード し、 ダウン

ロード した zip ファ イルに添付された install.txt ファ イルの指示に従って、ド ラ イバをインス トールします。

ド ラ イバをダウンロード してインス トールした後、 以下の手順に従って、WebLogic Server でド ラ イバを使用できるよ うに準備します。

1. INFORMIX_INSTALL\lib から ifxjdbc.jar ファ イルおよび ifxjdbcx.jar ファ イルをコピーして、 WL_HOME\server\lib フォルダに貼 り付けます。 ここで、

INFORMIX_INSTALL は、 Informix JDBC ド ラ イバをインス トールしたルート ディ レク ト リです。

また WL_HOME は、 WebLogic Platform をインス トールしたフォルダ (通常は c:\bea\weblogic700) です。

2. CLASSPATH に ifxjdbc.jar および ifxjdbcx.jar へのパスを追加します。 次に例を示します。

set CLASSPATH=%WL_HOME%\server\lib\ifxjdbc.jar;%WL_HOME%\server\lib\ifxjdbcx.jar;%CLASSPATH%

また WebLogic Server の起動スク リプ ト で set CLASSPATH 文にド ラ イバ ファ イルへのパスを追加する こ と もできます。

5-8 WebLogic JDBC プログラマーズ ガイ ド

Page 91: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

サードパーテ ィの JDBC ド ライバに対する環境設定

IBM Infomix JDBC Driver 使用時の接続プール属性

IBM Infomix JDBC Driver を使用する接続プールを作成する と きは、 表 5-1 および表 5-2 に示す属性を使用します。

config.xml のエン ト リは、 次のよ うにな り ます。

<JDBCConnectionPool DriverName="com.informix.jdbc.IfxDriver" InitialCapacity="3" LoginDelaySeconds="1" MaxCapacity="10" Name="ifxPool" Password="xxxxxxx" Properties="informixserver=ifxserver;user=informix" Targets="examplesServer" URL="jdbc:informix-sqli:ifxserver:1543" />

表 5-1 Infomix JDBC Driver 使用時の XA 非対応接続プールの属性

属性 値

[URL] jdbc:informix-sqli:dbserver_name_or_ip:port/dbname:informixserver=ifx_server_name

[ ド ラ イバ ク ラス名 ] com.informix.jdbc.IfxDriver

[ プロパテ ィ ] user=username

url=jdbc:informix-sqli:dbserver_name_or_ip:port/dbname:informixserver=ifx_server_name

portNumber=1543

databaseName=dbname

ifxIFXHOST=ifx_server_name

serverName=dbserver_name_or_ip

[ パスワード ] password

[ ログイン遅延時間 ] 1

[ 対象 ] serverName

WebLogic JDBC プログラマーズ ガイ ド 5-9

Page 92: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

注意 : [ プロパティ ] の文字列の portNumber と = の間にはスペースが入っています。

config.xml のエン ト リは、 次のよ うにな り ます。

<JDBCConnectionPool CapacityIncrement="2" DriverName="com.informix.jdbcx.IfxXADataSource" InitialCapacity="2" MaxCapacity="10" Name="informixXAPool" Properties="user=informix;url=jdbc:informix-sqli: //111.11.11.11:1543/db1:informixserver=lcsol15; password=informix;portNumber =1543;databaseName=db1; serverName=dbserver1;ifxIFXHOST=111.11.11.11" SupportsLocalTransaction="true" Targets="examplesServer" TestConnectionsOnReserve="true" TestTableName="emp"/>

表 5-2 Infomix JDBC Driver 使用時の XA 対応接続プールの属性

属性 値

[URL] 空白のまま

[ ド ラ イバ ク ラス名 ] com.informix.jdbcx.IfxXADataSource

[ プロパテ ィ ] user=username

url=jdbc:informix-sqli://dbserver_name_or_ip:port_num/dbname:informixserver=dbserver_name_or_ip

password=password

portNumber =port_num;

databaseName=dbname

serverName=dbserver_name

ifxIFXHOST=dbserver_name_or_ip

[ パスワード ] 空白のまま

[ ローカル ト ランザク

シ ョ ンのサポート ]

true

[ 対象 ] serverName

5-10 WebLogic JDBC プログラマーズ ガイ ド

Page 93: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

サードパーテ ィの JDBC ド ライバに対する環境設定

注意 : Administration Console を使用して接続プールを作成する場合、 接続プールを対象のサーバに適切にデプロイするためには、 その前にサーバを停止して再起動する必要があ り ます。 この問題は確認済みです。

IBM Infomix JDBC Driver のプログラ ミング上の注意

IBM Informix JDBC Driver を使用する と きは、 次の制限について注意が必要です。

� ド ラ イバに、 statement/resultset の処理が終了したこ とを指示するために、 必ず resultset.close() および statement.close() の各メ ソ ッ ドを呼び出

します。 呼び出さない場合、 プログラムではデータベース サーバのリ ソース

がすべて解放されない場合があ り ます。

� IFX_USEPUT 環境変数が 1 に設定されていない限り、 TEXT または BYTE カラムのある行を挿入し よ う とする と、 バッチ更新は失敗します。

� JDK のバージ ョ ンが 1.4 以降の場合、 ト ランザクシ ョ ン中に Java プログラムで自動コ ミ ッ ト モードが true にセッ ト される と、 IBM Informix JDBC Driver は、 現在の ト ランザクシ ョ ンをコ ミ ッ ト します。 true でない場合は、自動コ ミ ッ ト を実行する前に現在のト ランザクシ ョ ンをロールバッ ク しま

す。

Microsoft SQL Server 2000 Driver for JDBC のインストールと使い方

Microsoft SQL Server 2000 Driver for JDBC は、 ライセンスを持つ SQL Server 2000 ユーザならば無料でダウンロードできます。 このド ラ イバは、 JDBC 2.0 オプシ ョ ン パッケージのサブセッ ト をサポートする Type 4 JDBC ド ラ イバです。Microsoft SQL Server 2000 Driver for JDBC のインス トール時に、 サポート ドキュ メ ン ト をオプシ ョ ンでインス トールできます。 ド ラ イバに関する包括的な情報については、 そのドキュ メ ン ト を参照する必要があ り ます。 また、 確認済みの問題については、 リ リース マニフェス ト を参照して ください。

WebLogic JDBC プログラマーズ ガイ ド 5-11

Page 94: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

Microsoft SQL Server Driver for JDBC の Windows システムへのインストール

Microsoft SQL Server 2000 Driver for JDBC を Windows サーバにインス トールするには、 次の手順に従います。

1. Microsoft MSDN Web サイ トから Microsoft SQL Server 2000 Driver for JDBC (setup.exe ファ イル ) をダウンロード します。そのファ イルをローカル コンピュータ上の一時ディ レ ク ト リに保存します。

2. 一時ディ レク ト リから setup.exe を実行し、 画面の指示に従います。

3. CLASSPATH に以下のファ イルへのパスを追加します。

� install_dir/lib/msbase.jar

� install_dir/lib/msutil.jar

� install_dir/lib/mssqlserver.jar

こ こで、 install_dir はド ライバをインス トールしたフォルダです。 次に例を示します。

set CLASSPATH=install_dir\lib\msbase.jar;install_dir\lib\msutil.jar;install_dir\lib\mssqlserver.jar;%CLASSPATH%

Microsoft SQL Server Driver for JDBC の UNIX システムへのインストール

Microsoft SQL Server 2000 Driver for JDBC を UNIX サーバにインス トールするには、 次の手順に従います。

1. Microsoft MSDN Web サイ トから Microsoft SQL Server 2000 Driver for JDBC (mssqlserver.tar ファ イル ) をダウンロード します。 そのファ イルをローカル コンピュータ上の一時ディ レク ト リに保存します。

2. 一時ディ レク ト リに移動し、 次のコマンドを使用してファ イルの内容を復元します。

tar -xvf mssqlserver.tar

3. 次のコマンドを実行して、 インス トール スク リプ ト を実行します。

install.ksh

5-12 WebLogic JDBC プログラマーズ ガイ ド

Page 95: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

サードパーテ ィの JDBC ド ライバに対する環境設定

4. 画面の指示に従います。 インス トール ディ レク ト リの入力を要求された場合

は、 必ずそのディ レク ト リの絶対パスを入力して ください。

5. CLASSPATH に以下のファ イルへのパスを追加します。

� install_dir/lib/msbase.jar

� install_dir/lib/msutil.jar

� install_dir/lib/mssqlserver.jar

こ こで、 install_dir はド ライバをインス トールしたフォルダです。 次に例を示します。

export CLASSPATH=install_dir/lib/msbase.jar:install_dir/lib/msutil.jar:install_dir/lib/mssqlserver.jar:$CLASSPATH

Microsoft SQL Server Driver for JDBC 使用時の接続プール属性

Microsoft SQL Server Driver for JDBC を使用する接続プールを作成する と きは、次の属性を使用します。

� ド ラ イバ名 : com.microsoft.jdbc.sqlserver.SQLServerDriver

� URL : jdbc:microsoft:sqlserver://server_name:1433

� プロパテ ィ :

user=<myuserid>

databaseName=<dbname>

selectMethod=cursor

� パスワード : mypassword

config.xml のエン ト リは、 次のよ うにな り ます。

<JDBCConnectionPool Name="mssqlDriverTestPool" DriverName="com.microsoft.jdbc.sqlserver.SQLServerDriver" URL="jdbc:microsoft:sqlserver://lcdbnt4:1433" Properties="databasename=lcdbnt4;user=sa; selectMethod=cursor" Password="{3DES}vlsUYhxlJ/I=" InitialCapacity="4" CapacityIncrement="2"

WebLogic JDBC プログラマーズ ガイ ド 5-13

Page 96: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

MaxCapacity="10" Targets="examplesServer" />

注意 : 接続を ト ランザクシ ョ ン モードで使用するには、 接続プロパテ ィの リ ス

ト に selectMethod=cursor を追加する必要があ り ます。 このよ うに設定するこ とで、 アプ リ ケーシ ョ ンで特定の接続から同時に複数の文を開く

こ とが可能とな り ます。 これは、 プールされた接続において必要とな ります。

selectMethod=cursor を設定しない場合は、 同時に開いた文ごとに、 接続の内部的なク ローンが別々の DBMS ユーザと して作成されます。 この場合、 ト ランザクシ ョ ンを同時にコ ミ ッ ト できな く なるため、 デッ ド

ロ ッ クが発生するおそれがあ り ます。

サードパーティ ドライバを使用した接続の取得

Oracle Thin Driver や Sybase jConnect Driver などのサードパーティ Type 4 ド ラ イバを使用してデータベース接続を取得する方法について以下の節で説明します。接続を確立するには、 接続プール、 データ ソース、 および JNDI ルッ クアップを使用するこ と をお勧めします。

サードパーティ ドライバでの接続プールの使い方

まず、 Administration Console を使用して接続プールとデータ ソースを作成し、次に JNDI ルッ クアップを使用して接続を確立します。

接続プールと DataSource の作成

JDBC 接続プールと JDBC DataSource の作成手順については、 2-2 ページの 「接

続プールのコンフ ィグレーシ ョ ン と使い方」 および 2-32 ページの 「DataSource のコンフ ィ グレーシ ョ ン と使い方」 を参照して ください。

5-14 WebLogic JDBC プログラマーズ ガイ ド

Page 97: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

サードパーテ ィ ド ライバを使用した接続の取得

JNDI を使用した接続の取得

JNDI を使用してサードパーティ ド ラ イバにアクセスするには、 まずサーバの URL を指定して JNDI ツ リーから Context オブジェク ト を取得し、 次にそのコンテキス ト オブジェ ク ト と DataSource 名を使用してルッ クアップを実行します。

たとえば、 Administration Console で定義された 「myDataSource」 とい う DataSource にアクセスするには、 以下のよ うにします。

Context ctx = null; Hashtable ht = new Hashtable(); ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); ht.put(Context.PROVIDER_URL, "t3://hostname:port");

try { ctx = new InitialContext(ht); javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("myDataSource"); java.sql.Connection conn = ds.getConnection();

// これで conn オブジェクトを使用して // Statement オブジェクトを作成して// SQL 文を実行し、結果セットを処理できる

Statement stmt = conn.createStatement();stmt.execute("select * from someTable");ResultSet rs = stmt.getResultSet();

// 完了したら、文オブジェクトと // 接続オブジェクトを忘れずにクローズすること

stmt.close(); conn.close(); } catch (NamingException e) {// エラー発生 } finally { try {ctx.close();} catch (Exception e) {// エラー発生 } }

(hostname は WebLogic Server が稼働するマシンのホス ト名、 port は WebLogic Server がリ クエス ト を リ スンするポートの番号です。 )

WebLogic JDBC プログラマーズ ガイ ド 5-15

Page 98: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

この例では、 Hashtable オブジェ ク ト を使って、 JNDI ルッ クアップに必要なパラメータを渡しています。 JNDI ルッ クアップを実行する方法は他にもあ り ます。 詳細については、 『WebLogic JNDI プログラマーズ ガイ ド』 を参照して ください。

ルッ クアップの失敗を捕捉するために JNDI ルッ クアップが try/catch ブロッ クで包まれている点に注意して ください。 また、 コンテキス トが finally ブロ ックの中でクローズされている点にも注意して ください。

接続プールからの物理的な接続の取得

接続プールから接続を取得する と、 WebLogic Server によって物理的な接続ではな く論理的な接続が提供されます。 これは、 接続を接続プールを使用して管理で

きるよ うにするためです。 これによ り、 接続プール機能を有効にし、 アプ リ ケー

シ ョ ンに提供する接続の品質を維持する こ とが可能とな り ます。 しかし、 物理的な接続を使用したい場合もあ り ます。 たとえば、 DBMS ベンダの接続ク ラスを必要とするベンダ固有のメ ソ ッ ドに接続を渡す必要がある場合などです。 WebLogic Server では、 weblogic.jdbc.extensions.WLConnection インタフェースに getVendorConnection() メ ソ ッ ドが含まれており、 論理的な接続か

ら、 その基底となる物理的な接続を取得する こ とができます。 詳細については、WebLogic Javadoc を参照して ください。

注意 : 物理的な接続は、 接続プールから取得した論理的な接続の代り と して使

用しないよ うにして ください。 詳細については、 5-19 ページの 「物理的

な接続を使用する際の制限事項」 を参照して ください。

物理的なデータベース接続は、 ベンダ固有の必要性がある場合にのみ使用しま

す。 ほとんどの JDBC 呼び出しは、 論理的な接続に対してコーディ ングしておく

必要があ り ます。

接続の使用が完了したら、 論理的な接続をク ローズします。 物理的な接続をコード内でク ローズしないよ うにして ください。

物理的なデータベース接続をアプリ ケーシ ョ ン コードにエクスポーズした場合、その接続に対してアクセス権限を持たないユーザが接続にアクセスできてしま うおそれがあ り ます。 そのため WebLogic Server では、 論理的な接続がク ローズされる と、 これを接続プールに戻します。 その基底となる物理的な接続は破棄さ

5-16 WebLogic JDBC プログラマーズ ガイ ド

Page 99: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

サードパーテ ィ ド ライバを使用した接続の取得

れ、 プール内の論理的な接続に対する物理的な接続が新たに開かれます。 この方式は安全である反面、 処理には時間がかかり ます。 接続プールへの要求が発生するごとに、 新しいデータベース接続が作成されるよ うにするこ とは可能です。

物理的な接続を取得するサンプル コード

物理的なデータベース接続を取得するには、 最初に 5-15 ページの 「JNDI を使用した接続の取得」 の説明に従って接続プールから接続を取得してから、 次のいずれかを行います。

� 接続を WLConnection と してキャス ト し、 getVendorConnection() を呼び出す

� 物理的な接続を必要とする メ ソ ッ ド内で、 物理的な接続を暗黙的に渡す (getVendorConnection() メ ソ ッ ドを使用 )

次に例を示します。

// このクラスと、必要となるすべてのベンダ パッケージをイン// ポートするimport weblogic.jdbc.extensions.WLConnection...myJdbcMethod(){

// 接続プールからの接続は、クラス メソッドやインスタンス メソッド // ではなく、常にメソッド レベルの変数とする Connection conn = null;

try { ctx = new InitialContext(ht); // JNDI ツリー上でデータ ソースをルックアップし、 // 接続を要求する javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("myDataSource");

// プールされた接続は常に try ブロックで取得する。取得した // 接続は完全に使用し、必要に応じて finally ブロックで // クローズする conn = ds.getConnection();

// これで conn オブジェクトの WLConnection インタフェース // へのキャストが可能となり、基底となる物理的な接続を取得できる

WebLogic JDBC プログラマーズ ガイ ド 5-17

Page 100: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

java.sql.Connection vendorConn = ((WLConnection)conn).getVendorConnection(); // vendorConn はクローズしない

// vendorConn オブジェクトをベンダ インタフェースにキャストするこ // とも可能。次に例を示す // oracle.jdbc.OracleConnection vendorConn = (OracleConnection) // ((WLConnection)conn).getVendorConnection()

// ベンダ固有のメソッドで物理的な接続が必要に // なる場合、物理的な接続を取得または保持するのではなく、 // 必要に応じて暗黙的に渡すほうがよい // 次に例を示す

//vendor.special.methodNeedingConnection(((WLConnection)conn)).getVendorConnection());

// ベンダ固有の呼び出しの使用が完了したら、 // 接続への参照を即座に破棄する // 参照は保持したりクローズしたりしない // 汎用 JDBC にはベンダ接続を使用しない // 標準の JDBC には、論理的な (プールされた ) 接続を使用する vendorConn = null;

... do all the JDBC needed for the whole method...

// 論理的な (プールされた ) 接続をクローズして // 接続プールに戻し、参照を破棄する conn.close(); conn = null; }

catch (Exception e) { // 例外を処理する } finally { // 念のため、論理的な (プールされた ) 接続がクローズされているか // どうか確認する // finally ブロックの冒頭では、必ず論理的な (プールされた ) 接続 // をクローズする

if (conn != null) try {conn.close();} catch (Exception ignore){} } }

5-18 WebLogic JDBC プログラマーズ ガイ ド

Page 101: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能と Oracle Thin Driver の使用

物理的な接続を使用する際の制限事項

物理的な接続は、 接続プールから取得した論理的な接続の代り と して使用しない

よ うにして ください。 ただし、 STRUCT を作成するためなど、 ど う しても物理的な接続を使用しなければならない場合は、 以下のデメ リ ッ ト と制限事項を考慮に入れて ください。

� 物理的な接続は、 サーバサイ ド コードでしか使用できない。

� 物理的な接続を使用する と、 WebLogic Server が提供するすべての接続管理機能 ( エラー処理、 文のキャ ッシングなど ) が使用できな く なる。

� 物理的な接続は、 それを必要とするベンダ固有のメ ソ ッ ドまたはク ラスにの

み使用する。 汎用 JDBC ( 文やト ランザクシ ョ ン呼び出しの作成など ) には物理的な接続を使用しないでください。

� 接続が再利用されない。 接続をクローズする と、 物理的な接続がク ローズされます。 物理的な接続と して渡された接続は、 接続プールが作成する新しい接続によって置換されます。 物理的な接続を使用する と接続が再利用されないため、 以下の理由でパフォーマンスが低下します。

� 物理的な接続は接続プール内の新しいデータベース接続によって置換さ

れるが、 この処理にはアプ リ ケーシ ョ ン サーバとデータベース サーバ両方の リ ソースが必要となる

� 元の接続の Statement キャッシュ がク ローズされ、 新しい接続用に新しいキャッシュが開かれるため、 Statement キャッシュを使用する こ とによるパフォーマンスの向上が無効になる

Oracle 拡張機能と Oracle Thin Driver の使用

Oracle 拡張機能では、 Oracle データベースのデータを操作するための独自の方法が追加されます。 これによ り、 標準 JDBC インタフェースの機能が拡張されます。 BEA では、 Oracle Thin Driver や Oracle 拡張機能をサポートする他のド ライ

バに対応できるよ うに、 拡張機能をサポート しています。

� OracleStatement

WebLogic JDBC プログラマーズ ガイ ド 5-19

Page 102: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

� OracleResultSet

� OraclePreparedStatement

� OracleCallableStatement

� OracleArray

� OracleStruct

� OracleRef

� OracleBlob

� OracleClob

以降の節では、 Oracle 拡張機能のサンプル コード と、 サポート される メ ソ ッ ド

の表を示します。 詳細については、 Oracle のマニュアルを参照して ください。

Oracle JDBC 拡張機能の使用時の制限

JDBC インタフェースに Oracle 拡張機能を使用する と きは、 次の制限があ り ます。

� Oracle 拡張機能は、 サーバと同じ JVM のみを使用したサーバサイ ド アプリ

ケーシ ョ ンで、 ARRAY、 REF、 および STRUCT の各オブジェ ク トに適用できます。 ク ライアン ト アプリ ケーシ ョ ンの ARRAY、 REF、 STRUCT に Oracle 拡張機能は使用できません。

� アプリ ケーシ ョ ンで ARRAY、 REF、 STRUCT は作成できません。 既存の ARRAY、 REF、 STRUCT オブジェ ク トは、 データベースからのみ検索できます。 アプ リ ケーシ ョ ンでこれらのオブジェ ク ト を作成するには、 標準外の Oracle 記述子オブジェク ト を使用します。 ただし、 WebLogic Server ではサポート されていません。

5-20 WebLogic JDBC プログラマーズ ガイ ド

Page 103: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能と Oracle Thin Driver の使用

Oracle 拡張機能から JDBC インタフェースにアクセスするサンプル コード

以下のコード例は、 WebLogic Oracle 拡張機能から標準 JDBC インタフェースにアクセスする方法を示しています。 最初の例では、 OracleConnection および OracleStatement 拡張機能を使用します。 この例の構文は、 WebLogic Server でサポート される メ ソ ッ ドを使用する場合、 OracleResultSet、

OraclePreparedStatement、 および OracleCallableStatement インタフェースで使用できます。 サポート される メ ソ ッ ドについては、 5-39 ページの 「Oracle 拡張機能インタフェース とサポート される メ ソ ッ ドの表」 を参照して ください。

その他の Oracle 拡張機能メ ソ ッ ドを使用した例については、 以下の節を参照し

て ください。

� 5-23 ページの 「ARRAY によるプログラ ミ ング」

� 5-25 ページの 「STRUCT によるプログラ ミ ング」

� 5-30 ページの 「REF によるプログラ ミ ング」

� 5-36 ページの 「BLOB と CLOB によるプログラ ミ ング」

WebLogic Server を使用して、 サーバの例をインス トールするオプシ ョ ンを選択した場合は、 JDBC 例を参照して ください。 この例は通常、WL_HOME\samples\server\src\examples\jdbc (WL_HOME は WebLogic Platform をインス トールしたフォルダ ) にあ り ます。

Oracle 拡張機能へアクセスするパッケージをインポートする

この例で使用する Oracle インタフェースをインポート します。OracleConnection および OracleStatement インタフェースは、 oracle.jdbc.OracleConnection および oracle.jdbc.OracleStatement に相当し、 WebLogic Server でサポート さ

れる メ ソ ッ ドを使用する場合は、 これらの Oracle インタフェース と同様に使用できます。

import java.sql.*;import java.util.*;import javax.naming.Context;import javax.naming.InitialContext;

WebLogic JDBC プログラマーズ ガイ ド 5-21

Page 104: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

import javax.sql.DataSource;import weblogic.jdbc.vendor.oracle.*;

接続を確立する

JNDI、 DataSource、 および接続プール オブジェク ト を使用して、 データベース接続を確立します。 詳細については、 5-15 ページの 「JNDI を使用した接続の取得」 を参照して ください。

// 接続プールの有効な DataSource オブジェクトを取得する// ここでは、その詳細を getDataSource() が// 処理すると仮定するjavax.sql.DataSource ds = getDataSource(args);

// DataSource から java.sql.Connection オブジェクトを取得する java.sql.Connection conn = ds.getConnection();

デフォルトの行プリフェ ッチ値を取得する

次のコードでは、 Oracle Thin Driver で使用できる Oracle の行プリ フェ ッチ メソ ッ ドの使い方を示します。

// OracleConnection にキャストして、この接続の// デフォルトの行プリフェッチ値を取得する

int default_prefetch = ((OracleConnection)conn).getDefaultRowPrefetch();

System.out.println("Default row prefetch is " + default_prefetch);

java.sql.Statement stmt = conn.createStatement();

// OracleStatement にキャストして、この文の// 行プリフェッチ値を設定する// このプリフェッチ値は、WebLogic Serverとデータベースの // 間の接続に適用されることに注意 ((OracleStatement)stmt).setRowPrefetch(20);

// 通常の SQL クエリを実行して、その結果を処理 ... String query = "select empno,ename from emp"; java.sql.ResultSet rs = stmt.executeQuery(query);

while(rs.next()) { java.math.BigDecimal empno = rs.getBigDecimal(1); String ename = rs.getString(2); System.out.println(empno + "\t" + ename); }

5-22 WebLogic JDBC プログラマーズ ガイ ド

Page 105: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能と Oracle Thin Driver の使用

rs.close(); stmt.close();

conn.close(); conn = null; }

ARRAY によるプログラ ミング

WebLogic Server のサーバサイ ド アプリ ケーシ ョ ンでは、 結果セッ ト 、 または Java 配列と して callable statement を使用するこ とによ り、Oracle Collection (SQL ARRAY) を実体化できます。

WebLogic Server アプリ ケーシ ョ ンで ARRAY を使用するには、 次の手順に従います。

1. 必要なク ラスをインポート します (5-21 ページの 「Oracle 拡張機能へアクセスするパッケージをインポートする」 を参照 )。

2. 接続を取得 (5-22 ページの 「接続を確立する」 を参照 ) して、 接続のための文を作成します。

3. 結果セッ ト 、 または callable statement を使用して ARRAY を取得します。

4. java.sql.Array または weblogic.jdbc.vendor.oracle.OracleArray のいずれかと して、 ARRAY を使用します。

5. 標準 Java メ ソ ッ ド (java.sql.Array と して使用 )、 または Oracle 拡張機能メ ソ ッ ド (weblogic.jdbc.vendor.oracle.OracleArray と してキャス ト ) を使用して、 データを操作します。

以下の節では、 これらのアクシ ョ ンの詳細について説明します。

注意 : ARRAY はサーバサイ ド アプリ ケーシ ョ ンでのみ使用できます。 ク ライ

アン ト アプリ ケーシ ョ ンでは ARRAY は使用できません。

WebLogic JDBC プログラマーズ ガイ ド 5-23

Page 106: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

ARRAY を取得する

callable statement、 または結果セッ トに getArray() メ ソ ッ ドを使用して、 Java 配列を取得できます。 この配列は、 java.sql.array と して使用する こ とによ り標準 java.sql.array メ ソ ッ ドを利用する こ と も、 また weblogic.jdbc.vendor.oracle.OracleArray と してキャス トするこ とによ り、配列の Oracle 拡張機能メ ソ ッ ド と して利用するこ と もできます。

以下の例では、 ARRAY を含む結果セッ ト から java.sql.array を取得する方法を示します。 この例では、 クエ リによ り、 オブジェ ク ト カラム (学生の成績を示す ARRAY) を含む結果セッ ト が返されます。

try {

conn = getConnection(url); stmt = conn.createStatement(); String sql = "select * from students";// 結果セットの取得 rs = stmt.executeQuery(sql);

while(rs.next()) { BigDecimal id = rs.getBigDecimal("student_id"); String name = rs.getString("name"); log("ArraysDAO.getStudents() -- Id = "+id.toString()+", Student = "+name);// 結果セットからの配列の取得 Array scoreArray = rs.getArray("test_scores"); String[] scores = (String[])scoreArray.getArray(); for (int i = 0; i < scores.length; i++) { log(" Test"+(i+1)+" = "+scores[i]); } }

データベースで ARRAY を更新する

データベースにおける ARRAY を更新するには、 次の手順に従います。

1. 更新する配列がデータベースにない場合、 PL/SQL を使用してデータベースに配列を作成します。

2. 結果セッ ト、 または callable statement を使用して ARRAY を取得します。

3. Java アプリ ケーシ ョ ン内の配列を java.sql.Array または weblogic.jdbc.vendor.oracle.OracleArray と して扱います。

5-24 WebLogic JDBC プログラマーズ ガイ ド

Page 107: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能と Oracle Thin Driver の使用

4. prepared statement または callable statement に setArray() メ ソ ッ ドを使用して、 データベース内の配列を更新します。 次に例を示します。 次に例を示します。

String sqlUpdate = "UPDATE SCOTT."+ tableName + " SET col1 = ?"; conn = ds.getConnection(); pstmt = conn.prepareStatement(sqlUpdate); pstmt.setArray(1, array); pstmt.executeUpdate();

Oracle Array 拡張機能メソッ ドを使用する

ARRAY に Oracle 拡張機能メ ソ ッ ドを使用するにはまず、

weblogic.jdbc.vendor.oracle.OracleArray と して配列をキャス トする必要があ り ます。 この後、 ARRAY の Oracle 拡張機能メ ソ ッ ドを呼び出すこ とができ

ます。 次に例を示します。

oracle.sql.Datum[] oracleArray = null;oracleArray = ((weblogic.jdbc.vendor.oracle.OracleArray)scoreArray).getOracleArray();String sqltype = nullsqltype = oracleArray.getSQLTypeName()

STRUCT によるプログラ ミング

WebLogic Server アプリ ケーシ ョ ンでは、 Oracle データベースからオブジェク トにアクセスした り、 オブジェク ト を操作したりできます。 Oracle データベースからオブジェ ク ト を検索する と、 カスタム Java オブジェ ク ト、 または STRUCT (java.sql.struct あるいは weblogic.jdbc.vendor.oracle.OracleStruct) のいずれかと して、 オブジェク ト をキャス ト できます。 STRUCT は、 アプ リ

ケーシ ョ ン中のカスタム ク ラスを置き換える構造化データを表す型制限の緩いデータ型です。 JDBC API における STRUCT インタフェースには、 STRUCT 中の属性値を操作するためのさまざまな メ ソ ッ ドが組み込まれています。 Oracle では、 い くつかの追加メ ソ ッ ドを使用して、 STRUCT インタフェースを拡張しています。 WebLogic Server では、 すべての標準メ ソ ッ ド と大部分の Oracle 拡張機能が実装されています。

注意 : STRUCT を使用する場合、 次の制限があ り ます。

WebLogic JDBC プログラマーズ ガイ ド 5-25

Page 108: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

� STRUCT は、 Oracle 専用と してサポート されるデータ型です。 アプ

リ ケーシ ョ ン中で STRUCT を使用するには、 Oracle Thin Driver を使用して ( 通常は接続プールを介して ) データベース とやり取り し ま

す。 WebLogic jDriver for Oracle では、 STRUCT データ型はサポート

されません。

� STRUCT はサーバサイ ド アプリ ケーシ ョ ンでのみ使用できます。 ク

ライアン ト アプ リ ケーシ ョ ンでは STRUCT は使用できません。

WebLogic Server アプリ ケーシ ョ ンで STRUCT を使用するには、次の手順に従います。

1. 必要なク ラスをインポート します (5-21 ページの 「Oracle 拡張機能へアクセスするパッケージをインポートする」 を参照 ) 。

2. 接続を取得します (5-22 ページの 「接続を確立する」 を参照 )。

3. getObject を使用して STRUCT を取得します。

4. STRUCT を java.sql.Struct または weblogic.jdbc.vendor.oracle.OracleStruct の STRUCT と してキャスト します。

5. 標準メ ソ ッ ド、 または Oracle 拡張機能メ ソ ッ ドを使用して、 データを操作し

ます。

以下の節では、 手順 3 ~ 5 について詳し く説明します。

STRUCT を取得する

データベース オブジェ ク ト を STRUCT と して取得するには、 まずクエ リ を使用

して結果セッ ト を作成し、 次に getObject メ ソ ッ ドを使用して、 結果セッ トから STRUCT を取得します。 次に STRUCT を java.sql.Struct と してキャス トするこ とによ り、標準 Java メ ソ ッ ドを使用できるよ うにな り ます。 次に例を示します。

conn = ds.getConnection();

stmt = conn.createStatement();

rs = stmt.executeQuery("select * from people");

struct = (java.sql.Struct)(rs.getObject(2));

Object[] attrs = ((java.sql.Struct)struct).getAttributes();

5-26 WebLogic JDBC プログラマーズ ガイ ド

Page 109: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能と Oracle Thin Driver の使用

WebLogic Server では、 STRUCT に対応するすべての JDBC API メ ソ ッ ドがサポート されます。

� getAttributes()

� getAttributes(java.util.Dictionary map)

� getSQLTypeName()

Oracle では、 標準メ ソ ッ ド以外に、 Oracle 拡張機能メ ソ ッ ド もサポート していま

す。 したがって、 STRUCT を weblogic.jdbc.vendor.oracle.OracleStruct と してキャス トする と、 標準メ ソ ッ ド と拡張機能メ ソ ッ ドの両方が使用できるようにな り ます。

OracleStruct 拡張機能メソッ ドを使用する

STRUCT に Oracle 拡張機能メ ソ ッ ドを使用する場合、 java.sql.Struct ( またはオリジナルの getObject 結果 ) を weblogic.jdbc.vendor.oracle.OracleStruct と してキャス トする必要があり ます。 次に例を示します。

java.sql.Struct struct =(weblogic.jdbc.vendor.oracle.OracleStruct)(rs.getObject(2));

WebLogic Server では次の Oracle 拡張機能がサポート されます。

� getDescriptor()

� getOracleAttributes()

� getAutoBuffering()

� setAutoBuffering(boolean)

STRUCT 属性を取得する

STRUCT で個々の属性に対する値を取得するには、 getAttributes() および getAttributes(java.util.Dictionary map) の標準 JDBC API メ ソ ッ ド、 または getOracleAttributes() の Oracle 拡張機能メ ソ ッ ドを使用できます。

標準メ ソ ッ ドを使用するには、 まず結果セッ ト を作成し、 この結果セッ トから STRUCT を取得し、 次に getAttributes() メ ソ ッ ドを使用します。 このメ ソ ッドによ り、 順序の付いた属性の配列が返されます。 アプ リ ケーシ ョ ンのオブジェ

WebLogic JDBC プログラマーズ ガイ ド 5-27

Page 110: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

ク ト (Java 言語タイプなど ) に STRUCT ( データベースのオブジェ ク ト ) の属性を割 り当てる こ とができます。 この後、 属性を個別に操作できるよ うにな り ます。 次に例を示します。

conn = ds.getConnection();

stmt = conn.createStatement();

rs = stmt.executeQuery("select * from people");

// 第 3 カラムはオブジェクト データ型を使用// getObject() により、値の配列にオブジェクトを割り当てる

struct = (java.sql.Struct)(rs.getObject(2));

Object[] attrs = ((java.sql.Struct)struct).getAttributes();

String address = attrs[1];

上の例で、 people テーブルの第 3 カラムではオブジェ ク ト データ型を使用しています。 この例は、 値の配列を含む Java オブジェ ク ト getObject メ ソ ッ ドの結果を割 り当て、 必要に応じて配列中の個別の値を使用する方法を示します。

また、 getAttributes(java.util.Dictionary map) メ ソ ッ ドを使用しても、STRUCT から属性を取得できます。 このメ ソ ッ ドを使用する場合は、 Java 言語データ型に Oracle オブジェ ク ト のデータ型をマッピングします。 次に例を示します。

java.util.Hashtable map = new java.util.Hashtable();

map.put("NUMBER", Class.forName("java.lang.Integer"));

map.put("VARCHAR", Class.forName("java.lang.String"));

Object[] attrs = ((java.sql.Struct)struct).getAttributes(map);

String address = attrs[1];

また、 Oracle 拡張機能メ ソ ッ ドの getOracleAttributes() を使用して、STRUCT の属性を取得するこ と もできます。 まず、 STRUCT を weblogic.jdbc.vendor.oracle.OracleStruct と してキャス ト します。 このメ ソ ッ ドによ り、 oracle.sql.Datum オブジェク ト のデータ配列が返されます。 次に例を示します。

oracle.sql.Datum[] attrs = ((weblogic.jdbc.vendor.oracle.OracleStruct)struct).getOracleAttributes();

oracle.sql.STRUCT address = (oracle.sql.STRUCT) attrs[1];

Object address_attrs[] = address.getAttributes();

5-28 WebLogic JDBC プログラマーズ ガイ ド

Page 111: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能と Oracle Thin Driver の使用

上の例では、 STRUCT がネス ト構造になっています。 つま り、 こ こで返されるデータ配列には、 別の STRUCT が入れ子の構造で組み込まれています。

STRUCT によってデータベース オブジェク トを更新する

STRUCT を使用してデータベースのオブジェ ク ト を更新するには、 prepared statement にある setObject メ ソ ッ ドを使用します。 次に例を示します。

conn = ds.getConnection();

stmt = conn.createStatement();

ps = conn.prepareStatement ("UPDATE SCHEMA.people SET EMPLNAME = ?, EMPID = ? where EMPID = 101");

ps.setString (1, "Smith");

ps.setObject (2, struct);

ps.executeUpdate();

WebLogic Server では、 setObject メ ソ ッ ドの 3 つのバージ ョ ンがすべてサポー

ト されます。

データベース オブジェク トを作成する

STRUCT は通常、 Java アプリ ケーシ ョ ン中で、 データベース オブジェ ク ト にマッピングするカスタム Java ク ラスに代わるデータベース オブジェ ク ト を実体化する場合に使用します。 WebLogic Server アプリ ケーシ ョ ンでは、 データベー

スに転送する STRUCT は作成できません。 ただし、 アプ リ ケーシ ョ ン上から検

索や操作が実行できるよ う なデータベース オブジェ ク ト を作成する文は使用できます。 次に例を示します。

conn = ds.getConnection();

stmt = conn.createStatement();

cmd = "create type ob as object (ob1 int, ob2 int)"

stmt.execute(cmd);

cmd = "create table t1 of type ob";

stmt.execute(cmd);

cmd = "insert into t1 values (5, 5)"

stmt.execute(cmd);

WebLogic JDBC プログラマーズ ガイ ド 5-29

Page 112: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

注意 : アプリ ケーシ ョ ンで STRUCT は作成できません。 データベースから既存のオブジェ ク ト を検索して、 これを STRUCT と してキャス トする こ とはできます。 アプ リ ケーシ ョ ンで STRUCT オブジェ ク ト を作成するには、標準外の Oracle STRUCT 記述子オブジェ ク ト を使用します。 ただし、WebLogic Server ではサポート されません。

STRUCT 属性を自動バッファ リングする

STRUCT を使用した WebLogic Server アプリ ケーシ ョ ンのパフォーマンスを改善

するために、 自動バッファ リ ング機能と setAutoBuffering(boolean) メ ソ ッドを切 り換えるこ とができます。 自動バッファ リ ングを true に設定する と、weblogic.jdbc.vendor.oracle.OracleStruct によ り、 STRUCT オブジェ クト にあるすべての属性のローカル コピーが変換済みのフォーム ( すなわち SQL から Java 言語オブジェ ク ト に実体化した形式 ) で保持されます。 アプ リ ケー

シ ョ ンが、 STRUCT に再びアクセスした時点で、 データを再度変換する必要はあ り ません。

注意 : 変換した属性をバッファ リ ングする と、 アプ リ ケーシ ョ ンで使用する メ

モ リ量が過度に増大する こ とがあ り ます。 自動バッファ リ ングの有効 /無効を切 り換える と きは、 可能メモ リ使用量についても考慮して ください。

以下の例は、 自動バッファ リ ングをアクテ ィブにする方法を示します。

((weblogic.jdbc.vendor.oracle.OracleStruct)struct).setAutoBuffering(true);

また、 getAutoBuffering() メ ソ ッ ドを使用して、 自動バッファ リ ング モード

を設定するこ と もできます。

REF によるプログラ ミング

REF は、 行オブジェ ク トに対する論理ポインタです。 REF を検索する と、 実際には別のテーブルにある値を指すポインタが返されます。 REF のターゲッ トは、オブジェ ク ト テーブルの行でなければなり ません。 REF を使用して、 これが参照するオブジェク ト を検証した り、 更新した りできます。 また REF を変更するこ とによ り、 同じオブジェク ト タイプの別のオブジェ ク ト を指示した り、 null 値を割 り当てたりするこ とができます。

5-30 WebLogic JDBC プログラマーズ ガイ ド

Page 113: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能と Oracle Thin Driver の使用

注意 : REF を使用する場合、 次の制限があ り ます。

� REF は、 Oracle 専用と してサポート されるデータ型です。 アプ リ

ケーシ ョ ンで REF を使用するには、 Oracle Thin Driver を使用して (通常は接続プールを介して ) データベース とやり取 り します。

WebLogic jDriver for Oracle では、 REF データ型はサポート されませ

ん。

� REF はサーバサイ ド アプ リ ケーシ ョ ンでのみ使用できます。

WebLogic Server アプリ ケーシ ョ ンで REF を使用するには、 次の手順に従います。

1. 必要なク ラスをインポート します (5-21 ページの 「Oracle 拡張機能へアクセスするパッケージをインポートする」 を参照 ) 。

2. データベース接続を取得します (5-22 ページの 「接続を確立する」 を参照 )。

3. 結果セッ ト 、 または callable statement を使用して REF を取得します。

4. 結果を STRUCT と して、 または Java オブジェク ト と してキャス ト します。これによ り、 STRUCT メ ソ ッ ド、 または Java オブジェク ト のメ ソ ッ ドを使用して、 データを操作できるよ うにな り ます。

また、 データベースで REF を作成した り、 更新した りできます。

手順 3 と 4 について以下の節で詳し く説明します。

REF を取得する

アプ リ ケーシ ョ ンで REF を取得するには、 まずクエ リ を使用して結果セッ ト を

作成し、 次に getRef メ ソ ッ ドを使用して、 結果セッ トから REF を取得します。次に REF を java.sql.Ref と してキャス トするこ とによ り、 ビルト イン Java メソ ッ ドを使用できます。 次に例を示します。

conn = ds.getConnection();

stmt = conn.createStatement();

rs = stmt.executeQuery("SELECT ref (s) FROM t1 s where s.ob1=5");

rs.next();

// java.sql.Ref としてキャストし、REF を取得

WebLogic JDBC プログラマーズ ガイ ド 5-31

Page 114: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

ref = (java.sql.Ref) rs.getRef(1);

なお、 上の例の WHERE 句では、 ド ッ ト表記法を使用して、 参照するオブジェ

ク トの属性を指定しています。

REF を java.sql.Ref と してキャス ト した後は、 getBaseTypeName の Java API メ ソ ッ ドが使用できます ( これは REF に対応した唯一の JDBC 2.0 標準メ ソ ッ ド

)。

REF を取得する と、 実際には別のオブジェ ク ト テーブルにある値を指すポインタが返されます。 REF 値の取得や操作を行うには、 Oracle 拡張機能を使用します。 この拡張機能は、 sql.java.Ref を weblogic.jdbc.vendor.oracle.OracleRef と してキャス トする場合に限って使用できます。

OracleRef 拡張機能メソッ ドを使用する

REF に Oracle 拡張機能メ ソ ッ ドを使用するには、REF を Oracle REF と してキャス ト します。 たとえば、 次のとおりです。

oracle.sql.StructDescriptor desc = ((weblogic.jdbc.vendor.oracle.OracleRef)ref).getDescriptor();

WebLogic Server では次の Oracle 拡張機能がサポート されます。

� getDescriptor()

� getSTRUCT()

� getValue()

� getValue(dictionary)

� setValue(object)

値を取得する

Oracle では、 2 つのバージ ョ ンの getValue() メ ソ ッ ドが提供されています。 パラ メータの指定が不要なメ ソ ッ ド と、 戻 り値の型をマッピングするハッシュ テーブルを要求する メ ソ ッ ドの 2 種類です。 いずれかの getValue() メ ソ ッ ドを使用して、 REF の属性値を取得する と、 STRUCT または Java オブジェク ト のいずれかの形式で結果が返されます。

5-32 WebLogic JDBC プログラマーズ ガイ ド

Page 115: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能と Oracle Thin Driver の使用

パラ メータなしの getValue() メ ソ ッ ドを使用する方法を以下の例で示します。この例では、 REF を oracle.sql.STRUCT と してキャス ト します。getAttributes() メ ソ ッ ドの説明で示したとおり、 STRUCT メ ソ ッ ドを使用して、 値を操作できます。

oracle.sql.STRUCT student1 =(oracle.sql.STRUCT)((weblogic.jdbc.vendor.oracle.OracleRef)ref).getValue ();

Object attributes[] = student1.getAttributes();

また、 getValue(dictionary) を使用して、 REF に対する値を取得できます。また REF の属性ごとにデータ型を Java 言語データ型にマッピングするためのハッシュ テーブルが必要にな り ます。 次に例を示します。

java.util.Hashtable map = new java.util.Hashtable();

map.put("VARCHAR", Class.forName("java.lang.String"));

map.put("NUMBER", Class.forName("java.lang.Integer"));

oracle.sql.STRUCT result = (oracle.sql.STRUCT) ((weblogic.jdbc.vendor.oracle.OracleRef)ref).getValue (map);

REF 値を更新する

REF を更新する場合、 次のいずれかの操作を実行します。

� setValue(object) メ ソ ッ ドを使用して、 基盤となるテーブルの値を変更す

� prepared statement または callable statement を使用して REF が指示する位置を変更する

� REF の値を null に設定する

setValue(object) を使用して REF 値を更新する場合は、 まず REF の新しい値を使用してオブジェ ク ト を作成した後、 setValue メ ソ ッ ドのパラ メータ と してオブジェ ク ト を渡します。 次に例を示します。

STUDENT s1 = new STUDENT();

s1.setName("Terry Green");

s1.setAge(20);

((weblogic.jdbc.vendor.oracle.OracleRef)ref).setValue(s1);

WebLogic JDBC プログラマーズ ガイ ド 5-33

Page 116: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

REF の値を setValue(object) メ ソ ッ ドで更新する と、 実際には REF が指示するテーブルの値が更新されます。

prepared statement を使用して REF が指示する位置を更新するには、 次の 3 つの基本手順に従います。

1. 新しい位置を指示する REF を取得します。 この REF を使用して、 別の REF の値を置き換えます。

2. SQL コマンドの文字列を作成して、 既存の REF の位置を、 別の REF の値で置き換えます。

3. prepared statement を作成、 および実行します。

次に例を示します。

try {

conn = ds.getConnection();

stmt = conn.createStatement();

// REF の取得

rs = stmt.executeQuery("SELECT ref (s) FROM t1 s where s.ob1=5");

rs.next();

ref = (java.sql.Ref) rs.getRef(1); // REF を java.sql.Ref としてキャストする

}

// prepared statement の作成と実行

String sqlUpdate = "update t3 s2 set col = ? where s2.col.ob1=20";

pstmt = conn.prepareStatement(sqlUpdate);

pstmt.setRef(1, ref);

pstmt.executeUpdate();

callable statement を使用して、 REF が指示する位置を更新する場合は、 まずス トアド プロシージャを作成し、 いずれかの IN パラ メータを設定して、 OUT パラメータを登録した後、 文を実行します。 ス ト アド プロシージャでは、 実際の位置を指示する REF 値が更新されます。 次に例を示します。

conn = ds.getConnection();stmt = conn.createStatement();rs = stmt.executeQuery("SELECT ref (s) FROM t1 s where s.ob1=5");

5-34 WebLogic JDBC プログラマーズ ガイ ド

Page 117: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能と Oracle Thin Driver の使用

rs.next();

ref1 = (java.sql.Ref) rs.getRef(1);

// ストアド プロシージャの作成

sql = "{call SP1 (?, ?)}";

cstmt = conn.prepareCall(sql);

// IN パラメータと OUT パラメータの登録

cstmt.setRef(1, ref1);

cstmt.registerOutParameter(2, getRefType(), "USER.OB");

// 実行

cstmt.execute();

データベースで REF を作成する

JDBC アプ リ ケーシ ョ ンで REF オブジェ ク トは作成できません。 単に、 データベースから既存の REF オブジェ ク ト が検索されるだけです。 ただし、 文または prepared statement を使用して、 データベースに REF を作成できます。 次に例を示します。

conn = ds.getConnection();stmt = conn.createStatement();cmd = "create type ob as object (ob1 int, ob2 int)"stmt.execute(cmd);cmd = "create table t1 of type ob";stmt.execute(cmd);cmd = "insert into t1 values (5, 5)"stmt.execute(cmd);cmd = "create table t2 (col ref ob)";stmt.execute(cmd);cmd = "insert into t2 select ref(p) from t1 where p.ob1=5";stmt.execute(cmd);

上の例では、 オブジェ ク ト タイプ (ob)、 このオブジェク ト タイプのテーブル (t1)、 ob オブジェク ト のインスタンスを指示する REF カラムを含むテーブル (t2) を作成して、REF を REF カラムに挿入します。REF は、t1 の行を指します ( 最初のカラムの値は 5)。

WebLogic JDBC プログラマーズ ガイ ド 5-35

Page 118: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

BLOB と CLOB によるプログラ ミング

この節では、 OracleBlob インタフェースへのアクセス方法を示すサンプル コードについて説明します。 WebLogic Server でサポート される メ ソ ッ ドを使用して

いる場合、 この例で示す構文は、 OracleBlob インタフェースで使用できます。 5-39 ページの 「Oracle 拡張機能インタフェース とサポート される メ ソ ッ ドの表」

を参照して ください。

注意 : BLOB および CLOB ( 「LOB」 と呼ばれる ) を使用する場合、 ト ランザク

シ ョ ンの境界を考慮する必要があ り ます。 たとえば、 すべての読み取 り /書き込みを ト ランザクシ ョ ン内の特定の LOB に転送します。 詳細については、 Oracle Web サイ ト にある Oracle のマニュアルの 「LOB Locators and Transaction Boundaries」 を参照して ください。

DBMS から BLOB ロケータを選択するクエリを実行する

BLOB ロケータまたはハンドルは、 Oracle Thin Driver Blob への参照です。

String selectBlob = "select blobCol from myTable where blobKey = 666"

WebLogic Server java.sql オブジェク トを宣言する

次のコードでは、 Connection が既に確立されている こ と を前提と しています。

ResultSet rs = null;Statement myStatement = null;java.sql.Blob myRegularBlob = null;java.io.OutputStream os = null;

SQL 例外ブロックを開始する

この try/catch ブロ ッ クでは、 BLOB ロケータを取得して、 Oracle Blob 拡張機能にアクセスします。

try {

// BLOB ロケータを取得 ..

5-36 WebLogic JDBC プログラマーズ ガイ ド

Page 119: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 仮想プライベー ト データベースによるプログラ ミ ング

myStatement = myConnect.createStatement(); rs = myStatement.executeQuery(selectBlob); while (rs.next()) { myRegularBlob = rs.getBlob("blobCol");

}

// 記述用の基底の Oracle 拡張機能にアクセスする // OracleThinBlob インタフェースをキャストして、 // Oracle メソッドにアクセスする

os = ((OracleThinBlob)myRegularBlob).getBinaryOutputStream(); ..... ........

} catch (SQLException sqe) { System.out.println("ERROR(general SQE): " + sqe.getMessage()); }

Oracle.ThinBlob インタフェースをキャス ト したら、 BEA がサポートする メ

ソ ッ ドにアクセスできます。

PreparedStatement を使用した CLOB 値の更新

PreparedStatement を使用して CLOB を更新し、 新しい値が以前の値よ り短い場合、 CLOB は更新中に明示的に置換されなかった文字を保持します。 たとえば、CLOB の現在の値が abcdefghij の場合に、 PreparedStatement を使用して zxyw で CLOB を更新する と、 CLOB の値が zxywefghij に更新されます。PreparedStatement で更新された値を修正するには、 dbms_lob.trim プロシージャを使用して、 更新後に残った余分な文字を削除します。 dbms_lob.trim プロシージャの詳細については、 Oracle のマニュアルを参照して ください。

Oracle 仮想プライベート データベースによるプログラ ミング

WebLogic Server 7.0 SP3 では、 Oracle 仮想プライベート データベース (Virtual Private Database : VPD) がサポート されています。 VPD を使用するこ とで、 アプリ ケーシ ョ ン定義のファ イングレイン アクセス コン ト ロールをサーバで実施し、Oracle 9i データベース サーバ内のアプリ ケーシ ョ ン コンテキス ト のセキュ リテ ィ を確保できます。

WebLogic JDBC プログラマーズ ガイ ド 5-37

Page 120: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

WebLogic Server アプリ ケーシ ョ ンで VPD を使用するには、以下の手順に従います。

1. Oracle Thin ド ラ イバまたは Oracle OCI ド ラ イバを使用する WebLogic Server コンフ ィグレーシ ョ ン内に JDBC 接続プールを作成します。 詳細については、2-1 ページの 「WebLogic JDBC のコンフ ィグレーシ ョ ン と管理」、 または 『管

理者ガイ ド』 の 「Administration Console を使用した JDBC 接続のコンフ ィグレーシ ョ ン」 を参照して ください。

注意 : XA 対応の JDBC ド ラ イバを使用している場合は、KeepXAConnTillTxComplete=true を設定する必要があ り ます。 詳細については、 『管理者ガイ ド』 の 「追加の XA 接続プール プロパティ」 を参照して ください。

WebLogic jDriver for Oracle は ClientIdentifier を伝播できないため、 VPD で使用する ド ライバと しては適していません。

2. 接続プールを指す WebLogic Server コンフ ィグレーシ ョ ン内にデータ ソースを作成します。

3. アプリ ケーシ ョ ンで次のコードを実行します。

import weblogic.jdbc.vendor.oracle.OracleConnection;

// WLS JDBC 接続プールから接続を取得するConnection conn = ds.getConnection();

// Oracle 拡張機能にキャストして CLIENT_IDENTIFIER を設定する// (データベース サーバ サイドの USERENV ネーミング コンテキスト// からアクセス可能になる )((OracleConnection)conn).setClientIdentifier(clientId);

/* アプリケーション固有の処理を実行する */

// WLS JDBC 接続プールに戻る前に接続をクリーンアップする((OracleConnection)conn).clearClientIdentifier(clientId);

// 接続をクローズする conn.close();

5-38 WebLogic JDBC プログラマーズ ガイ ド

Page 121: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能インタ フ ェースとサポー ト される メ ソ ッ ドの表

Oracle 拡張機能インタフェースとサポートされるメソッ ドの表

Oracle インタフェースを以下の表に示します。 また、 標準 JDBC (java.sql.*) インタフェースを拡張するために Oracle Thin Driver ( またはこれらのメ ソ ッ ドをサポートするその他のド ライバ ) で使用する メ ソ ッ ドでサポート されているもの

も示します。

注意 : 通常、 Oracle Thin Driver の新しいバージ ョ ンが リ リースされる と きに

は、 一部の拡張機能メ ソ ッ ドがド ラ イバから削除されます。 WebLogic Server では、 ド ライバに含まれな くなったメ ソ ッ ドをサポートできませ

ん。Oracle Thin Driver 9.2.0 (および WebLogic Server 7.0 サービス パッ ク 2) では、 以下のメ ソ ッ ドが削除されています。

� OracleStatement.getAutoRollback()

� OracleStatement.getWaitOption()

� OracleConnection.isCompatibleTo816()

WebLogic JDBC プログラマーズ ガイ ド 5-39

Page 122: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

表 5-3 OracleConnection インタフェース

拡張 メソッ ド シグネチャ

OracleConnection

拡張 java.sql.Connection

boolean getAutoClose() throws java.sql.SQLException;

void setAutoClose(boolean on) throwsjava.sql.SQLException;

String getDatabaseProductVersion()throws java.sql.SQLException;

String getProtocolType() throwsjava.sql.SQLException;

String getURL() throws java.sql.SQLException;

String getUserName()throws java.sql.SQLException;

boolean getBigEndian() throws java.sql.SQLException;

boolean getDefaultAutoRefetch() throwsjava.sql.SQLException;

boolean getIncludeSynonyms()throws java.sql.SQLException;

boolean getRemarksReporting()throws java.sql.SQLException;

boolean getReportRemarks() throws java.sql.SQLException;

boolean getRestrictGetTables()throws java.sql.SQLException;

boolean getUsingXAFlag()throws java.sql.SQLException;

boolean getXAErrorFlag() throws java.sql.SQLException;

5-40 WebLogic JDBC プログラマーズ ガイ ド

Page 123: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能インタ フ ェースとサポー ト される メ ソ ッ ドの表

OracleConnection

拡張 java.sql.Connection

(続き )

byte[] getFDO(boolean b) throws java.sql.SQLException;

int getDefaultExecuteBatch() throws java.sql.SQLException;

int getDefaultRowPrefetch() throws java.sql.SQLException;

int getStmtCacheSize() throws java.sql.SQLException;

java.util.Properties getDBAccessProperties()throws java.sql.SQLException;

short getDbCsId() throws java.sql.SQLException;

short getJdbcCsId() throws java.sql.SQLException;

short getStructAttrCsId() throws java.sql.SQLException;

short getVersionNumber() throws java.sql.SQLException;

void archive(int i, int j, String s) throws java.sql.SQLException;

void close_statements() throws java.sql.SQLException;

void initUserName() throws java.sql.SQLException;

void logicalClose() throws java.sql.SQLException;

void needLine() throws java.sql.SQLException;

void printState() throws java.sql.SQLException;

void registerSQLType(String s, String t) throws java.sql.SQLException;

void releaseLine() throws java.sql.SQLException;

表 5-3 OracleConnection インタフェース

拡張 メソッ ド シグネチャ

WebLogic JDBC プログラマーズ ガイ ド 5-41

Page 124: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

OracleConnection

拡張 java.sql.Connection

(続き )

void removeAllDescriptor() throws java.sql.SQLException;

void removeDescriptor(String s) throws java.sql.SQLException;

void setDefaultAutoRefetch(boolean b)throws java.sql.SQLException;

void setDefaultExecuteBatch(int i) throws java.sql.SQLException;

void setDefaultRowPrefetch(int i) throws java.sql.SQLException;

void setFDO(byte[] b)throws java.sql.SQLException;

void setIncludeSynonyms(boolean b) throws java.sql.SQLException;

void setPhysicalStatus(boolean b) throws java.sql.SQLException;

void setRemarksReporting(boolean b) throws java.sql.SQLException;

void setRestrictGetTables(boolean b) throws java.sql.SQLException;

void setStmtCacheSize(int i) throws java.sql.SQLException;

void setStmtCacheSize(int i, boolean b) throws java.sql.SQLException;

void setUsingXAFlag(boolean b)throws java.sql.SQLException;

void setXAErrorFlag(boolean b) throws java.sql.SQLException;

void shutdown(int i) throws java.sql.SQLException;

void startup(String s, int i) throws java.sql.SQLException;

表 5-3 OracleConnection インタフェース

拡張 メソッ ド シグネチャ

5-42 WebLogic JDBC プログラマーズ ガイ ド

Page 125: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能インタ フ ェースとサポー ト される メ ソ ッ ドの表

表 5-4 OracleStatement インタフェース

拡張 メソッ ド シグネチャ

OracleStatement

拡張 java.sql.statement

String getOriginalSql() throws java.sql.SQLException;

String getRevisedSql() throws java.sql.SQLException;(Oracle 8.1.7 で非推奨、Oracle 9i で破棄 )

boolean getAutoRefetch() throws java.sql.SQLException;

boolean is_value_null(boolean b, int i) throws java.sql.SQLException;

byte getSqlKind() throws java.sql.SQLException;

int creationState()throws java.sql.SQLException;

int getRowPrefetch() throws java.sql.SQLException;

int sendBatch() throws java.sql.SQLException;

void clearDefines() throws java.sql.SQLException;

void defineColumnType(int i, int j) throws java.sql.SQLException;

void defineColumnType(int i, int j, String s)throws java.sql.SQLException;

WebLogic JDBC プログラマーズ ガイ ド 5-43

Page 126: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

OracleStatement

拡張 java.sql.statement

(続き )

void defineColumnType(int i, int j, int k) throws java.sql.SQLException;

void describe() throws java.sql.SQLException;

void notify_close_rset() throws java.sql.SQLException;

void setAutoRefetch(boolean b) throws java.sql.SQLException;

void setAutoRollback(int i) throws java.sql.SQLException;(非推奨 )

void setRowPrefetch(int i) throws java.sql.SQLException;

void setWaitOption(int i) throws java.sql.SQLException;(非推奨 )

表 5-4 OracleStatement インタフェース

拡張 メソッ ド シグネチャ

5-44 WebLogic JDBC プログラマーズ ガイ ド

Page 127: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能インタ フ ェースとサポー ト される メ ソ ッ ドの表

表 5-5 OracleResultSet インタフェース

拡張 メソッ ド シグネチャ

OracleResultSet

拡張 java.sql.ResultSet

boolean getAutoRefetch() throws java.sql.SQLException;

int getFirstUserColumnIndex() throws java.sql.SQLException;

void closeStatementOnClose() throws java.sql.SQLException;

void setAutoRefetch(boolean b) throws java.sql.SQLException;

java.sql.ResultSet getCursor(int n) throws java.sql.SQLException;

java.sql.ResultSet getCURSOR(String s) throws java.sql.SQLException;

WebLogic JDBC プログラマーズ ガイ ド 5-45

Page 128: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

表 5-6 OracleCallableStatement インタフェース

拡張 メソッ ド シグネチャ

OracleCallableStatement

拡張java.sql.CallableStatement

void clearParameters() throws java.sql.SQLException;

void registerIndexTableOutParameter(int i, int j, int k, int l)

throws java.sql.SQLException;

void registerOutParameter(int i, int j, int k, int l) throws java.sql.SQLException;

java.sql.ResultSet getCursor(int i) throws java.sql.SQLException;

java.io.InputStream getAsciiStream(int i)throws java.sql.SQLException;

java.io.InputStream getBinaryStream(int i)throws java.sql.SQLException;

java.io.InputStream getUnicodeStream(int i)throws java.sql.SQLException;

5-46 WebLogic JDBC プログラマーズ ガイ ド

Page 129: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能インタ フ ェースとサポー ト される メ ソ ッ ドの表

.

表 5-7 OraclePreparedStatement インタフェース

拡張 メソッ ド シグネチャ

OraclePreparedStatement

拡張

OracleStatement および java.sql. PreparedStatement

int getExecuteBatch() throws java.sql.SQLException;

void defineParameterType(int i, int j, int k) throws java.sql.SQLException;

void setDisableStmtCaching(boolean b) throws java.sql.SQLException;

void setExecuteBatch(int i) throws java.sql.SQLException;

void setFixedCHAR(int i, String s) throws java.sql.SQLException;

void setInternalBytes(int i, byte[] b, int j)throws java.sql.SQLException;

WebLogic JDBC プログラマーズ ガイ ド 5-47

Page 130: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

表 5-8 OracleArray インタフェース

拡張 メソッ ド シグネチャ

OracleArray

拡張 java.sql.Array

public ArrayDescriptor getDescriptor() throws java.sql.SQLException;

public Datum[] getOracleArray() throws SQLException;

public Datum[] getOracleArray(long l, int i) throws SQLException;

public String getSQLTypeName()throws java.sql.SQLException;

public int length()throws java.sql.SQLException;

public double[] getDoubleArray()throws java.sql.SQLException;

public double[] getDoubleArray(long l, int i)throws java.sql.SQLException;

public float[] getFloatArray()throws java.sql.SQLException;

public float[] getFloatArray(long l, int i)throws java.sql.SQLException;

public int[] getIntArray()throws java.sql.SQLException;

public int[] getIntArray(long l, int i)throws java.sql.SQLException;

public long[] getLongArray()throws java.sql.SQLException;

public long[] getLongArray(long l, int i)throws java.sql.SQLException;

5-48 WebLogic JDBC プログラマーズ ガイ ド

Page 131: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能インタ フ ェースとサポー ト される メ ソ ッ ドの表

OracleArray

拡張 java.sql.Array

(続き )

public short[] getShortArray()throws java.sql.SQLException;

public short[] getShortArray(long l, int i)throws java.sql.SQLException;

public void setAutoBuffering(boolean flag)throws java.sql.SQLException;

public void setAutoIndexing(boolean flag)throws java.sql.SQLException;

public boolean getAutoBuffering()throws java.sql.SQLException;

public boolean getAutoIndexing()throws java.sql.SQLException;

public void setAutoIndexing(boolean flag, int i)throws java.sql.SQLException;

表 5-8 OracleArray インタフェース

拡張 メソッ ド シグネチャ

WebLogic JDBC プログラマーズ ガイ ド 5-49

Page 132: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

表 5-9 OracleStruct インタフェース

拡張 メソッ ド シグネチャ

OracleStruct

拡張 java.sql.Struct

public Object[] getAttributes() throws java.sql.SQLException;

public Object[] getAttributes(java.util.Dictionary map)throws java.sql.SQLException;

public Datum[] getOracleAttributes() throws java.sql.SQLException;

public oracle.sql.StructDescriptor getDescriptor() throws java.sql.SQLException;

public String getSQLTypeName() throws java.sql.SQLException;

public void setAutoBuffering(boolean flag) throws java.sql.SQLException;

public boolean getAutoBuffering() throws java.sql.SQLException;

表 5-10 OracleRef インタフェース

拡張 メソッ ド シグネチャ

OracleRef

拡張 java.sql.Ref

public String getBaseTypeName() throws SQLException;

public oracle.sql.StructDescriptor getDescriptor() throws SQLException;

public oracle.sql.STRUCT getSTRUCT() throws SQLException;

public Object getValue() throws SQLException;

public Object getValue(Map map) throws SQLException;

public void setValue(Object obj) throws SQLException;

5-50 WebLogic JDBC プログラマーズ ガイ ド

Page 133: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

Oracle 拡張機能インタ フ ェースとサポー ト される メ ソ ッ ドの表

表 5-11 OracleThinBlob インタフェース

拡張 メソッ ド シグネチャ

OracleThinBlob

拡張 java.sql.Blob

int getBufferSize()throws java.sql.Exception

int getChunkSize()throws java.sql.Exception

int putBytes(long, int, byte[])throws java.sql.Exception

int getBinaryOutputStream()throws java.sql.Exception

表 5-12 OracleThinClob インタフェース

拡張 メソッ ド シグネチャ

OracleThinClob

拡張 java.sql.Clob

public OutputStream getAsciiOutputStream() throws java.sql.Exception;

public Writer getCharacterOutputStream() throws java.sql.Exception;

public int getBufferSize() throws java.sql.Exception;

public int getChunkSize() throws java.sql.Exception;

public char[] getChars(long l, int i) throws java.sql.Exception;

public int putChars(long start, char myChars[]) throws java.sql.Exception;

public int putString(long l, String s) throws java.sql.Exception;

WebLogic JDBC プログラマーズ ガイ ド 5-51

Page 134: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

5 WebLogic Server でのサードパーテ ィ ド ライバの使い方

5-52 WebLogic JDBC プログラマーズ ガイ ド

Page 135: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona ( 非推奨 ) の使い方

dbKona ク ラスには、 Java アプリ ケーシ ョ ンやアプレ ッ ト からデータベースにアクセスできる高度なデータベース接続オブジェ ク トのセッ ト が用意されていま

す。 dbKona は JDBC API の最上位に配置され、 WebLogic JDBC ド ラ イバ、 またはその他の JDBC 対応のド ライバと連動します。

以下の節では、 dbKona ク ラス について説明します。

� 6-1 ページの 「dbKona の概要」

� 6-4 ページの 「dbKona API」

� 6-18 ページの 「エンテ ィテ ィの関係」

� 6-19 ページの 「dbKona の実装」

dbKona の概要

dbKona ク ラスには、 データ管理に関する低レベルの詳細を扱う JDBC よ り も高レベルな抽象化概念が備えられています。 dbKona ク ラスから提供されるオブジェ ク ト を使用するこ とで、 プログラマは、 ベンダに依存しない、 高レベルな方

法でデータベース データを表示および変更できるよ うにな り ます。 dbKona オブジェ ク ト を使用する Java アプリ ケーシ ョ ンでは、 データベースに対してデータの検索、 挿入、 変更、 削除などを行うにあたって、 DBMS のテーブル構造やフ ィールド タイプに関するベンダ固有の知識は不要です。

WebLogic JDBC プログラマーズ ガイ ド 6-1

Page 136: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

多層コンフ ィグレーションでの dbKona

また、 dbKona は、WebLogic Server および多層ド ラ イバで構成される多層 JDBC 実装でも使用できます。 このコンフ ィ グレーシ ョ ンでは、 ク ライアン ト サイ ド ライブラ リは不要です。 多層コンフ ィ グレーシ ョ ンでは、 WebLogic JDBC は、WebLogic 多層フレームワークへのアクセス メ ソ ッ ド と して機能します。WebLogic では、WebLogic jDriver for Oracle などの単一の JDBC ド ラ イバを使用して、 WebLogic Server から DBMS への通信を行います。

dbKona は、多層環境でデータベース アクセス プログラムを作成する場合によ く使用されます。 dbKona オブジェ ク ト を使用すれば、 ベンダにまった く依存しないデータベース アプ リ ケーシ ョ ンを作成できるからです。 dbKona および WebLogic の多層フレームワークは、 ユーザに意識させずに、 複数の異種データベースからデータを取り出すよ う なアプ リ ケーシ ョ ンに特に適しています。

WebLogic と WebLogic JDBC サーバの詳細については、『WebLogic JDBC プログラマーズ ガイ ド』 を参照して ください。

dbKona と JDBC ドライバの相互作用

dbKona は、 DBMS への接続とその維持を JDBC ド ラ イバに依存しています。dbKona を使用するには、 JDBC ド ラ イバをインス トールする必要があ り ます。

� WebLogic jDriver for Oracle のネイティブ JDBC ド ラ イバを使用している場合は、 『WebLogic jDriver for Oracle のコンフ ィ グレーシ ョ ン と使い方』 にある説明に従って、 使用しているオペレーティ ング システムに適した、WebLogic 提供の .dll、 .sl、 または .so ファ イルをインス トールします。

� WebLogic JDBC ド ラ イバ以外の JDBC ド ラ イバを使用している場合は、 その JDBC ド ラ イバのマニュアルを参照します。

JavaSoft の JDBC は、 BEA が jDriver JDBC ド ラ イバを作成するために実装した一連のインタフェースです。 BEA の JDBC ド ラ イバは、 Oracle および Microsoft SQL Server 用のデータベース固有のド ラ イバの JDBC 実装です。 dbKona でデータベース固有のド ライバを使用する と、 パフォーマンスが向上するだけでなく、

プログラマは各データベースのすべての機能にアクセスできます。

6-2 WebLogic JDBC プログラマーズ ガイ ド

Page 137: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の概要

dbKona の基礎部分ではデータベース ト ランザクシ ョ ン用に JDBC が使用されていますが、 dbKona を使用するこ とによって、 データベースへのよ り高レベルで便利なアクセスが可能にな り ます。

dbKona と WebLogic Event の相互作用

dbKona パッケージには、 ローカルまたは DBMS 内でデータが更新される と きに、 WebLogic Event を使用してイベン ト を (WebLogic Server 内で ) 送受信する「eventful」 ク ラ スが含まれています。

dbKona アーキテクチャ

dbKona では、 データベースに存在するデータの記述および操作に、 高レベルな抽象化概念が使用されます。 dbKona のク ラスは、 データを検索および変更するオブジェ ク トの作成と管理を行います。 特定のベンダのデータ保存方法や処理方

法に関する知識がな く ても、 アプ リ ケーシ ョ ンでは一貫性のある方法で dbKona オブジェ ク ト を使用できます。

dbKona アーキテクチャの中心的な概念は、 DataSet です。 DataSet には、 クエリの結果が含まれます。 DataSet を使用する と、 ク ラ イアン トサイ ドでクエ リ結果を管理できます。 プログラマはレコードを 1 つずつ処理するのではなく、 クエリ結果全体を制御できます。

DataSet には Record オブジェ ク トが含まれています。 さ らに各 Record オブジェ ク トには 1 つまたは複数の Value オブジェ ク トが含まれています。 Record は、 データベースの行に相当し、 Value はデータベースのセルに相当します。Value オブジェク トは、 DBMS に格納される場合の自身の内部データ型を「知っています」。 しかし、 プログラマはベンダ固有の内部データ型を気にせず

に、 一貫性のある方法で Value オブジェク ト を使用できます。

DataSet ク ラス (およびそのサブク ラス TableDataSet と QueryDataSet) のメソ ッ ドを使用する と、 高レベルで柔軟な方法でクエ リ結果を自在に操作できま

す。 TableDataSet の変更内容は、 DBMS に保存できます。 この場合、 dbKona

WebLogic JDBC プログラマーズ ガイ ド 6-3

Page 138: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

では変更したレコードについての情報が保持され、 選択的に保存されます。 これ

によ り、 ネッ ト ワーク ト ラフ ィ ッ クおよび DBMS のオーバーヘッ ドが減少します。

また dbKona では、 プログラマがベンダ固有の SQL を気にする必要のない、SelectStmt や KeyDef などのオブジェ ク ト も使用できます。 これらのク ラスのメ ソ ッ ドを使用する と、 dbKona によって適切な SQL が作成されます。 ベンダ固有の SQL についての知識が不要な上、 構文エラーも減少します。 その一方で、dbKona では、プログラマは必要に応じて SQL を DBMS に渡すこ とができます。

dbKona API

以下の節では、 dbKona API について説明します。

dbKona API リファレンス

weblogic.db.jdbc パッケージweblogic.db.jdbc.oracle パッケージ (Oracle 向け拡張 )

java.lang.Object クラス weblogic.db.jdbc.Column クラス (weblogic.common.internal.Serializable の実装 ) weblogic.db.jdbc.DataSet クラス (weblogic.common.internal.Serializable の実装 ) weblogic.db.jdbc.QueryDataSet クラス weblogic.db.jdbc.TableDataSet クラス weblogic.db.jdbc.EventfulTableDataSet クラス (weblogic.event.actions.ActionDef の実装 ) weblogic.db.jdbc.Enums クラス weblogic.db.jdbc.KeyDef クラス weblogic.db.jdbc.Record クラス weblogic.db.jdbc.EventfulRecord クラス (weblogic.common.internal.Serializable の実装 ) weblogic.db.jdbc.Schema クラス (weblogic.common.internal.Serializable の実装 ) weblogic.db.jdbc.SelectStmt クラス weblogic.db.jdbc.oracle.Sequence クラス java.lang.Throwable クラス java.lang.Exception クラス

6-4 WebLogic JDBC プログラマーズ ガイ ド

Page 139: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona API

weblogic.db.jdbc.DataSetException クラス

weblogic.db.jdbc.Value クラス

dbKona オブジェク ト とそれらのクラス

dbKona のオブジェ ク トは、 以下の 3 つのカテゴ リに分けられます。

� データ コンテナ オブジェ ク トには、 データベースから取り出されたデータやデータベースにバインド されたデータが保持されます。 または、 データを

保持する他のオブジェ ク ト が含まれます。 データ コンテナ オブジェ ク トは、常に一連のデータ記述オブジェ ク トおよび一連のセッシ ョ ン オブジェク トに関連付けられます。 TableDataSet オブジェ ク トや、 Record オブジェ ク トは、 データ コンテナ オブジェ ク トの例です。

� データ記述オブジェ ク トには、 データ オブジェク ト に関する メ タデータが保持されます。 メ タデータ とは、 データ構造やデータ型、 リモート DBMS からデータを取り出すためのパラ メータなどを記述したものです。 すべての

データ オブジェク ト またはそのコンテナは、 一連のデータ記述オブジェ ク トに関連付けられます。 Schema オブジェ ク トや、 SelectStmt オブジェク トは、 このデータ記述オブジェク ト の例です。

� その他のオブジェク トは、 エラーに関する情報を格納した り、 定数シンボル

を提供した り します。

オブジェ ク トのこのよ う な大きなカテゴ リは、 アプ リ ケーシ ョ ンのビルドにおい

て相互に依存し合っています。 通常は、 どのデータ オブジェ ク トにも、 一連の記述オブジェク トが関連付けられています。

dbKona のデータ コンテナ オブジェク ト

データ コンテナと して機能する基本的なオブジェ ク トには 3 種類あ り ます。DataSet、 Record、 および Value の各オブジェ ク トです。 DataSet ( またはそのサブク ラスである QueryDataSet あるいは TableDataSet) オブジェ ク トには Record オブジェ ク トが含まれ、 Record オブジェ ク ト には Value オブジェ ク トが含まれます。 DataSet のサブク ラス EventfulTableDataSet は非推奨になりました。

WebLogic JDBC プログラマーズ ガイ ド 6-5

Page 140: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

DataSet

dbKona パッケージでは DataSet の概念を使用して、DBMS サーバから取り出されたレコードをキャ ッシュできます。 この概念は、 SQL におけるテーブルとほぼ同じです。 DataSet ク ラスには 2 つのサブク ラス、 QueryDataSet と TableDataSet があ り ます。

WebLogic Server を使用する多層モデルでは、DataSet を WebLogic Server に保存 ( キャッシュ ) できます。

� DataSet は、 クエ リ またはス ト アド プロシージャの結果を保持する QueryDataSet または TableDataSet と して作成されます。

� DataSet の検索パラ メータは、 SQL 文、 または dbKona の SQL 文用の抽象オブジェ ク ト である SelectStmt オブジェ ク ト によって定義されます。

� DataSet には、 Value オブジェ ク ト を含む Record オブジェ ク トが含まれます。 Record には、 インデッ クス位置 (0 が起点 ) を指定してアクセスします。

� DataSet は、 Schema によって記述され、 Schema にバインド されます。Schema には、 DataSet に表示される各データベース カラムの名前、 データ型、 サイズ、 順番などの属性情報が格納されます。 Schema 内のカラム名には、 インデッ クス位置 (1 が起点 ) を指定してアクセスします。

DataSet ク ラス (weblogic.db.jdbc.DataSet を参照 ) は、 QueryDataSet および TableDataSet の抽象的な親ク ラスです。

QueryDataSet

QueryDataSet を使用する と、 SQL クエ リの結果を、 インデッ クス位置 (0 が起点 ) を指定してアクセスする Record のコレクシ ョ ン と して使用できます。 TableDataSet とは異な り、 QueryDataSet に対して変更および追加した内容はデータベースに保存できません。

QueryDataSet と TableDataSet には、 機能的な違いが 2 つあ り ます。 1 番目の相違点は、 TableDataSet の変更内容はデータベースに保存できる とい う点です。 QueryDataSet の Record も変更できますが、 その変更内容は保存できません。 2 番目の相違点は、 QueryDataSet には、 複数のテーブルからのデータを取り出せる とい う点です。

6-6 WebLogic JDBC プログラマーズ ガイ ド

Page 141: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona API

� QueryDataSet は、 java.sql.Connection のコンテキス ト内で、 または java.sql.ResultSet を使用して作成されます。 つま り、 Connection オブジェ ク ト を引数と して QueryDataSet コンス ト ラ ク タに渡します。QueryDataSet のデータ検索は、 SQL クエ リや SelectStmt オブジェ ク トによって指定されます。

� QueryDataSet には、 Record オブジェ ク ト (0 が起点のインデッ クスを指定してアクセスする ) が含まれます。 Record オブジェク トには Value オブジェク ト (1 が起点のインデッ クスを指定してアクセスする ) が含まれます。

� QueryDataSet は、 Schema によって記述されます。 Schema には、QueryDataSet の属性に関する情報が格納されます。 属性には、QueryDataSet に表示される各データベース カラムの名前、 データ型、 サイズ、 順番などがあ り ます。

QueryDataSet ク ラス (weblogic.db.jdbc.QueryDataSet を参照 ) には、QueryDataSet を作成、 保存、 および検索するためのメ ソ ッ ドがあ り ます。QueryDataSet には、 結合用の SQL など、 任意の SQL を指定できます。 そのスーパーク ラスである DataSet には、 レコード キャ ッシュの詳細を管理するためのメ ソ ッ ドが含まれています。

TableDataSet

TableDataSet と QueryDataSet の機能的な違いは、 TableDataSet の変更内容はデータベースに保存できる とい う点です。 TableDataSet を使用する と、Record の値の更新、 新しい Record の追加、 および Record への削除のマーク付けができます。 TableDataSet 全体を保存する場合は TableDataSet ク ラスの save() メ ソ ッ ドを使用し、 1 つのレコードを保存する場合は Record ク ラスの save() メ ソ ッ ドを使用して、 最終的に変更内容をデータベースに保存できます。さ らに、 TableDataSet に取り出されるデータは、 定義上、 単一のデータベース テーブルからのデータです。 複数のデータベース テーブルを結合して TableDataSet にデータを取り出すこ とはできません。

更新情報または削除情報をデータベースに保存するには、 KeyDef オブジェ ク トを使用して TableDataSet を作成する必要があ り ます。KeyDef オブジェク トは、UPDATE 文または DELETE 文に WHERE 句を作成するためのユニークなキーを指定します。 挿入の操作には WHERE 句は必要ないので、 挿入だけを行う場合は、

WebLogic JDBC プログラマーズ ガイ ド 6-7

Page 142: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

KeyDef オブジェ ク トは不要です。 KeyDef のキーには、 DBMS によって入力または変更されるカラムが含まれないよ うにして ください。 dbKona では、 正しい WHERE 句を作成するためにキー カラムの値を把握しておく必要があるからです。

また、 SQL 文の末尾を構成する任意の文字列で TableDataSet を限定するこ ともできます。 Oracle データベースで dbKona を使用している場合、 たとえば「for UPDATE」 などの文字列で TableDataSet を限定する と、 クエ リによって検索されるレコードをロッ クできます。

TableDataSet は、 KeyDef を使用して作成できます。 KeyDef は dbKona のオブジェク ト であ り、 DBMS に更新情報および削除情報を保存するためのユニークなキーを設定する場合に使用されます。 Oracle データベースを使用している場合は、 TableDataSet の KeyDef をテーブルごとにユニークなキーである 「ROWID」に設定できます。 その後、 「ROWID」 を含む一連の属性を使用して、 TableDataSet を作成します。

� TableDataSet は、 java.sql.Connection のコンテキス ト内で作成されます。 つま り、 Connection オブジェ ク ト を引数と して TableDataSet コンスト ラ ク タに渡します。 そのデータ検索は、 DBMS テーブルの名前によって指定されます。 更新情報および削除情報を保存する場合は、 TableDataSet の作成時に KeyDef オブジェク ト を指定する必要があ り ます。 TableDataSet を作成した後で、 where() メ ソ ッ ドおよび order() メ ソ ッ ドを使用してクエリ を修正し、 WHERE 句および ORDER BY 句を設定する こ と もできます。

� TableDataSet には、 関連付けられているデフォル トの SelectStmt オブジェク ト があ り ます。 このオブジェ ク トは、 サンプルを使用したクエ リ機能

を利用する場合に使用されます。

� QueryDataSet には、 Record オブジェ ク ト (0 が起点のインデッ クスを指定してアクセスする ) が含まれます。 Record オブジェ ク ト には Value オブジェク ト (1 が起点のインデッ クスを指定してアクセスする ) が含まれます。

� TableDataSet の属性は、 schema によって記述されます。 schema には、TableDataSet に表示されるデータベース カラムの名前、 データ型、 サイズ、 順番などの TableDataSet の属性情報が格納されます。

� TableDataSet は、 WebLogic Server サーバにキャ ッシュできます。

� setRefreshOnSave() メ ソ ッ ドは、 保存中に挿入または更新されたレコードもすぐに DBMS から更新されるよ うに、 TableDataSet を設定します。

6-8 WebLogic JDBC プログラマーズ ガイ ド

Page 143: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona API

TableDataSet に DBMS によって変更されたカラム (Microsoft SQL Server の IDENTITY カラムや挿入または更新がきっかけとなって変更されたカラムなど ) がある場合は、 このフラグを設定します。

� Refresh() メ ソ ッ ドは、 データベースに保存された TableDataSet 内のレコード、 つま り TableDataSet で変更したレコードを更新します。 レコードの変更内容は失われ、 レコードには更新済みのマークが付きます。 削除の

マークが付けられたレコードは、 更新されません。 TableDataSet に追加されたレコードの場合は、 更新元の DBMS の行が存在しないこ と を示す例外が生成されます。

� saveWithoutStatusUpdate() メ ソ ッ ドは、 TableDataSet 内のレコードの保存状態を更新せずに DBMS に TableDataSet レコードを保存します。 トランザクシ ョ ン内で TableDataSet レコードを保存する場合には、 このメソ ッ ドを使用します。 ト ランザクシ ョ ンがロールバッ ク されても、

TableDataSet 内のレコードはデータベース と一致しており、 ト ランザクシ ョ ンを再試行できます。 ト ランザクシ ョ ンのコ ミ ッ ト後、

updateStatus() を呼び出して TableDataSet 内のレコードの保存状態を更新します。 一度、 saveWithoutStatusUpdate() を使用してレコードを保存する と、 そのレコードに対して updateStatus() を呼び出すまでレコードは変更できません。

� TableDataSet.setOptimisticLockingCol() メ ソ ッ ドを使用する と、TableDataSet の 1 つのカラムをオプティ ミ ステ ィ ッ ク ロ ッ クのカラムと して指定できます。 このカラムをアプ リ ケーシ ョ ンで使用する と、 データベー

スから読み込んでから他のユーザがその行を変更したかど うかを検出できま

す。 dbKona では、 行が変更されるたびに DBMS によってカラムが更新されるよ うになっているので、 TableDataSet の値によってこのカラムが更新される こ とはあ り ません。 dbKona では、 レコード または TableDataSet を保存する と きに UPDATE 文の WHERE 句でこのカラムが使用されます。 別のユーザがそのレコードを変更した場合は、 dbKona による更新は失敗します。 この場合、 Record.refresh() を使用してそのレコードの新しい値を取り出し、レコードに変更を加えてから、 再度保存を試みる こ とができます。

WebLogic JDBC プログラマーズ ガイ ド 6-9

Page 144: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

TableDataSet ク ラス (weblogic.db.jdbc.TableDataSet を参照 ) には、 次のメ ソ ッ ドがあ り ます。

� TableDataSet を作成するためのメ ソ ッ ド

� WHERE 句および ORDER BY 句を設定するためのメ ソ ッ ド

� KeyDef を取得するためのメ ソ ッ ド

� 関連付けられた JDBC ResultSet を取得するためのメ ソ ッ ド

� SelectStmt を取得するためのメ ソ ッ ド

� 関連付けられた DBMS テーブル名を取得するためのメ ソ ッ ド

� 変更内容をデータベースに保存するためのメ ソ ッ ド

� DBMS からレコードを更新するためのメ ソ ッ ド

� 関連するその他情報を取得するためのメ ソ ッ ド

そのスーパーク ラスである DataSet には、 レコード キャ ッシュを管理するためのメ ソ ッ ドが含まれています。

EventfulTableDataSet (非推奨 )

WebLogic Server 内部で使用するための EventfulTableDataSet は、 データがローカルまたは DBMS で更新されたと きに、 イベン ト を送信および受信する TableDataSet です。 EventfulTableDataSet は、 WebLogic Event のすべての Action ク ラスによって実装されるインタフェースである weblogic.event.actions.ActionDef を実装しています。EventfulTableDataSet の action() メ ソ ッ ドは、 DBMS を更新し、 同じ DBMS テーブルに関する他のすべての EventfulTableDataSet にその変更を通知します (WebLogic Event (非推奨 ) に関する詳細については、 ホワ イ トペーパーおよび WebLogic Events の開発者ガイ ドを参照して ください )。

EventfulTableDataSet の EventfulRecord が変更される と、 WebLogic Server に ParamSet を持つ EventMessage が送信されます。 ParamSet には、変更されたデータ と行が含まれます。 このと き、 その ト ピ ッ クは、 WEBLOGIC.[tablename] にな り ます。 こ こで tablename には EventfulTableDataSet に関連付けられたテーブルの名前が入り ます。 EventfulTableDataSet は、 受信し、 評価されたイベン ト に基づいて動作し、 変更されたレコードの独自のコピーを更新します。

6-10 WebLogic JDBC プログラマーズ ガイ ド

Page 145: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona API

EventfulTableDataSet は、 java.sql.Connection オブジェク ト のコンテキスト内で作成されます (Connection オブジェク ト を引数と してコンス ト ラ ク タに渡す )。 また、 t3 Client オブジェク ト、 挿入、 更新、 削除に使用される KeyDef オブジェ ク ト 、 および DBMS のテーブル名も指定する必要があ り ます。

� TableDataSet と同様、 EventfulTableDataSet には、 関連付けられているデフォル トの SelectStmt オブジェク トがあ り ます。 このオブジェ ク トは、サンプルを使用したクエ リ機能を利用する場合に使用されます。

� EventfulTableDataSet には、 EventfulRecord オブジェ ク ト (0 が起点のインデッ クスを指定してアクセスする ) が含まれます。 Record オブジェク トのよ うに、 EventfulRecord オブジェ ク トには、 Value オブジェ ク ト (1 が起点のインデッ クスを指定してアクセスする ) が含まれます。

� EventfulTableDataSet の属性は、 Schema によって TableDataSet と同じ方法で記述されます。

たとえば、 EventfulTableDataSet は、 数多くのテーブル ビューを自動的に更新する、 倉庫の在庫システムなどで使用されます。 こ こではその動作について説

明します。 各倉庫の従業員のク ライアン ト アプリ ケーシ ョ ンが、 「stock」 テーブルから EventfulTableDataSet を作成し、 そのレコードを Java アプ リ ケーシ ョンに表示します。 別の仕事をしている従業員は別の表示を見ていますが、 すべて

のク ライアン ト アプリ ケーシ ョ ンでは、 「stock」 テーブルの同じ EventfulTableDataSet が使用されています。 TableDataSet が 「イベン ト フル」 であるため、 データ セッ ト内の各レコードは自動的にそれ自身に対する関心を登録済みです。 WebLogic の ト ピッ ク ツ リーには、 すべてのレコードへの関心が登録されています。 そこには、 ク ラ イアン ト ご との、 TableDataSet の各レコードに対する関心の登録があ り ます。

ユーザがレコードを変更する と、 DBMS は新しいレコードによ り更新されます。同時に、 EventMessage (変更された Record 自身が埋め込まれています ) が自動的に WebLogic Server に送信されます。 「Stock」 テーブルの EventfulTableDataSet を使用している各ク ライアン トは、 変更された Record が埋め込まれたイベン ト通知を受信します。 各ク ラ イアン ト の EventfulTableDataSet は、 変更されたレコードを受け入れて GUI を更新します。

WebLogic JDBC プログラマーズ ガイ ド 6-11

Page 146: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

Record

Record オブジェ ク トは、 DataSet の一部と して作成されます。 Record は、DataSet のコンテキス ト とその Schema、 または現在アクティブになっている Database セッシ ョ ンで認識される SQL テーブルの Schema に基づいて手動で作成するこ と もできます。

TableDataSet 内の Record は、 Record ク ラスの save() メ ソ ッ ドを使用すれば個別に、 または TableDataSet ク ラスの save() メ ソ ッ ドを使用すれば一括してデータベースに保存できます。

� Record は、 DataSet が作成され、 そのクエ リが実行されたと きに作成されます。 また、 Record は、 (DataSet の fetchRecords() メ ソ ッ ドが呼び出されて、 その Schema が取得された後で ) DataSet の addRecord() メ ソ ッ ドまたは Record コンス ト ラ ク タを使用して既存の DataSet に追加する こ と もできます。

� Record には、 Value のコレ クシ ョ ンが含まれています。 Record には、 0 が起点のインデッ クス位置を指定してアクセスします。 Record 内の Value には、1 が起点のインデッ クス位置を指定してアクセスします。

� Record は、 その親の DataSet の Schema によって記述されます。 Record に関連付けられた Schema には、 Record 内の各フ ィールドの名前、 データ型、サイズ、 および順番などに関する情報が格納されます。

Record ク ラス (weblogic.db.jdbc.Record を参照 ) には、 次のメ ソ ッ ドがあ ります。

� Record オブジェ ク ト を作成するためのメ ソ ッ ド

� 親の DataSet および Schema を確認するためのメ ソ ッ ド

� Record 内のカラム数を確認するためのメ ソ ッ ド

� ステータスが保存なのか更新なのかを確認するためのメ ソ ッ ド

� データベースへの Record の保存または更新に使用する SQL 文字列を確認するためのメ ソ ッ ド

� Value の取得と設定を行う ためのメ ソ ッ ド

� 各カラムの値をフォーマッ ト文字列と して返すためのメ ソ ッ ド

6-12 WebLogic JDBC プログラマーズ ガイ ド

Page 147: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona API

Value

Value オブジェク ト には、親の DataSet の Schema によって定義される内部データ型があ り ます。 Value オブジェク ト には、 有効な割 り当てであればその内部データ型以外のデータ型の値を割 り当てる こ とができます。 また、 Value オブジェ ク トには、 有効な リ クエス ト であればその内部データ型以外のデータ型の値

を返すこ と もできます。

Value オブジェク ト では、 アプ リ ケーシ ョ ンでベンダ固有のデータ型を操作しなくてもいいよ うになっています。 Value オブジェク トはそのデータ型を 「知っています」 が、 すべての Value オブジェ ク トはその内部データ型に関係なく同じメ ソ ッ ドを使用して Java アプリ ケーシ ョ ン内で操作できます。

� Value オブジェ ク トは、 Record オブジェ ク ト の作成時に作成されます。

� Value オブジェク ト の内部データ型は、 次のいずれかにな り ます。

� Boolean

� Byte

� Byte[]

� Date

� Double-precision

� Floating-point

� Integer

� Long

� Numeric

� Short

� String

� Time

� Timestamp

� NULL

これらのデータ型は、 java.sql.Types に表示されている JDBC のタイプに対応しています。

� Value オブジェ ク トは、 親の DataSet に関連付けられた Schema によって記述されます。

WebLogic JDBC プログラマーズ ガイ ド 6-13

Page 148: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

Value ク ラス (weblogic.db.jdbc.Value を参照 ) には、 Value オブジェ ク ト のデータおよびデータ型を取得および設定するためのメ ソ ッ ドがあ り ます。

dbKona のデータ記述オブジェク ト

データ記述オブジェ ク ト には、 メ タデータが含まれます。 メ タデータ とは、 デー

タ構造、 DBMS へのデータの格納方法や DBMS からのデータの取り出し方法、データの更新方法などに関する情報のこ とです。 dbKona では、 JDBC インタフェースの実装と して提供される次のデータ記述オブジェ ク ト を使用します。

� Schema

� Column

� KeyDef

� SelectStmt

Schema

DataSet をインスタンス化する と、 それを記述する Schema が暗黙に作成されます。 そしてその Record を取り出すと、 その DataSet Schema が更新されます。

� Schema は、 DataSet がインスタンス化される と きに自動的に作成されます。

� DataSet の属性 (つま り、 QueryDataSet と TableDataSet、 およびそれらに関連付けられた Record の属性 ) は、 テーブルの属性のよ うに Schema によって定義されます。

� Schema 属性は、 Column オブジェ ク トのコレクシ ョ ン と して記述されます。

Schema ク ラス (weblogic.db.jdbc.Schema を参照 ) には、 次のメ ソ ッ ドがあ ります。

� Schema に関連付けられた Column を追加した り、 返した りするためのメソ ッ ド

� Schema 内のカラム数を確認するためのメ ソ ッ ド

� Schema 内の特定のカラム名のインデッ クス位置 (1 が起点 ) を確認するためのメ ソ ッ ド

6-14 WebLogic JDBC プログラマーズ ガイ ド

Page 149: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona API

Column

Schema が作成されます。

Column ク ラス (weblogic.db.jdbc.Column を参照 ) には、 次のメ ソ ッ ドがあ ります。

� Column を特定のデータ型に設定するためのメ ソ ッ ド

� Column のデータ型を確認するためのメ ソ ッ ド

� Column のデータベース固有のデータ型を確認するためのメ ソ ッ ド

� Column の名前、 スケール、 精度、 およびス ト レージの長さを確認するためのメ ソ ッ ド

� ネイティブ DBMS カラムで NULL 値を使用できるかど うかを確認するためのメ ソ ッ ド

� Column が読み込み専用や検索可能になっているかど うかを確認するためのメ ソ ッ ド

KeyDef

特定のデータベース レコードをユニークなものと して識別し操作するための「WHERE attribute1 = value1 and attribute2 = value2」 などのパターンです。 KeyDef の属性は、 データベース テーブルのユニークなキーに対応させる必要があ り ます。

属性のない KeyDef オブジェク トは、 KeyDef ク ラスで作成されます。addAttrib() メ ソ ッ ドを使用して、 KeyDef の属性を作成してから、 KeyDef を TableDataSet 用のコンス ト ラ ク タで引数と して使用します。 KeyDef は、 一度 DataSet に関連付けられる と属性を追加する こ とはできません。

Oracle データベースを使用している場合、 属性 「ROWID」 を追加できます。「ROWID」 は、 各テーブルに関連付けられた本質的にユニークなキーであ り、

TableDataSet を使用した挿入および削除に使用されます。

KeyDef ク ラス (weblogic.db.jdbc.KeyDef を参照 ) には、 次のメ ソ ッ ドがあ ります。

WebLogic JDBC プログラマーズ ガイ ド 6-15

Page 150: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

� 属性を追加するためのメ ソ ッ ド

� KeyDef オブジェ ク ト中の属性数を確認するためのメ ソ ッ ド

� KeyDef オブジェ ク ト に、 特定のカラム名またはインデッ クス位置に対応する属性があるかど うかを確認するためのメ ソ ッ ド

SelectStmt

SelectStmt ク ラスの中に SelectStmt オブジェク ト を作成するこ とができます。その後、 SelectStmt ク ラスのメ ソ ッ ドを使用して SelectStmt に句を追加し、その結果の SelectStmt オブジェク ト を QueryDataSet を作成する と きの引数として使用します。 TableDataSet には、 関連付けられたデフォル トの SelectStmt オブジェ ク トがあ り ます。 このオブジェ ク ト を使用する と、TableDataSet が作成された後でデータ検索の精度を向上させる こ とができます。

SelectStmt ク ラス (weblogic.db.jdbc.SelectStmt を参照 ) のメ ソ ッ ドは、 SQL 文の次の句に対応しています。

� Field (およびエリアス )

� From

� Group

� Having

� Order by

� Unique

� 各要素の説明は次のとおりです。

また、 サンプルを使用したクエ リの句の設定および追加もサポート されていま

す。 from() メ ソ ッ ドでは、 エ リ アスを含む文字列を 「<i>tableName alias</i>」 とい う形式で指定できます。 field() メ ソ ッ ドでは、「<i>tableAlias.attribute</i>」 とい う形式の文字列を引数と して使用でき

ます。 テーブルの結合が役立つかど うかは使用法によ り ますが、 SelectStmt オブジェ ク ト を作成する場合には複数のテーブル名を使用できます。

QueryDataSet に関連付けられた SelectStmt オブジェク ト では 1 つまたは複数

6-16 WebLogic JDBC プログラマーズ ガイ ド

Page 151: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona API

のテーブルを結合できますが、 TableDataSet に関連付けられた SelectStmt オブジェ ク トではこれができません。 定義上、 使用できるのが 1 つのテーブルのデータに制限されているからです。

dbKona のその他オブジェク ト

dbKona のその他オブジェク トには、 例外、 定数などがあ り ます。

例外

� DataSetException

� LicenseException

� java.sql.SQLException

通常、 DataSetException は、 DataSet にス ト アド プロシージャによるエラーなどの問題がある場合や、 内部 IO エラーがある場合などに発生します。

SQL 文の作成または DBMS サーバでの SQL 文の実行に問題がある場合は、java.sql.SqlException が送出されます。

定数

Enums ク ラスには、 以下の項目用の定数が含まれます。

� ト リ ガ状態

� ベンダ固有のデータベースのタイプ

� INSERT、 UPDATE、 および DELETE のデータベース操作

java.sql.Types ク ラスには、 データ型用の定数が含まれています。

WebLogic JDBC プログラマーズ ガイ ド 6-17

Page 152: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

エンティテ ィの関係

継承関係

以下に、 dbKona ク ラス間の重要な継承関係を示します。 1 つのク ラスがサブクラス化されています。

DataSet

DataSet は、 QueryDataSet および TableDataSet の抽象的な基本ク ラスです。

その他の dbKona オブジェ ク トは DbObject から派生します。

DataSetException や LicenseException などのほとんどの dbKona Exceptions は、 java.lang.Exception および weblogic.db.jdbc.DataSetException のサブク ラスです。LicenseException は RuntimeException のサブク ラスです。

所有関係

各 dbKona オブジェク ト には、 その構造をさ らに詳し く定義する、 関連付けられたその他のオブジェ ク ト がある場合もあ り ます。

DataSet

DataSet には、 Record オブジェ ク トがあ り、 各 Record オブジェク トには Value オブジェ ク ト があ り ます。 また、 DataSet には、 その構造を定義する Schema があ り、 これは 1 つまたは複数の Column で作成されています。 さ らに、 DataSet には、 データ検索用のパラ メータを設定する SelectStmt がある場合もあ り ます。

TableDataSet

TableDataSet には、 キーによって更新および削除を行う ための KeyDef があ ります。

6-18 WebLogic JDBC プログラマーズ ガイ ド

Page 153: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

Schema

Schema には、 その構造を定義する Column があ り ます。

dbKona の実装

以降の節では、 リモート DBMS からデータを取り出して表示する単純な Java アプリ ケーシ ョ ンのビルド手順の概要を、 一連のサンプルを使用して説明します。

dbKona を使用した DBMS へのアクセス

以下の手順では、 dbKona を使用して DBMS にアクセスする方法について説明します。

手順 1. パッケージのインポート

dbKona を使用するアプリ ケーシ ョ ンは java.sql および weblogic.db.jdbc (WebLogic dbKona パッケージ ) に加えて、 使用する他の Java ク ラスにもアクセスする必要があ り ます。 以下の例では、 ログイン プロセスで使用する java.util の Properties ク ラス、 および weblogic.html パッケージもインポート します。

import java.sql.*; import weblogic.db.jdbc.*; import weblogic.html.*; import java.Properties;

JDBC ド ラ イバ用のパッケージは、 インポート しないでください。 JDBC ド ラ イバは、 接続段階で確立されます。 バージ ョ ン 2.0 以降では、weblogic.db.common、weblogic.db.server、 weblogic.db.t3client はいずれもインポート しないでください。

WebLogic JDBC プログラマーズ ガイ ド 6-19

Page 154: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

手順 2. 接続確立用のプロパティの設定

次のコード例は、 Properties オブジェ ク ト を作成するためのメ ソ ッ ドのサンプルです。 このメ ソ ッ ドは、 Oracle DBMS との接続を確立するために使用されます。各プロパティは、 文字列をダブルクォテーシ ョ ン ("") で囲んで設定します。

public class tutor {

public static void main(String argv[]) throws DataSetException, java.sql.SQLException, java.io.IOException, ClassNotFoundException { Properties props = new java.util.Properties(); props.put("user", "scott"); props.put("password", "tiger"); props.put("server", "DEMO"); (以降に続く )

Properties オブジェ ク トは、 Connection を作成するための引数と して使用されます。 JDBC Connection オブジェク トは、 その他のデータベース操作でも重要なコンテキス ト にな り ます。

手順 3. DBMS との接続の確立

Connection オブジェ ク トは、 Class.forName() メ ソ ッ ドで JDBC ド ラ イバ クラスをロード し、 次に java.sql.myDriver.connect() コンス ト ラ ク タを呼び出すこ とによ り作成されます。 このコンス ト ラ ク タは、 使用する JDBC ド ラ イバの URL と java.util.Properties オブジェ ク トの 2 つの引数を取り ます。

Properties オブジェ ク トの作成方法については、 手順 2 の props を参照して ください。

Driver myDriver = (Driver) Class.forName("weblogic.jdbc.oci.Driver").newInstance(); conn = myDriver.connect("jdbc:weblogic:oracle", props); conn.setAutoCommit(false);

Connection conn は、 DBMS に関連するその他のアクシ ョ ン ( たとえば、 クエ リ結果を保持する DataSet の作成など ) のための引数とな り ます。 DBMS への接続の詳細については、 使用している ド ライバの開発者ガイ ドを参照して くださ

い。

6-20 WebLogic JDBC プログラマーズ ガイ ド

Page 155: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

Connection、 DataSet (使用している場合は JDBC ResultSet)、 および Statement は、 それらの操作を終了する と きに close() メ ソ ッ ドで閉じる必要があ り ます。 サンプルでは、 この方法に従って、 それらが明示的に閉じ られてい

ます。

注意 : java.sql.Connection のデフォル ト モードでは、 autoCommit が true に設定されています。 Oracle の場合は、 上記のサンプルのよ うに autoCommit を false に設定する とパフォーマンスが向上します。

注意 : DriverManager.getConnection() は同期 メ ソ ッ ドなので、 特定の状況では、 アプ リ ケーシ ョ ンがハングする原因とな り ます。 このため、

DriverManager.getConnection() の代わ りに Driver.connect() メソ ッ ドを使用するこ と をお勧めします。

クエリの準備、 およびデータの検索と表示

以下の手順では、 クエ リ を準備し、 データを検索および表示する方法について説

明します。

手順 1. データ検索用のパラメータの設定

dbKona には、 データ検索を行う場合に SQL 文を作成した り、 その範囲を設定したりするためのパラ メータを設定する方法がいくつかあ り ます。 こ こでは、

JDBC ResultSet の結果を使用し、 DataSet を作成する とい う、 dbKona と JDBC ド ラ イバの基本的な相互作用について説明します。 このサンプルでは、SQL 文を実行するのに Statement オブジェ ク ト を使用しています。 Statement オブジェ ク トは、 JDBC Connection ク ラスのメ ソ ッ ドによって作成されます。また、 ResultSet は、 Statement オブジェ ク ト を実行する こ とによって作成されます。

Statement stmt = conn.createStatement(); stmt.execute("SELECT * from empdemo"); ResultSet rs = stmt.getResultSet();

Statement オブジェ ク ト を使用して実行したクエ リの結果を使用して、QueryDataSet をインスタンス化できます。 この QueryDataSet は、 JDBC ResultSet を使用して作成されます。

WebLogic JDBC プログラマーズ ガイ ド 6-21

Page 156: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

Statement stmt = conn.createStatement(); stmt.execute("SELECT * from empdemo"); ResultSet rs = stmt.getResultSet(); QueryDataset ds = new QueryDataSet(rs);

JDBC Statement の実行結果を使用する こ とが、 DataSet を作成する唯一の方法にな り ます。 この方法には、 SQL に関する知識が必要であ り、 かつ、 クエ リの結果をあま り細かく指定する こ とはできません (基本的には、 JDBC の next() メ ソ ッ ドを使用すれば、 レコード操作を繰 り返すこ とができます )。 dbKona を使用する と、 レコードを検索するのに SQL の知識はあま り必要にな り ません。つま り、 dbKona のメ ソ ッ ドを使用してクエ リ を設定する こ とができ、 一度レコードを保持する DataSet を作成すればレコードの操作をよ り細かく指定できます。

手順 2. クエリ結果用の DataSet の生成

SQL 文を作成する必要はあ り ませんが、 dbKona では SQL 文の特定の部分を設定する メ ソ ッ ドを使用する必要があ り ます。 DataSet (TableDataSet または QueryDataSet) をクエ リの結果用に作成します。

たとえば、 dbKona で最も単純なデータ検索は、 TableDataSet に対するものです。 TableDataSet の作成に必要なのは、 Connection オブジェ ク ト と検索する DBMS テーブル名だけです。 Employee テーブル ( エリ アスは 「empdemo」 ) を検索するサンプルを次に示します。

TableDataSet tds = new TableDataSet(conn, "empdemo");

TableDataSet は、 DBMS テーブルの属性 ( カラム ) のサブセッ ト を使用して作成できます。 非常に大きなテーブルから数個のカラムだけを取り出す場合には、

それらのカラムを指定する方がテーブル全体を検索するよ り効率的です。 そのた

めには、 コンス ト ラ クタの引数と してテーブル属性のリ ス ト を渡します。 次に例

を示します。

TableDataSet tds = new TableDataSet(conn, "empdemo", "empno, dept");

DBMS に変更内容を保存する場合や、 1 つまたは複数のテーブルの結合を行ってデータを取り出すつも りがない場合は、 TableDataSet を使用し、 それ以外の場合は、 QueryDataSet を使用します。 次のサンプルでは、 2 つの引数 (Connection オブジェ ク ト と SQL 文の文字列 ) を取る QueryDataSet コンス トラ ク タを使用しています。

6-22 WebLogic JDBC プログラマーズ ガイ ド

Page 157: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

QueryDataSet qds = new QueryDataSet(conn, "select * from empdemo");

実際には、DataSet ク ラスの fetchRecords() メ ソ ッ ドを呼び出すまではデータの受け取りは開始されません。 DataSet を作成した後は、 データ パラ メータに引き続き修正を加える こ とができます。 たとえば、 where() メ ソ ッ ドを使用して、 TableDataSet に取り出すレコードの選択精度を向上させるこ とができます。 where() メ ソ ッ ドは、 dbKona が作成する SQL 文に WHERE 句を追加します。次のサンプルでは、 WHERE 句を作成する where() メ ソ ッ ドを使用して、Employee テーブルからレコードを 1 つだけ取り出しています。

TableDataSet tds = new TableDataSet(conn, "empdemo"); tds.where("empno = 8000");

手順 3. 結果の取り出し

データ パラ メータを設定したら、 次の例のよ うに DataSet ク ラスの fetchRecords() メ ソ ッ ドを呼び出します。

TableDataset tds = new TableDataSet(conn, "empdemo", "empno, dept"); tds.where("empno = 8000"); tds.fetchRecords();

fetchRecords() メ ソ ッ ドは、 特定の数のレコードを取り出す引数や、 特定のレコードで始まるレコードを取り出す引数を取るこ とができます。 次のサンプルで

は、 最初の 20 レコードのみを取り出し、 残 りは clearRecords() を使用して破棄しています。

TableDataSet tds = new TableDataSet(conn, "empdemo", "empno, dept"); tds.where("empno > 8000"); tds.fetchRecords(20) .clearRecords();

非常に大きなクエ リ結果を処理する場合は、 一度に取り出すレコード数を少なく

してまずそれを処理し、 DataSet を消去してから次の取り出しに進んだ方が良い場合もあ り ます。 次の取り出しまでの間に TableDataSet を消去するには、DataSet ク ラスから clearRecords() メ ソ ッ ドを使用します。 次にそのサンプルを示します。

TableDataSet tds = new TableDataSet(conn, "empdemo", "empno, dept"); tds.where("empno > 2000"); while (!tds.allRecordsRetrieved()) {

WebLogic JDBC プログラマーズ ガイ ド 6-23

Page 158: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

tds.fetchRecords(100); // 100 個のレコードを処理する . . tds.clearRecords(); }

また、 リ リース 2.5.3 で新規追加されたメ ソ ッ ドを使用して DataSet を再利用する こ と もできます。 その DataSet.releaseRecords() メ ソ ッ ドは、 DataSet を閉じてすべての Record を解放しますが破棄は行いません。 その DataSet を再利用して、 新しいレコードを生成できますが、 アプ リ ケーシ ョ ンによって保持され

ている最初に使用した DataSet からのレコードは読み込み可能のままです。

手順 4. TableDataSet の Schema の検査

TableDataSet に関する Schema 情報を検査する簡単なサンプルを以下に示します。 Schema ク ラスの toString() メ ソ ッ ドは、 TableDataSet tds 用にクエ リ されるテーブル内のカラムの名前、 タ イプ、 長さ、 精度、 スケール、 NULL 許容の各属性を含む、 改行で区切られた リ ス ト を表示します。

Schema sch = tds.schema(); System.out.println(sch.toString());

Statement オブジェク ト を使用してクエ リ を作成した場合は、 クエ リが終了して、その結果を取り出した後で Statement オブジェ ク ト を閉じ る必要があ り ます。

stmt.close();

手順 5. htmlKona を使用したデータの検査

次のサンプルでは、 htmlKona UnorderedList を使用してデータを検査する方法を示します。 このサンプルでは、DataSet.getRecord() と Record.getValue() を使用して、 for ループで各レコードを検査します。 手順 2. で作成した QueryDataSet に取り出したレコードから収入額が最高である従業員の名前、 ID、および給料を検索します。

// (データベース セッション オブジェクトと QueryDataSet qds の作成 ) UnorderedList ul = new UnorderedList();

String name = ""; String id = ""; String salstr = ""; int sal = 0; for (int i = 0; i < qds.size(); i++) { // レコードを取得する

6-24 WebLogic JDBC プログラマーズ ガイ ド

Page 159: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

Record rec = qds.getRecord(i); int tmp = rec.getValue("Emp Salary").asInt(); // htmlKona ListElement に給与額を追加する ul.addElement(new ListItem("$" + tmp)); // この給与額とこれまでに見つかった給与最高額と比較する if (tmp > sal) { // この給与額が新しい最高額の場合には、その従業員の情報を取得する sal = tmp; name = rec.getValue("Emp Name").asString(); id = rec.getValue("Emp ID").asString(); salstr = rec.getValue("Emp Salary").asString(); }

手順 6. htmlKona を使用した結果の表示

htmlKona を使用する と、 上記のサンプルで作成したよ うな動的データを簡単に表示できます。 次のサンプルは、 クエ リの結果を表示するページを動的に作成す

る方法を示しています。

HtmlPage hp = new HtmlPage(); hp.getHead() .addElement(new TitleElement("Highest Paid Employee")); hp.getBodyElement() .setAttribute(BodyElement.bgColor, HtmlColor.white); hp.getBody() .addElement(MarkupElement.HorizontalLine) .addElement(new HeadingElement("Query String: ", +2)) .addElement(stmt.toString()) .addElement(MarkupElement.HorizontalLine) .addElement("I examined the values: ") .addElement(ul) .addElement(MarkupElement.HorizontalLine) .addElement("Max salary of those employees examined is: ") .addElement(MarkupElement.Break) .addElement("Name: ") .addElement(new BoldElement(name)) .addElement(MarkupElement.Break) .addElement("ID: ") .addElement(new BoldElement(id)) .addElement(MarkupElement.Break) .addElement("Salary: ") .addElement(new BoldElement(salstr)) .addElement(MarkupElement.HorizontalLine);

hp.output();

WebLogic JDBC プログラマーズ ガイ ド 6-25

Page 160: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

手順 7. DataSet および接続のクローズ

qds.close(); tds.close();

DBMS への接続を閉じ る こ と も重要です。 次のサンプルのよ うに、 接続を閉じるコードが、 すべてのデータベース操作の最後に finally ブロ ッ ク内に表示される必要があ り ます。

try { // 処理を行う } catch (Exception mye) { // 例外を検出し処理する } finally { try {conn.close();} catch (Exception e) { // 例外を処理する } }

コードのま とめ

import java.sql.*;import weblogic.db.jdbc.*;import weblogic.html.*;import java.Properties;

public class tutor {

public static void main(String[] argv) throws java.io.IOException, DataSetException, java.sql.SQLException, HtmlException, ClassNotFoundException { Connection conn = null; try { Properties props = new java.util.Properties(); props.put("user", "scott"); props.put("password", "tiger"); props.put("server", "DEMO");

Driver myDriver = (Driver) Class.forName("weblogic.jdbc.oci.Driver").newInstance(); conn = myDriver.connect("jdbc:weblogic:oracle", props); conn.setAutoCommit(false);

// TableDataSet オブジェクトを作成し、レコードを 10 個追加する

6-26 WebLogic JDBC プログラマーズ ガイ ド

Page 161: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

TableDataSet tds = new TableDataSet(conn, "empdemo");for (int i = 0; i < 10; i++) { Record rec = tds.addRecord(); rec.setValue("empno", i) .setValue("ename", "person " + i) .setValue("esalary", 2000 + (i * 10)); }

// データを保存し TableDataSet を閉じる tds.save(); tds.close();

// QueryDataSet を作成し、テーブルへの追加分を取り出す Statement stmt = conn.createStatement(); stmt.execute("SELECT * from empdemo");

QueryDataSet qds = new QueryDataSet(stmt.getResultSet()); qds.fetchRecords();

// QueryDataSet 内のデータを使用する UnorderedList ul = new UnorderedList();

String name = ""; String id = ""; String salstr = ""; int sal = 0; for (int i = 0; i < qds.size(); i++) { Record rec = qds.getRecord(i); int tmp = rec.getValue("Emp Salary").asInt(); ul.addElement(new ListItem("$" + tmp)); if (tmp > sal) { sal = tmp; name = rec.getValue("Emp Name").asString(); id = rec.getValue("Emp ID").asString(); salstr = rec.getValue("Emp Salary").asString(); } }

// htmlKona ページを使用して、取り出したデータと // その取り出しに使用された文を表示する HtmlPage hp = new HtmlPage(); hp.getHead() .addElement(new TitleElement("Highest Paid Employee")); hp.getBodyElement() .setAttribute(BodyElement.bgColor, HtmlColor.white); hp.getBody() .addElement(MarkupElement.HorizontalLine) .addElement(new HeadingElement("Query String: ", +2)) .addElement(stmt.toString()) .addElement(MarkupElement.HorizontalLine) .addElement("I examined the values: ") .addElement(ul) .addElement(MarkupElement.HorizontalLine) .addElement("Max salary of those employees examined is: ") .addElement(MarkupElement.Break)

WebLogic JDBC プログラマーズ ガイ ド 6-27

Page 162: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

.addElement("Name: ") .addElement(new BoldElement(name)) .addElement(MarkupElement.Break) .addElement("ID: ") .addElement(new BoldElement(id)) .addElement(MarkupElement.Break) .addElement("Salary: ") .addElement(new BoldElement(salstr)) .addElement(MarkupElement.HorizontalLine);

hp.output();

// QueryDataSet を閉じる qds.close(); } catch (Exception e) { // 例外を処理する } finally { // 接続を閉じる try {conn.close();} catch (Exception mye) { // 例外を処理する } } }}

各 Statement および各 DataSet を使用後に閉じているこ と、および finally ブロッ クで接続を閉じているこ とに注意してください。

SelectStmt オブジェク トを使用したクエリの作成

以下の手順では、 SelectStmt オブジェ ク ト を使用してクエ リ を作成する方法について説明します。

手順 1. SelectStmt パラメータの設定

TableDataSet を作成する と、 TableDataSet は空の SelectStmt に関連付けられます。 その後、 その SelectStmt を変更してクエ リ を作成できます。 次のサンプルでは、 接続 conn は既に作成済みです。 こ こでは TableDataSet の SelectStmt にアクセスする方法を示します。

TableDataSet tds = new TableDataSet(conn, "empdemo"); SelectStmt sql = tds.selectStmt();

6-28 WebLogic JDBC プログラマーズ ガイ ド

Page 163: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

こ こで SelectStmt オブジェ ク ト用のパラ メータを設定します。 次のサンプルでは、 各フ ィールドの最初の引数が属性名、 2 番目の引数がエリ アスです。 このクエ リは、 収入が $2000 未満のすべての従業員に関する情報を取り出します。

sql.field("empno", "Emp ID") .field("ename", "Emp Name") .field("sal", "Emp Salary") .from("empdemo") .where("sal < 2000") .order("empno");

手順 2. QBE を使用したパラメータの修正

SelectStmt オブジェク ト でも Query-by-example 機能を提供します。Query-by-example または QBE は、 カラム、演算子、 値とい う形式の句を使用して、 データを取得するためのパラ メータを作成します。 たとえば、 「empno = 8000」 は、 employee フ ィールド値 (「empno」、エリアスは「Emp ID」) が 8000 に等しい、 1 つまたは複数のテーブル内のすべての行を選択できる Query-by-example の句です。

さ らに、 次のサンプルに示すよ うに、 SelectStmt ク ラスの setQbe() メ ソ ッ ドおよび addQbe() メ ソ ッ ドを使用するこ とによって、 データ選択用のパラ メータを定義する こ と もできます。 これらのメ ソ ッ ドでは、 Select 文の作成にベンダ固有の QBE 構文を使用できます。

sql.setQbe("ename", "MURPHY") .addUnquotedQbe("empno", "8000");

パラ メータの定義が終わったら、 2 番目のチュート リ アルで実施したよ うに、fetchRecords() メ ソ ッ ドを使用して DataSet にデータを取り込みます。

SQL 文を使用した DBMS データの変更

以下の手順では、 SQL 文を使用して DBMS データを変更する方法について説明します。

WebLogic JDBC プログラマーズ ガイ ド 6-29

Page 164: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

手順 1. SQL 文の記述

変更するデータを取り出してその変更内容を リモート DBMS に保存する必要がある場合には、 TableDataSet にそのデータを取り出さなければな り ません。QueryDataSet に取り出しても変更を保存できないからです。

ほとんどの dbKona 操作同様、Properties オブジェ ク トおよび Driver オブジェク ト を作成して Connection をインスタンス化する こ とによって操作を開始する必要があ り ます。

手順 1. SQL 文の記述 String insert = "insert into empdemo(empno, " + "ename, job, deptno) values " + "(8000, 'MURPHY', 'SALESMAN', 10)";

2 番目の SQL 文は、 名前 「Murphy」 を 「Smith」 に変更し、 ジ ョブ ステータスを 「Salesman」 から 「Manager」 に変更するものです。

String update = "update empdemo set ename = 'SMITH', " + "job = 'MANAGER' " + "where empno = 8000";

3 番目の SQL 文は、 データベースから このレコードを削除するものです。

String delete = "delete from empdemo where empno = 8000";

手順 2. 各 SQL 文の実行

まず、 テーブルのスナップシ ョ ッ ト を TableDataSet に保存します。 その後、各 TableDataSet を検査して実行結果が予想どおりであるかど うかを検証します。TableDataSet は実行されたクエ リの結果によってインスタンス化される とい うこ とに注意してください。

Statement stmt1 = conn.createStatement(); stmt1.execute(insert);

TableDataSet ds1 = new TableDataSet(conn, "emp"); ds1.where("empno = 8000"); ds1.fetchRecords();

6-30 WebLogic JDBC プログラマーズ ガイ ド

Page 165: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

TableDataSet に関連付けられたメ ソ ッ ドを使用する と、 SQL の WHERE 句や ORDER BY 句を指定した り、 QBE 文を設定および追加した りできます。 このサンプルでは、 各文を実行して execute() メ ソ ッ ドの結果を調べた後に、TableDataSet を使用してデータベース テーブル 「emp」 を再クエ リ していま

す。 「WHERE」 句を使用して、 テーブル内のレコードを従業員番号が 8000 のレコードに限定しています。

UPDATE 文および DELETE 文に対して execute() メ ソ ッ ドを繰 り返して、 さ らに 2 つの TableDataSet、 ds2 および ds3 に結果を格納します。

手順 3. htmlKona を使用した結果の表示 ServletPage hp = new ServletPage(); hp.getHead() .addElement(new TitleElement("Modifying data with SQL")); hp.getBody() .addElement(MarkupElement.HorizontalLine) .addElement(new TableElement(tds)) .addElement(MarkupElement.HorizontalLine) .addElement(new HeadingElement("Query results afer INSERT", 2)) .addElement(new HeadingElement("SQL: ", 3)) .addElement(new LiteralElement(insert)) .addElement(new HeadingElement("Result: ", 3)) .addElement(new LiteralElement(ds1)) .addElement(MarkupElement.HorizontalLine) .addElement(new HeadingElement("Query results after UPDATE", 2)) .addElement(new HeadingElement("SQL: ", 3)) .addElement(new LiteralElement(update)) .addElement(new HeadingElement("Result: ", 3)) .addElement(new LiteralElement(ds2)) .addElement(MarkupElement.HorizontalLine) .addElement(new HeadingElement("Query results after DELETE", 2)) .addElement(new HeadingElement("SQL: ", 3)) .addElement(new LiteralElement(delete)) .addElement(new HeadingElement("Result: ", 3)) .addElement(new LiteralElement(ds3)) .addElement(MarkupElement.HorizontalLine); hp.output();

コードのま とめ

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.sql.*;import java.util.*;import weblogic.db.jdbc.*;

WebLogic JDBC プログラマーズ ガイ ド 6-31

Page 166: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

import weblogic.html.*;

public class InsertUpdateDelete extends HttpServlet {

public synchronized void service(HttpServletRequest req, HttpServletResponse res) throws IOException { Connection conn = null; try { res.setStatus(HttpServletResponse.SC_OK); res.setContentType("text/html");

Properties props = new java.util.Properties(); props.put("user", "scott"); props.put("password", "tiger"); props.put("server", "DEMO");

Driver myDriver = (Driver) Class.forName("weblogic.jdbc.oci.Driver").newInstance(); conn = myDriver.connect("jdbc:weblogic:oracle", props); conn.setAutoCommit(false);

// 関連付けられた SelectStmt を持つ TableDataSet を作成する TableDataSet tds = new TableDataSet(conn, "empdemo"); SelectStmt sql = tds.selectStmt(); sql.field("empno", "Emp ID") .field("ename", "Emp Name") .field("sal", "Emp Salary") .from("empdemo") .where("sal < 2000") .order("empno"); sql.setQbe("ename", "MURPHY") .addUnquotedQbe("empno", "8000"); tds.fetchRecords();

String insert = "insert into empdemo(empno, " + "ename, job, deptno) values " + "(8000, 'MURPHY', 'SALESMAN', 10)";

// 文を作成して、実行する Statement stmt1 = conn.createStatement(); stmt1.execute(insert); stmt1.close();

// 結果を検証する TableDataSet ds1 = new TableDataSet(conn, "empdemo"); ds1.where("empno = 8000"); ds1.fetchRecords();

// 文を作成して、実行する String update = "update empdemo set ename = 'SMITH', " + "job = 'MANAGER' " + "where empno = 8000";

6-32 WebLogic JDBC プログラマーズ ガイ ド

Page 167: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

Statement stmt2 = conn.createStatement(); stmt2.execute(insert); stmt2.close();

// 結果を検証する TableDataSet ds2 = new TableDataSet(conn, "empdemo"); ds2.where("empno = 8000"); ds2.fetchRecords();

// 文を作成して、実行する String delete = "delete from empdemo where empno = 8000";

Statement stmt3 = conn.createStatement(); stmt3.execute(insert); stmt3.close();

// 結果を検証する TableDataSet ds3 = new TableDataSet(conn, "empdemo"); ds3.where("empno = 8000"); ds3.fetchRecords();

// 結果を表示するサーブレット ページを作成する ServletPage hp = new ServletPage(); hp.getHead() .addElement(new TitleElement("Modifying data with SQL")); hp.getBody() .addElement(MarkupElement.HorizontalRule) .addElement(new HeadingElement("Original table", 2)) .addElement(new TableElement(tds)) .addElement(MarkupElement.HorizontalRule) .addElement(new HeadingElement("Query results afer INSERT", 2)) .addElement(new HeadingElement("SQL: ", 3)) .addElement(new LiteralElement(insert)) .addElement(new HeadingElement("Result: ", 3)) .addElement(new LiteralElement(ds1)) .addElement(MarkupElement.HorizontalRule) .addElement(new HeadingElement("Query results after UPDATE", 2)) .addElement(new HeadingElement("SQL: ", 3)) .addElement(new LiteralElement(update)) .addElement(new HeadingElement("Result: ", 3)) .addElement(new LiteralElement(ds2)) .addElement(MarkupElement.HorizontalRule) .addElement(new HeadingElement("Query results after DELETE", 2)) .addElement(new HeadingElement("SQL: ", 3)) .addElement(new LiteralElement(delete)) .addElement(new HeadingElement("Result: ", 3)) .addElement(new LiteralElement(ds3)) .addElement(MarkupElement.HorizontalRule);

hp.output();

tds.close();

WebLogic JDBC プログラマーズ ガイ ド 6-33

Page 168: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

ds1.close(); ds2.close(); ds3.close(); } catch (Exception e) { // 例外を処理する

} // 常に、finally ブロック内で接続を閉じる finally { conn.close(); } }}

KeyDef を使用した DBMS データの変更

KeyDef オブジェ ク ト を使用して、 リモート DBMS に対するデータの削除および挿入用のキーを取得します。KeyDef は、「WHERE KeyDef attribute1 = value1 and KeyDef attribute2 = value2」 とい うパターンに従って、 更新および削除を行う場合に文と同じよ うに機能します。

最初の手順は、 DBMS への接続を確立する こ とです。 こ こで示すサンプルでは、最初のチュート リ アルで作成した Connection オブジェク ト conn を使用します。また、 使用するデータベース テーブルは、 empno、 ename、 job、 および deptno の各フ ィールドを持つ Employee テーブル ( 「empdemo」 ) です。 実行する クエ リは、 テーブル empdemo の内容をすべて取り出します。

手順 1. KeyDef とその属性の作成

このチュート リ アルで挿入および削除用に作成する KeyDef オブジェク トには、データベースの empno カラムとい う 1 つの属性があ り ます。 この属性を持った KeyDef を作成する と、 WHERE empno = および保存する各レコードの empno に割り当てられている特定の値、 とい うパターンに従ったキーが設定されます。

KeyDef オブジェ ク トは、 次のサンプルに示すよ うに、 KeyDef ク ラス内で作成されます。

KeyDef key = new KeyDef().addAttrib("empno");

6-34 WebLogic JDBC プログラマーズ ガイ ド

Page 169: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

Oracle データベースを使用している場合は、 属性 「ROWID」 を持った KeyDef を作成して、 次のサンプルのよ うにこの Oracle キーで挿入および削除を行う こ とができます。

KeyDef key = new KeyDef().addAttrib("ROWID");

手順 2. KeyDef を使用した TableDataSet の作成

次の例では、 クエ リの結果を使用して TableDataSet を作成します。引数と して Connection オブジェ ク ト、 DBMS テーブル名、 および KeyDef を取る TableDataSet コンス ト ラ ク タを使用します。

TableDataSet tds = new TableDataSet(conn, "empdemo", key);

KeyDef は、データに対して行うすべての変更の参照にな り ます。TableDataSet を保存するたびに、 KeyDef 属性の値 (および SQL UPDATE、 INSERT、 DELETE の各操作に設定された制限 ) に基づいて、 データベースのデータを変更します。 このサンプルでは、 属性は従業員番号 ("empno") です。

Oracle データベースを使用し、属性 ROWID を KeyDef に追加した場合は、次のように挿入および削除用の TableDataSet を作成できます。

KeyDef key = new KeyDef().addAttrib("ROWID"); TableDataSet tds = new TableDataSet(conn, "empdemo", "ROWID, dept", key); tds.where("empno < 100"); tds.fetchRecords();

手順 3. TableDataSet へのレコードの挿入

TableDataSet のコンテキス ト で新しい Record オブジェク ト を作成できます。新しいオブジェ ク トは、 TableDataSet ク ラスの addRecord() メ ソ ッ ドを使用して TableDataSet に追加されます。 レコードを追加する と、 Record ク ラスの setValue() メ ソ ッ ドを使用して、 レコードの各フ ィールドの値を設定できます。 レコードをデータベース (KeyDef フ ィールド ) に保存するには、 新しい Record で少なく と も 1 つの値を設定する必要があ り ます。

Record newrec = tds.addRecord(); newrec.setValue("empno", 8000) .setValue("ename", "MURPHY") .setValue("job", "SALESMAN")

WebLogic JDBC プログラマーズ ガイ ド 6-35

Page 170: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

.setValue("deptno", 10); String insert = newrec.getSaveString(); tds.save();

Record ク ラスの getSaveString() メ ソ ッ ドは、 Record をデータベースに保存する場合に使用される、 SQL 文字列 (SQL の UPDATE 文、DELETE 文、または

INSERT 文 ) を返します。 この文字列をオブジェ ク トに保存し、 後でそのオブジェク ト を表示させるこ とで、 挿入操作が実際どのよ うに実行されたのかを確認

できます。

手順 4. TableDataSet でのレコードの更新

setValue() メ ソ ッ ドを使用して Record を更新するこ と もできます。 次の例では、 前の手順で作成したレコードを変更します。 次の例では、 前の手順で作成し

たレコードを変更します。

newrec.setValue("ename", "SMITH") .setValue("job", "MANAGER"); String update = newrec.getSaveString(); tds.save();

手順 5. TableDataSet からのレコードの削除

Record ク ラスの markToBeDeleted() メ ソ ッ ドを使用して、 TableDataSet のレコードに、 削除するためのマークを付けるこ とができます ( または、unmarkToBeDeleted() メ ソ ッ ドでマークを解除できます )。 たとえば、 作成したばかりのレコードを削除するには、 次のよ うに、 削除するレコードにマークを

付けます。

newrec.markToBeDeleted(); String delete = newrec.getSaveString(); tds.save();

削除するよ うにマークが付けられたレコードは、 save() メ ソ ッ ドを実行するか、または TableDataSet ク ラスの removeDeletedRecords() メ ソ ッ ドを実行するまでは TableDataSet から削除されません。

(removeDeletedRecords() メ ソ ッ ドによ り ) TableDataSet から削除されたが、まだデータベースからは削除されていないレコードは、 ゾンビ状態にな り ます。

レコードがゾンビ状態かど うかは、次のよ うに Record ク ラスの isAZombie() メソ ッ ドを使用して確認できます。

6-36 WebLogic JDBC プログラマーズ ガイ ド

Page 171: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

if (!newrec.isAZombie()) { . . . }

手順 6. TableDataSet の保存の詳細

Record または TableDataset を保存する と、 データベースにデータが効率的に保存されます。 dbKona では選択的に変更が行われます。 つま り、 変更されたデータのみが保存されます。 TableDataSet 内のレコードを挿入、 更新、 および削除しても、 Record.save() メ ソ ッ ドまたは TableDataSet.save() メ ソ ッ ドが実行されるまでは TableDataSet 内のデータだけが影響を受けます。

保存前の Record 状態の確認

Record ク ラスのメ ソ ッ ドの中には、 save() を実行する前に Record の状態に関する情報を返すメ ソ ッ ドがあ り ます。 以下にその一部を示します。

needsToBeSaved() および recordIsClean()needsToBeSaved() メ ソ ッ ドを使用する と、 Record を保存する必要があるかど うかを確認できます。 つま り、 Record が取り出されてから、または、 前回保存されてから、 変更されたかど うかを確認できます。

recordIsClean() メ ソ ッ ドは、 Record にある Value のいずれかを保存する必要があるかど うかを確認するために使用します。 このメ ソ ッ ド

は、 スケジュールされたデータベース操作が挿入、 更新、 または削除の

いずれであるかに関係なく、 Record が変更されている状態かど うかを確認するだけです。 操作のタイプ (挿入 /更新 /削除 ) にかかわらず、needsToBeSaved() メ ソ ッ ドを save() メ ソ ッ ドの後で実行する と、false が返されます。

valueIsClean(int) Record 内の特定のインデッ クス位置にある Value を保存する必要があるかど うかを確認します。 このメ ソ ッ ドは、 Value のインデッ クス位置を引数に取り ます。

toBeSavedWith...() toBeSavedWithDelete()、 toBeSavedWithInsert()、 および toBeSavedWithUpdate() の各メ ソ ッ ドを使用する と、 特定の SQL アクシ ョ ンと共に、 Record がどのよ うに保存されるかを確認できます。 これらのメ ソ ッ ドのセマンティ ク スは、 「この行が変更されている、 また

WebLogic JDBC プログラマーズ ガイ ド 6-37

Page 172: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

は変更される場合、 TableDataSet を保存する と きにどのよ う なアクシ ョ ンが行われるか」 とい う問いに対する答えと同じです。

行が DBMS への保存対象かど うかを知るには、 isClean() メ ソ ッ ド と needsToBeSaved() メ ソ ッ ドを使用します。

Record または TableDataSet を変更する場合は、 いずれかのク ラスの save() メ ソ ッ ドを使用して、 その変更内容をデータベースに保存します。 上記の手順で

は、 各 ト ランザクシ ョ ンの後で次のよ うに TableDataSet を保存しました。

tds.save();

手順 7. 変更内容の検証

レコードを 1 つだけ取り出す場合のサンプルを以下に示します。 この方法は、 1 レコードの変更内容を検証するには、 効率的な方法です。 このサンプルでは、

query-by-example (QBE) の句を使用して TableDataSet から関心のあるレコードだけを取り出しています。

TableDataSet tds2 = new TableDataSet(conn, "empdemo"); tds2.where("empno = 8000") .fetchRecords();

最後の手順と して、 各手順の後、 および各 save() メ ソ ッ ドの後に作成した「insert」、 「update」、 および 「delete」 の各文字列の後にクエ リ結果を表示で

きます。 結果を表示する htmlKona の使用方法については、 前のチュート リ アルの 「コードのま とめ」 を参照して ください。

DataSet の操作を終了したら、 次のよ うに close() メ ソ ッ ドを使用して各 DataSet を閉じます。

tds.close(); tds2.close();

コードのまとめ

次に、 この節で説明した概念を使用するサンプル コードを示します。

package tutorial.dbkona;

import weblogic.db.jdbc.*;import java.sql.*;

6-38 WebLogic JDBC プログラマーズ ガイ ド

Page 173: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

import java.Properties;

public class rowid {

public static void main(String[] argv) throws Exception { Driver myDriver = (Driver) Class.forName("weblogic.jdbc.oci.Driver").newInstance(); conn = myDriver.connect("jdbc:weblogic:oracle:DEMO", "scott", "tiger");

// ここで、レコードを 100 個挿入する TableDataSet ts1 = new TableDataSet(conn, "empdemo"); for (int i = 1; i <= 100; i++) { Record rec = ts1.addRecord(); rec.setValue("empid", i) .setValue("name", "Person " + i) .setValue("dept", i); }

// 新しいレコードを保存する。dbKona は選択的に保存を行う // つまり、TableDataSet 内の変更されたレコードだけを保存し、 // ネットワーク トラフィックとサーバ呼び出しを削減する System.out.println("Inserting " + ts1.size() + " records."); ts1.save(); // 処理が完了したので DataSet を閉じる ts1.close();

// 更新および削除用の KeyDef を定義する // ROWID は Oracle 固有のフィールドで、更新および削除用の // 主キーとして機能することができる KeyDef key = new KeyDef().addAttrib("ROWID");

// 最初に追加した 100 個のレコードを更新する TableDataSet ts2 = new TableDataSet(conn, "empdemo", "ROWID, dept", key); ts2.where("empid <= 100"); ts2.fetchRecords();

for (int i = 1; i <= ts2.size(); i++) { Record rec = ts2.getRecord(i); rec.setValue("dept", i + rec.getValue("dept").asInt()); }

// 更新されたレコードを保存する System.out.println("Update " + ts2.size() + " records."); ts2.save();

// 同じ 100 個のレコードを削除する ts2.reset(); ts2.fetchRecords();

WebLogic JDBC プログラマーズ ガイ ド 6-39

Page 174: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

for (int i = 0; i < ts2.size(); i++) { Record rec = ts2.getRecord(i); rec.markToBeDeleted(); }

// レコードをサーバから削除する System.out.println("Delete " + ts2.size() + " records."); ts2.save();

// DataSet、ResultSet、および Statement は、 // 操作が終わったら必ず閉じる必要がある ts2.close();

// 最後に、必ず接続を閉じる conn.close(); } }

dbKona での JDBC PreparedStatement の使い方

dbKona では構文的に正しい SQL 文が作成されるため、 ベンダ固有の SQL の記述方法について知識がそれほど必要ないとい う点で便利です。 しかし、 dbKona で JDBC の PreparedStatement を使用できる場合もあ り ます。

JDBC PreparedStatement は、 複数回使用される SQL 構文をあらかじめコンパイルする場合に使用されます。 PreparedStatement のパラ メータは、PreparedStatement.clearParameters() を呼び出すこ とで消去できます。

PreparedStatment オブジェ ク トは、 JDBC Connection ク ラス ( これまでのサンプルで conn とい う名前で使用されていたオブジェ ク ト ) の preparedStatement() メ ソ ッ ドを使用して作成されます。 次のサンプルでは、PreparedStatement を作成してそれをループの中で実行しています。 この文には、従業員 ID、名前、 および部署とい う 3 つの入力 (IN) パラ メータがあ り ます。このサンプルでは、 100 人の従業員をテーブルに追加します。

String inssql = "insert into empdemo(empid, " + "name, dept) values (?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(inssql);

for (int i = 1; i <= 100; i++) { pstmt.setInt(1, i); pstmt.setString(2, "Person " + i); pstmt.setInt(3, i); pstmt.executeUpdate(); }

6-40 WebLogic JDBC プログラマーズ ガイ ド

Page 175: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

pstmt.close();

作業が終了したら、 Statement オブジェク ト または PreparedStatement オブジェ ク ト を必ず閉じます。

SQL を意識せずに同じ タスクを dbKona で実行する こ と もできます。 この場合、KeyDef を使用して、 更新または削除するフ ィールドを設定します。 詳細については、 チュート リ アルの 6-34 ページの 「KeyDef を使用した DBMS データの変更」 を参照して ください。

dbKona でのストアド プロシージャの使い方

固有のタスク ( システムまたはベンダに依存しないタスクである場合が多い ) を実行できる、 リモート マシンに格納されたプロシージャや関数にアクセスして、dbKona の能力を向上させる こ とができます。 ス ト アド プロシージャおよび関数を使用するには、dbKona の Java アプリ ケーシ ョ ン と リモート マシンの間でリ クエス ト がどのよ うに受け渡し されるかを理解する必要があ り ます。 ス ト アド プロシージャまたは関数を実行する と、 入力されたパラ メータの値が変更されま

す。 また、 実行が成功したか失敗したかを示す値も返されます。

dbKona アプ リ ケーシ ョ ンでの最初の手順は、 DBMS に接続するこ とです。 こ こで示すサンプルでは、 最初のチュート リ アルで作成した同じ Connection オブジェ ク ト conn を使用します。

手順 1. ストアド プロシージャの作成

DBMS の CREATE の呼び出しを実行するこ とによ り、 Statement オブジェ ク ト を使用してス ト ア ド プロシージャを作成します。 次の例では、 パラ メータ「field1」 が integer 型の入出力と して宣言されます。

Statement stmtl = conn.createStatement(); stmtl.execute("CREATE OR REPLACE PROCEDURE proc_squareInt " + "(field1 IN OUT INTEGER, " + "field2 OUT INTEGER) IS " + "BEGIN field1 := field1 * field1; " + "field2 := field1 * 3; " + "END proc_squareInt;"); stmtl.close();

WebLogic JDBC プログラマーズ ガイ ド 6-41

Page 176: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

手順 2. パラメータの設定

JDBC Connection ク ラスの prepareCall() メ ソ ッ ド

次のサンプルでは、 setInt() メ ソ ッ ドを使用して第 1 パラ メータに整数 「3」 を設定しています。 第 2 パラ メータは、 java.sql.Types.INTEGER 型の OUT パラメータ と して登録します。 最後にス ト アド プロシージャを実行します。

CallableStatement cstmt = conn.prepareCall("BEGIN proc_squareInt(?, ?):END;"); cstmt.setInt(1, 3); cstmt.registerOutParameter(2, java.sql.Types.INTEGER); cstmt.execute();

ネイテ ィブ Oracle では SQL 文中で 「?」 値のバインディ ングをサポート していません。 その代わ り 、 「:1」、 「:2」 などを使用します。 dbKona では、 SQL でどちら も使用できます。

手順 3. 結果の検査

最も単純なメ ソ ッ ドを使用して結果を画面に出力します。

System.out.println(cstmt.getInt(1)); System.out.println(cstmt.getInt(2)); cstmt.close();

画像およびオーディオ用バイ ト配列の使い方

サイズの大きいバイナ リ オブジェク ト ファ イルを、 バイ ト配列を使用してデータベースから取り出した りデータベースに保存した りできます。 データベースで

データを管理する こ との多いマルチメディ ア アプリ ケーシ ョ ンでは、 画像ファイルやサウンド ファ イルのよ う なサイズの大きいデータを処理する必要があ ります。

こ こでは、 htmlKona の便利さ も理解できます。 htmlKona を使用すれば、dbKona を使って取り出したデータベース データを HTML 環境に簡単に統合できます。 このチュー ト リ アルで使用するサンプルは、 htmlKona に依存しています。

6-42 WebLogic JDBC プログラマーズ ガイ ド

Page 177: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

手順 1. 画像データの検索と表示

次のサンプルでは、 htmlKona フォームで送信され、 Netscape サーバで動作しているサーバサイ ド Java を使用して、 ユーザが表示する画像の名前を取り出しています。 その画像名を使って 「imagetable」 とい う名前のデータベース テーブルの内容をクエ リ し、 その結果得られる最初のレコードを取得します。

SelectStmt オブジェク ト を使用して QBE によって SQL クエ リ を作成しています。

画像レコードを取り出した後、 HTML ページのタイプを画像タイプに設定し、それから画像データをバイ ト配列 (byte[]) と して取り出して htmlKona ImagePage に入れます。 これによ り、 ブラウザに画像が表示されます。

if (iname != null) { // 画像をデータベースから取り出す TableDataSet tds = new TableDataSet(conn, "imagetable"); tds.selectStmt().setQbe("name", iname); tds.fetchRecords();

Record rec = tds.getRecord(0);

this.returnNormalResponse("image/" + rec.getValue("type").asString());

ImagePage hp = new ImagePage(rec.getValue("data").asBytes()); hp.output(getOutputStream()); }

手順 2. データベースへの画像の挿入

dbKona を使用してデータベースに画像ファ イルを挿入するこ と もできます。 次に、 データベースにタイプ配列オブジェク ト と して 2 つの画像を追加するコードの抜粋を示します。 この処理は、 各画像の Record を TableDataSet へ追加し、Record の Values を設定して、 TableDataSet を保存する こ とによ り行われます。

TableDataSet tds = new TableDataSet(conn, "imagetable"); Record rec = tds.addRecord(); rec.setValue("name", "vars") .setValue("type", "gif") .setValue("data", "c:/html/api/images/variables.gif");

rec = tds.addRecord(); rec.setValue("name", "excepts")

WebLogic JDBC プログラマーズ ガイ ド 6-43

Page 178: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

.setValue("type", "jpeg") .setValue("data", "c:/html/api/images/exception-index.jpg");

tds.save(); tds.close();

Oracle シーケンス用の dbKona の使い方

dbKona では、 Oracle シーケンスの機能にアクセスするためのラ ッパー、 つまり、 Sequence オブジェ ク トが用意されています。 Oracle シーケンスは、 シーケンスに開始番号と インク リ メ ン ト間隔 (増分 ) を指定するこ とによって dbKona で作成されます。

以下の節では、 Oracle シーケンス用の dbKona の使い方について説明します。

手順 1. dbKona Sequence オブジェク トの作成

JDBC Connection と Oracle サーバに既に存在するシーケンスの名前を使用して、Sequence オブジェ ク ト を作成します。 次に例を示します。

Sequence seq = new Sequence(conn, "mysequence");

手順 2. dbKona からの Oracle サーバのシーケンスの作成と破棄

Oracle シーケンスが存在しない場合は、 dbKona から Sequence.create() メソ ッ ドを使用して作成できます。 このメ ソ ッ ドは、 JDBC Connection、 作成するシーケンスの名前、 インク リ メ ン ト間隔、 および開始点の 4 つの引数を取り ます。 次のサンプルでは、 開始点が 1000 でインク リ メ ン ト間隔が 1 の Oracle シーケンス 「mysequence」 を作成しています。

Sequence.create(conn, "mysequence", 1, 1000);

次のよ うに Oracle シーケンスを dbKona から削除できます。

Sequence.drop(conn, "mysequence");

6-44 WebLogic JDBC プログラマーズ ガイ ド

Page 179: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

dbKona の実装

手順 3. Sequence の使い方

Sequence オブジェク ト を作成したら、 このオブジェ ク ト を使用して自動的にインク リ メ ン トする int を生成できます。 たとえば、 レコードをテーブルに追加するたびに自動的にインク リ メ ン トするキーを設定できます。 nextValue() メソ ッ ドを使用して、 Sequence の 次のインク リ メ ン ト である int を返します。 次に例を示します。

TableDataSet tds = new TableDataSet(conn, "empdemo"); for (int i = 1; i <= 10; i++) { Record rec = tds.addRecord(); rec.setValue("empno", seq.nextValue()); }

currentValue() メ ソ ッ ドを使用して、 Sequence の現在の値を確認できます。ただし、 このメ ソ ッ ドは、 nextValue() メ ソ ッ ドを少な く と も一度呼び出した後でなければ呼び出せません。

System.out.println("Records 1000-" + seq.currentValue() + " added.");

コードのまとめ

次に、 この節で説明した概念の使い方を示すサンプル コードを示します。 最初に、 Oracle サーバから 「testseq」 とい う名前のシーケンスを削除して、 その名前のシーケンスが既に 1 つ存在している場合に、 同じ名前のシーケンスを作成してもエラーが出力されないよ うにしています。 その後、 サーバ上にシーケンスを

作成し、 その名前で dbKona Sequence オブジェ ク ト を作成しています。

package tutorial.dbkona;

import weblogic.db.jdbc.*;import weblogic.db.jdbc.oracle.*;import java.sql.*;import java.Properties;

public class sequences {

public static void main(String[] argv) throws Exception { Connection conn = null;Driver myDriver = (Driver) Class.forName("weblogic.jdbc.oci.Driver").newInstance(); conn = myDriver.connect("jdbc:weblogic:oracle:DEMO",

WebLogic JDBC プログラマーズ ガイ ド 6-45

Page 180: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

6 dbKona (非推奨 ) の使い方

"scott", "tiger");

// シーケンスがサーバ上に既に存在する場合には、それを削除する try {Sequence.drop(conn, "testseq");} catch (Exception e) {;}

// 新しいシーケンスをサーバ上に作成する Sequence.create(conn, "testseq", 1, 1);

Sequence seq = new Sequence(conn, "testseq");

// ループでシーケンス内の次の値を出力する for (int i = 1; i <= 10; i++) { System.out.println(seq.nextValue()); }

System.out.println(seq.currentValue());

// シーケンスをサーバからドロップし、 // Sequence オブジェクトを閉じる Sequence.drop(conn, "testseq"); seq.close();

// 最後に接続を閉じる conn.close(); }}

6-46 WebLogic JDBC プログラマーズ ガイ ド

Page 181: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

7 JDBC 接続のテスト と ト ラブルシューティング

以下で、 JDBC 接続のテス ト 、 モニタ、 およびト ラブルシューティ ングの方法について説明します。

� 7-1 ページの 「JDBC 接続のモニタ」

� 7-2 ページの 「コマンド ラ インからの DBMS 接続の有効性の検証」

� 7-4 ページの 「JDBC の ト ラブルシューティ ング」

� 7-8 ページの 「UNIX での共有ライブラ リに関連する問題の ト ラブルシューティ ング」

JDBC 接続のモニタ

Administration Console では、 各サブコンポーネン ト (接続プール、 マルチプール、 および DataSource) の接続パラ メータをモニタするためのテーブルと統計を表示できます。

JDBCConnectionPoolRuntimeMBean を使用して、 接続プールの統計にプログラムでアクセスするこ と もできます。 『WebLogic Server パートナーズ ガイ ド』 および WebLogic の Javadoc を参照して ください。 この MBean は、 Administration Console に統計を取り込む API と同じ ものです。 接続のモニタの詳細については、 「WebLogic Server ド メ インのモニタ」 および 「JDBC 接続の管理」 を参照して ください。

MBean の使い方については、 『WebLogic JMX Service プログラマーズ ガイ ド』を参照して ください。

WebLogic JDBC プログラマーズ ガイ ド 7-1

Page 182: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

7 JDBC 接続のテスト と ト ラブルシューテ ィ ング

コマンドラインからの DBMS 接続の有効性の検証

WebLogic Server をインス トールした後、 utils.dbping BEA ユーティ リ テ ィ を使用して 2 層 JDBC データベース接続をテス ト します。 utils.dbping ユーティリ テ ィ を使用するには、 JDBC ド ラ イバのインス トールを完了する必要があ り ます。 以下の作業を必ず行って ください。

� Type2 JDBC ド ラ イバ (WebLogic jDriver for Oracle など ) の場合は、 PATH (Windows) あるいは共有ライブラ リ パスまたはロード ライブラ リ パス (Unix) で DBMS 提供のク ラ イアン ト と BEA 提供のネイティブ ライブラ リの両方を設定します。

� すべてのド ライバについて、 CLASSPATH で JDBC ド ラ イバのク ラスを設定します。

� BEA WebLogic jDriver JDBC ド ラ イバのコンフ ィグレーシ ョ ン手順については、 以下を参照して ください。

� 「WebLogic jDriver for Oracle のコンフ ィグレーシ ョ ン」

� 「WebLogic jDriver for Microsoft SQL Server の使い方」

utils.dbping ユーティ リ テ ィ を使用する と、 Java とデータベースの間で接続が可能なこ と を確認できます。 dbping ユーテ ィ リ テ ィは、 WebLogic jDriver for Oracle などの WebLogic 2 層 JDBC ド ラ イバを使用した 2 層接続 のテス ト にのみ使用します。

構文

$ java utils.dbping DBMS user password DB

引数

DBMS

使用。 ORACLE または MSSQLSERVER4

7-2 WebLogic JDBC プログラマーズ ガイ ド

Page 183: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

コマン ド ラインからの DBMS 接続の有効性の検証

user

データベース ログインに使用する有効なユーザ名です。 SQL Server では isql、Oracle では sqlplus で使用する ものと同じ値と形式を使用します。

password

ユーザの有効なパスワード。 isql、 または sqlplus で使用するものと同じ値と形式を使用します。

DB

データベースの名前。 形式は、 データベース とバージ ョ ンに応じて異な り ます。

isql、 または sqlplus で使用するものと同じ値と形式を使用します。MSSQLServer4 などの Type 4 ド ラ イバの場合は、 環境にアクセスできないので、サーバを見つけるには補足情報が必要です。

サンプル

Oracle

sqlplus で使用する同じ値を利用し、Java から WebLogic jDriver for Oracle 経由で Oracle に接続します。

SQLNet を使用しない ( かつ ORACLE_HOME と ORACLE_SID が定義されている ) 場合は、 次の例に従います。

$ java utils.dbping ORACLE scott tiger

SQLNet V2 を使用する場合は、 次の例に従います。

$ java utils.dbping ORACLE scott tiger TNS_alias

TNS_alias は、 ローカルの tnsnames.ora ファ イルで定義されているエ リ アスです。

WebLogic JDBC プログラマーズ ガイ ド 7-3

Page 184: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

7 JDBC 接続のテスト と ト ラブルシューテ ィ ング

Microsoft SQL Server (Type 4 ド ライバ )

Java から WebLogic jDriver for Microsoft SQL Server 経由で Microsoft SQL Server に接続するには、 user と password で isql の場合と同じ値を使用します。 ただし、 SQL Server を指定するには、 SQL Server が動作しているコンピュータの名前と SQL Server が リ スンしている TCP/IP ポート を指定します。 コンピュータ名が mars で、 リ スン ポートが 1433 の SQL Server にログインするには、 次のよ うに入力します。

$ java utils.dbping MSSQLSERVER4 sa secret mars:1433

1433 は Microsoft SQL Server のデフォル ト ポート番号なので、 この例の「:1433」 は省略してもかまいません。 デフォル ト では、 Microsoft SQL Server は TCP/IP 接続を リ スンしないこ とがあ り ます。 DBA で リ スンするよ うにコンフ ィグレーシ ョ ンできます。

JDBC のト ラブルシューティング

以降の節では、 ト ラブルシューテ ィングの ヒン ト を紹介します。

JDBC 接続

WebLogic への接続をテス トする場合は、 WebLogic Server のログを調べて ください。 デフォル ト では、 ログは次のフォーマッ トでファ イルに記録されます。

domain\server\server.log

こ こで domain はド メ インのルート フォルダ、 server はサーバの名前です。サーバ名は、 フォルダ名やログ ファ イル名で使用されます。

Windows

.dll のロードが失敗したこ とを示すエラー メ ッセージが表示された場合は、PATH で 32 ビ ッ ト データベース関連の .dll を指定してください。

7-4 WebLogic JDBC プログラマーズ ガイ ド

Page 185: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

JDBC のト ラブルシューテ ィ ング

UNIX

.so または .sl のロードが失敗したこ とを示すエラー メ ッセージが表示された場合は、 LD_LIBRARY_PATH または SHLIB_PATH で 32 ビ ッ ト データベース関連のファ イルを指定して ください。

コードセッ トのサポート

WebLogic では、 Oracle のコードセッ ト がサポート されています。 ただし、 次のこ とに注意して ください。

� NLS_LANG 環境変数が設定されていないか、 US7ASCII または WE8ISO8859-1 に設定されている場合、 ド ライバは常に 8859-1 で機能します。

� NLS_LANG 環境変数がデータベースで使用するコードセッ ト以外の値に設定されている場合、 Oracle Thin Driver および WebLogic jDriver for Oracle では、 ク ラ イアン ト コードセッ ト を使用して、 データベースへの書き込みを行います。

詳細については、 「WebLogic jDriver for Oracle の使い方」 の 「コードセッ ト のサポート 」 を参照して ください。

UNIX での Oracle に関わる他の問題

使用するスレ ッディ ング モデルをチェ ッ ク して ください。 グ リーン スレ ッ ドは、OCI で使用されるカーネル スレッ ド と衝突します。 Oracle ド ラ イバを使用する場合は、 ネイテ ィブ スレ ッ ドを使用する こ と をお勧めします。 ネイテ ィブ スレ ッ ドの使用を指定するには、 Java を起動する と きに -native フラグを追加します。

WebLogic JDBC プログラマーズ ガイ ド 7-5

Page 186: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

7 JDBC 接続のテスト と ト ラブルシューテ ィ ング

UNIX でのスレッ ド関連の問題

UNIX では、 グ リーン スレッ ド とネイテ ィブ スレ ッ ド とい う 2 つのスレッディング モデルを利用できます。 詳細については、 Sun の Web サイ トで提供されている Solaris 環境用の JDK を参照して ください。

使用しているスレッ ドの種類は、 THREADS_TYPE 環境変数を調べるこ とで確認できます。 この変数が設定されていない場合は、 Java の bin ディ レク ト リにあるシェル スク リプ ト を調べて ください。

一部の問題は、 各オペレーティ ング システムの JVM でのスレッ ドの実装に関連しています。 すべての JVM で、 オペレーテ ィング システム固有のスレ ッ ドの問題が等し く適切に処理されるわけではあ り ません。 以下に、 スレ ッ ド関連の問題

を防止するための ヒン ト を紹介します。

� Oracle ド ラ イバを使用する場合は、 ネイテ ィブ スレ ッ ドを使用します。

� HP UNIX を使用する場合は、 バージ ョ ン 11.x にアップグレードする。 HP UX 10.20 などの旧バージ ョ ンでは JVM との互換性に問題があ り ます。

� HP UNIX の場合、 新しい JDK ではグ リーン スレッ ド ライブラ リが SHLIB_PATH に追加されません。 現在の JDK では、 SHLIB_PATH で定義されたパスにない限り 、 共有ラ イブラ リ (.sl) を見つける こ とができません。SHLIB_PATH の現在の値を確認するには、 コマンド ラ インで次のよ うに入力します。

$ echo $SHLIB_PATH

set コマンドまたは setenv コマンド ( どちらを使用するかはシェルによる ) を使用する と、 シンボル SHLIB_PATH で定義されたパスに WebLogic の共有ライブラ リ を追加できます。 SHLIB_PATH で定義されていない場所にある共有ライブラ リ を認識させるには、 システム管理者に連絡する必要があ り ま

す。

7-6 WebLogic JDBC プログラマーズ ガイ ド

Page 187: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

JDBC のト ラブルシューテ ィ ング

JDBC オブジェク トを閉じる

プログラムが効率的に実行されるよ うに、 Connection、 Statement、

ResultSet などの JDBC オブジェ ク トは必ず、 finally ブロ ッ クで閉じるよ うにして ください。 次に、 一般的な例を示します。

try {

Driver d =(Driver)Class.forName("weblogic.jdbc.oci.Driver").newInstance();

Connection conn = d.connect("jdbc:weblogic:oracle:myserver", "scott", "tiger");

Statement stmt = conn.createStatement(); stmt.execute("select * from emp"); ResultSet rs = stmt.getResultSet(); // 処理を行う

}

catch (Exception e) {

// あらゆる例外を適切に処理する

}

finally {

try {rs.close();} catch (Exception rse) {} try {stmt.close();} catch (Exception sse) {} try {conn.close(); catch (Exception cse) {}

}

JDBC オブジェク トの破棄

次のよ う なやり方も避けて ください (破棄される JDBC オブジェ ク ト が作成されます )。

//これは実行しないstmt.executeQuery();rs = stmt.getResultSet();

//代わりにこれを実行するrs = stmt.executeQuery();

WebLogic JDBC プログラマーズ ガイ ド 7-7

Page 188: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

7 JDBC 接続のテスト と ト ラブルシューテ ィ ング

この例の最初の行では、 失われ、 すぐにガベージ コレ クシ ョ ンされる結果セット が作成されます。

2 番目の行の動作は、 どのサービス パッ クの WebLogic Server を実行しているのかによって異なり ます。 7.0SP2 よ り前の WebLogic Server では、オ リ ジナル オブジェク ト のク ローンが返されていました ( この場合もガベージ コレクシ ョ ンの対象にな り ます )。 7.0SP2 以降の WebLogic Server ではオ リジナル オブジェ ク トが返され、 また、 オブジェ ク ト は使用されなく なるまでガベージ コレクシ ョ ンされません。

UNIX での共有ライブラリに関連する問題のト ラブルシューティング

ネイテ ィブの 2 層 JDBC ド ラ イバをインス トールする と き、 パフォーマンス パッ クを使用するよ うに WebLogic Server をコンフ ィグレーシ ョ ンする と き、 または UNIX で BEA WebLogic Server を Web サーバと して設定する と きには、 システムで共有ラ イブラ リ または共有オブジェ ク ト (WebLogic Server ソフ ト ウェアと一緒に配布される ) をインス トールします。 こ こでは、 予期される問題について説明し、 それらの問題の解決策を提案します。

オペレーティ ング システムのローダでは、 さまざまな場所でライブラ リが検索されます。 ローダの動作は、 UNIX の種類によって異なり ます。 以降の節では、Solaris と HP-UX について説明します。

WebLogic jDriver for Oracle

共有ライブラ リは、 このマニュアルで説明されている手順に従って設定してくだ

さい。 実際に指定するパスは、 Oracle ク ラ イアン トのバージ ョ ンや Oracle サーバのバージ ョ ンなどによって異な り ます。 詳細については、 「WebLogic jDriver for Oracle のコンフ ィグレーシ ョ ン」 を参照して ください。

7-8 WebLogic JDBC プログラマーズ ガイ ド

Page 189: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

UNIX での共有ライブラ リに関連する問題のト ラブルシューテ ィ ング

Solaris

どのダイナ ミ ッ ク ラ イブラ リが実行ファ イルによって使用されているのかを確認するには、 ldd コマンドを実行します。 このコマンドの出力が、 ラ イブラ リが見つからないこ とを示している場合は、 次のよ うにして、 ライブラ リの位置を LD_LIBRARY_PATH 環境変数に追加します (C シェルまたは Bash シェルの場合 )。

# setenv LD_LIBRARY_PATH weblogic_directory/lib/solaris/oci817_8

このよ うにして追加すれば、 ld を実行してもラ イブラ リの紛失は報告されないはずです。

HP-UX

不適切なファイル パーミ ッシ ョンの設定

HP-UX システムで WebLogic Server をインス トールした後、 発生する可能性が最も高い共有ライブラ リの問題は、 不適切なファ イル パー ミ ッシ ョ ンの設定です。 WebLogic Server をインス トールした後は、 chmod コマンドを使用して共有ラ イブラ リのパー ミ ッシ ョ ンを適切に設定して ください。 HP-UX 11.0 で適切なパー ミ ッシ ョ ンを設定するには、 次のよ うに入力します。

% cd WL_HOME/lib/hpux11/oci817_8

% chmod 755 *.sl

ファ イル パー ミ ッシ ョ ンを設定した後に共有ラ イブラ リ をロードできない場合は、 ライブラ リの位置を特定するこ とに問題があるこ とが考えられます。 その場

合はまず、 次のよ うにして、 WL_HOME/server/lib/hpux11 が SHLIB_PATH 環境変数に設定されている こ と を確認して ください。

% echo $SHLIB_PATH

そのディ レ ク ト リがない場合は、 次のよ うにして追加して ください。

# setenv SHLIB_PATH WL_HOME/server/lib/hpux11:$SHLIB_PATH

あるいは、WebLogic Server 配布キッ ト にある .sl ファ イルを SHLIB_PATH 変数で既に設定されているディ レク ト リへコピー ( またはリ ンク ) して ください。

WebLogic JDBC プログラマーズ ガイ ド 7-9

Page 190: BEAWebLogic Server and WebLogic Express - Oracleotndnld.oracle.co.jp/document/products/wls/docs70/pdf/jdbc.pdf · BEAWebLogic Server ™ and WebLogic Express ® WebLogic JDBC BEA

7 JDBC 接続のテスト と ト ラブルシューテ ィ ング

それでも問題が解決しない場合は、 chatr コマンドを使用して、 アプ リ ケーシ ョ ンが SHLIB_PATH 環境変数のディ レク ト リ を検索するよ うに指定して ください。 +s enabled オプシ ョ ンを使用する と、 SHLIB_PATH 変数を検索するよ うにアプ リ ケーシ ョ ンが設定されます。 次に、 このコマンドの例を示します。 この例

は、 HP-UX 11.0 の WebLogic jDriver for Oracle 共有ラ イブラ リで実行します。

# cd weblogic_directory/lib/hpux11

# chatr +s enable libweblogicoci39.sl

このコマンドの詳細については、 chatr のマニュアル ページを参照して ください。

不適切な SHLIB_PATH

Oracle 9 を使用している場合、 SHLIB_PATH に適切なパスが含まれていないこ とが原因で共有ラ イブラ リの問題が発生する場合もあ り ます。 SHLIB_PATH には、ド ライバ (oci901_8) へのパス と、 ベンダ提供のラ イブラ リ (lib32) へのパスが含まれている必要があ り ます。 たとえば、 パスは次のよ う にな り ます。

export SHLIB_PATH=$WL_HOME/server/lib/hpux11/oci901_8:$ORACLE_HOME/lib32:$SHLIB_PATH

パスに Oracle 8.1.7 ラ イブラ リ を含めるこ とはできません。 含まれている と クラ ッシュします。 詳細については、 「WebLogic jDriver for Oracle の使用環境の設定」 を参照して ください。

7-10 WebLogic JDBC プログラマーズ ガイ ド