Oracle DBMS の BLOB および CLOB DBMS カ ラムのサポー ト
EJB 2. 0 CMP に対する自動主キー生成
WebLogic Server は、 コンテナ管理に よ る永続性 (CMP) 用の自動主キー生成機能 をサポー ト し ています。
注意: こ の機能は EJB CMP 2.0 コンテナに対し てのみサポー ト さ れてお り 、
EJB CMP 1.1 に対する自動主キー生成機能はサポー ト さ れてい ません。
1.1 Bean の場合は、Bean 管理に よ る永続性 (BMP) を使用する必要があ り
ます。
生成さ れ る キーのサポー ト は以下の 2 つの方法で提供さ れます。
DBMS 主キー生成の使用。 コンパイ ル時に指定さ れた一連のデプ ロ イ メ ン ト
記述子を使用し て、 サポー ト さ れているデータベース と 連携し てキー生成を サポー ト する ための コ ンテナ コ ー ド を生成し ます。
こ のオプシ ョ ンでは、 コンテナはすべてのキー生成を基底のデータベースに 委ねます。 こ の機能を有効にするには、 サポー ト さ れてい る DBMS の名前
と 、 データベースで必要な場合にはジ ェ ネ レータ名を指定し ます。 CMP コー ド は、 こ の機能を実装するすべての細部を処理し ます。
こ の機能の詳細については、5-37 ページの 「Oracle 用主キー サポー ト の指 定」 と 5-38 ページの 「Microsoft SQL Server 用主キー サポー ト の指定」 を 参照し て く だ さ い。
Bean プロバイダが指定し た命名済シーケンス テーブルの使用。 WebLogic
Server で指定 さ れた ス キーマを持ち、 ユーザが作成し て名前を付けたデータ
ベース テーブルを使用し ます。 コンテナは、 こ のテーブルを使用し てキーを 生成し ます。
EJB 2.0 CMP に対す る自動主キー生成
こ のオプシ ョ ンでは、 現在の主キー値を保持する テーブルに名前を付けま す。 テーブルは、 次の文で定義する よ う に、 1 行 1 カ ラ ムで構成さ れます。
CREATE table_name (SEQUENCE int) INSERT into table_name VALUES (0)
注意: Oracle のテーブルの作成手順については、 Oracle データベースのマニ ュ
アルを参照し て く だ さ い。
weblogic-cmp-rdbms-jar.xmlフ ァ イ ルで key_cache_size要素を設定し て、 データベースの SELECT および UPDATE に よ っ て一度に取得する主 キー値の数を指定し ます。key_cache_sizeのデフ ォル ト 値は 1です。 デー タベース ア ク セ ス を最小限に抑えてパフ ォーマン ス を向上する ために、 BEA では こ の要素には値 >1を設定する こ と を推奨し ています。 こ の機能の詳細に ついては、5-39 ページの 「主キーの命名済シーケ ン ス テーブル サポー ト の 指定」 を参照し て く だ さ い。
現時点では、 WebLogic Server は、 Oracle および Microsoft SQL Server 向けの
DBMS 主キー生成サポー ト だけを提供し ます。 ただ し、 命名済シーケ ン ス テー
ブルは、 サポー ト さ れてい る他のデータベースで使用で き ます。 ま た、 こ の機能 は単純 ( 非複合 ) 主キーで使用する こ と を想定し た も のです。
有効なキー フ ィ ール ド型
Bean の抽象 「get」 および 「set」 メ ソ ッ ド では、 以下の 2 つの型のいずれか と し
てフ ィ ール ド を宣言で き ます。
java.lang.Integer java.lang.Long
Oracle 用主キー サポー ト の指定
Oracle データベース用の主キー生成サポー ト では、 Oracle の SEQUENCE機能が使
用さ れます。 こ の機能は、 Oracle データベース内の Sequenceエンテ ィ テ ィ と 連 携し て一意の主キーを生成し ます。 Oracle SEQUENCEは、 新し い数値が必要な場 合に呼び出 さ れます。
5 WebLogic Server のコ ン テナ管理によ る永続性サービ ス
5-38 WebLogic エ ン タ ープ ラ イズ JavaBeans プ ログラ マーズガ イ ド
SEQUENCEがデータベース内に作成 さ れた ら、 XML デプ ロ イ メ ン ト 記述子で自 動キー生成を指定し ます。weblogic-cmp-rdbms-jar.xmlフ ァ イルで、 次の よ
う に自動キー生成を指定し ます。
図5-7 Oracle 用自動キー生成の指定
<automatic-key-generation>
<generator-type>ORACLE</generator-type>
<generator_name>test_sequence</generator-name>
<key-cache-size>10</key-cache-size>
</automatic-key-generation>
generator-name要素で、 使用する ORACLE SEQUENCEの名前を指定し ます。
ORACLE SEQUENCE が SEQUENCE INCREMENT 値を付けて作成し た場合は、
key-cache-size を指定し なければな り ません。 こ の値は、 Oracle SEQUENCE INCREMENT値 と 一致する必要があ り ます。 こ れ ら 2 つの値が一致し ない場合、
重複キーの問題が発生する可能性が高 く な り ます。
警告: Oracle では、 ジ ェ ネレータ タ イ プ USER_DESIGNATED_TABLE を使
用し ないで く だ さ い。 使用する と 、 次の例外が発生する可能性があ り ま す。
javax.ejb.EJBException: nested exception
is:java.sql.SQLException: Automatic Key Generation Error:
attempted to UPDATE or QUERY NAMED SEQUENCE TABLE NAMED_SEQUENCE_TABLE, but encountered SQLException
java.sql.SQLException:ORA-08177: can't serialize access for this transaction.
USER_DESIGNATED_TABLE モー ド は、 TX ISOLATION LEVEL を
SERIALIZABLE に設定し ます。 Oracle では、 こ れによ って問題が発生
する可能性があ り ます。
代わ り に、 AutoKey オプシ ョ ン ORACLE を使用し ます。
Microsoft SQL Server 用主キー サポー ト の指定
Microsoft SQL Server データベース用の主キー生成サポー ト では、 SQL Server の
IDENTITYカ ラ ムが使用 さ れます。 Bean が作成さ れ、 新し い行がデータベース テーブルに挿入さ れ る と 、 SQL Server は、IDENTITY カ ラ ム と し て指定 さ れたカ
ラ ムに、 次の主キー値を自動的に挿入し ます。
EJB 2.0 CMP に対す る自動主キー生成
注意: Microsoft SQL Server のテーブルの作成手順については、 Microsoft SQL
Server データベースのマニ ュ アルを参照し て く だ さ い。
IDENTITYがデータベース テーブル内に作成 さ れた ら、 XML デプ ロ イ メ ン ト 記 述子で自動キー生成を指定し ます。weblogic-cmp-rdbms-jar.xmlフ ァ イルで、
次の よ う に自動キー生成を指定し ます。
図5-8 Microsoft SQL 用自動キー生成の指定
<automatic-key-generation>
<generator-type>SQL_SERVER</generator-type>
</automatic-key-generation>
generator-type要素では、 主キーの生成方法を指定し ます。
主キーの命名済シーケンス テーブル サポー ト の指 定
サポー ト さ れていないデータベース向けの主キー生成サポー ト では、Named SEQUENCE TABLEを使用し てキー値を保持し ます。 テーブルには、 整数の SEQUENCE INTであ る単一カ ラ ム を持つ単一行を含める必要があ り ます。 こ のカ
ラ ムは、 現在のシーケ ン ス値を保持し ます。
注意: テーブルの作成手順については、 各データベース製品のマニ ュ アルを参 照し て く だ さ い。
命名済シーケ ン ス テーブル サポー ト を利用する場合、 その基盤データベースが ト ラ ンザ ク シ ョ ン ア イ ソ レーシ ョ ン レベル、TRANSACTION_SERIALIZABLE をサ ポー ト し ている か確かめます。weblogic-ejb.xmlフ ァ イルの
isolation-level 要素に こ のオプシ ョ ン を指定し ます。
TRANSACTION_SERIALIZABLEオプシ ョ ンは、 あ る ト ラ ンザ ク シ ョ ン を複数回同 時に実行する こ と が、 その ト ラ ンザ ク シ ョ ンを順番に複数回実行し た場合 と 同じ 結果にな る こ と を仕様 と し ます。 データベースで ト ラ ンザ ク シ ョ ン ア イ ソ レー シ ョ ン レベル、TRANSACTION_SERIALIZABLEがサポー ト さ れていなければ、 命 名済シーケ ン ス テーブル サポー ト を使用で き ません。
5 WebLogic Server のコ ン テナ管理によ る永続性サービ ス
5-40 WebLogic エ ン タ ープ ラ イズ JavaBeans プ ログラ マーズガ イ ド
注意: 基盤データベースでどの よ う な型のア イ ソ レーシ ョ ン レベルがサポー ト さ れてい るかについては、 そのデータベースの ド キ ュ メ ン ト を参照し て く だ さ い。 ア イ ソ レーシ ョ ン レベルの設定の詳細については、6-6 ページ の 「EJB デプロ イ メ ン ト 記述子の指定 と 編集」 を参照し て く だ さ い。
NAMED_SEQUENCE_TABLE がデータベース内に作成 さ れた ら、 次の例のよ う に、
weblogic-cmp-rdbms-jar.xmlフ ァ イル内の XML デプ ロ イ メ ン ト 記述子を使 用し て自動キー生成を指定し ます。
図5-9 命名済シーケンス テーブル用の自動キー生成サポー ト の指定
<automatic-key-generation>
<generator-type>NAMED_SEQUENCE_TABLE</generator-type>
<generator_name>MY_SEQUENCE_TABLE_NAME</generator-name>
<key-cache-size>100</key-cache-size>
</automatic-key-generation>
generator-name要素に よ っ て、 使用する SEQUENCE TABLEの名前を指定し ま す。key-cache-size を使用する と 、 1 回の DBMS 呼び出し で コンテナが取得す る キーの数を示すキー キ ャ ッ シ ュのサ イ ズ をオプシ ョ ンで指定する こ と も で き ます。
パフ ォーマン ス を向上する ために、 BEA では こ の値を >1 (1 よ り 大き い ) に設定 する こ と を推奨し てい ます。 こ の設定に よ り 、 次のキー値を取得する ためのデー タベースの呼び出し 回数を減 らす こ と ができ ます。
ま た、NAMED SEQUENCEテーブルは Bean の タ イ プご と に作成する こ と をお勧め し ます。 異な る タ イ プの Bean が NAMED SEQUENCEテーブルを共有し ない よ う に し て く だ さ い。 こ う する こ と で、 キー テーブルの競合の発生を防ぎ ます。