次の表は、購読者レベルのパラメータとそのプロパティの概要を示します。
Table 4-35 購読者レベルのパラメータおよびプロパティ
1 このデフォルトは、ランタイム時に記述子ファイルから動的に派生します。
購読パラメータには、2つのサブカテゴリがあります。
「購読者を使用不可にしますか?」パラメータは、購読者チャネルが使用不可かどうかを指定します。
このパラメータを論理値のTrueに設定した場合、購読者チャネルは使用不可です。このパラメータを論理値のFalseに設定した場合、購読者チャネルはアクティブです。
「ステートメントレベルのロックを使用不可にしますか?」パラメータは、各SQLステートメントを実行する前にデータベースリソースがこのチャネルで明示的にロックされるかどうかを指定します。このパラメータは、「ステートメントレベルのロックを有効にしますか?」が論理値のTrueに設定されている場合のみアクティブです。
このパラメータを論理値のTrueに設定した場合、データベースリソースは明示的にロックされます。このパラメータを論理値のFalseに設定した場合、データベースリソースは明示的にはロックされません。
「更新件数を確認しますか?」パラメータは、テーブルに対してINSERT、UPDATE、およびDELETEステートメントが実行されたときに、そのテーブルが実際に更新されたかどうかを購読者チャネルがチェックするかどうかを指定します。
論理値のTrueに設定した場合、更新件数がチェックされます。まったく更新されていない場合は例外が発生します。論理値のFalseに設定した場合、更新件数は無視されます。
ステートメントがbefore-triggerロジックで再定義される場合、このパラメータは論理値Falseに設定されます。
Microsoft SQL Serverを使用している場合は、デフォルト値を使用します。これは、トリガロジックの(トランザクションをロールバックする可能性がある)エラーが購読者チャネルに反映されないからです。
「Add Default Values on Insert? (挿入時にデフォルト値を追加しますか?)」パラメータは、ビューに対してINSERTステートメントが実行されるときに、購読者チャネルがデフォルト値を提供するかどうかを指定します。
このパラメータは、主に、Microsoft SQL Server 2000との相互運用を可能にするために使用されます。このデータベースは、NOT NULLの制約があるビューの列が、INSERTステートメントにNULL以外の値を含むことを要求します。
このパラメータを論理値のTrueに設定した場合、ビューに対して実行されるINSERTステートメントにデフォルト値が提供されます。明示的な値はまだ使用可能になっていません。このパラメータを論理値のFalseに設定した場合、デフォルト値は提供されません。
Table 4-39 Add Default Values on Insert? (挿入時にデフォルト値を追加しますか?): プロパティ
|
プロパティ |
値 |
|---|---|
|
タグ名 |
add-default-values-on-view-insert |
|
必須? |
× |
|
デフォルト値 |
(動的1) |
|
有効な値 |
1、yes、true (はい) 0、no、false (いいえ) |
|
スキーマ依存 |
True |
1 このデフォルトは、ランタイム時に記述子ファイルから動的に派生します。
INSERTステートメントにマップする<add>イベントを処理する場合、購読者チャネルは、プライマリキー値を使用して、Identity Managerの関連付けを作成します。これらのパラメータは、購読者チャネルが関連付けの値の作成に必要なプライマリキー値を取得する方法とタイミングを指定します。プライマリキー値の取得方法は、プライマリキーの生成/取得方法で指定します。取得タイミングは、プライマリキー値がいつ取得されるかを示します。
次の表は、サポートされている方法およびタイミングを示します。
Table 4-40 サポートされている方法およびタイミング
|
方法 |
タイミング: before (行の挿入前) |
タイミング: after (行の挿入後) |
|---|---|---|
|
none (購読イベント) |
X |
01 |
|
driver (購読者生成) |
X |
X |
|
auto (自動生成/識別列) |
02 |
X |
|
(ストアドプロシージャ/関数) |
X |
X |
1 購読者チャネルは、自動的にこのタイミングをbeforeに上書きします。2 購読者チャネルは自動的にこのタイミングをafterに上書きします。
「生成/取得方法(テーブル-グローバル)」パラメータは、すべての親テーブルおよびビューのプライマリキー値の生成または取得法を指定します。「方法とタイミング」パラメータは、このパラメータをテーブル/ビューごとに上書きします。方法とタイミング(テーブル-ローカル)を参照してください。
このパラメータをnoneに設定した場合、プライマリキー値はすでに購読イベントに存在すると見なされます。このパラメータをdriverに設定した場合、プライマリキー値は次のいずれかの方法で生成されます。
列タイプが文字列の場合、購読者チャネルは、System.CurrentTimeMillis()の返り値を使用して値を生成します。他のデータタイプはサポートされていません。
このパラメータをautoに設定した場合、プライマリキー値は、java.sql.Statement.getGeneratedKeys():java.sql.ResultSetメソッドで取得されます。サポートされているサードパーティ製のJDBCドライバのうち、現在このメソッドを実装しているのは、MySQL Connector/J JDBC ドライバだけです。MySQL Connector/J JDBC Driverを参照してください。
「取得タイミング(テーブル-グローバル)」パラメータは、購読者チャネルがすべての親テーブルおよびビューのプライマリキー値をいつ取得するかを指定します。「方法とタイミング(テーブル-ローカル)」パラメータは、このパラメータを上書きします。方法とタイミング(テーブル-ローカル)を参照してください。
このパラメータをbeforeに設定した場合、プライマリキー値は挿入前に取得されます。このパラメータをafterに設定した場合、プライマリキー値は挿入後に取得されます。
「方法とタイミング(テーブル-ローカル)」パラメータは、プライマリキーの生成/取得方法、および取得タイミングを親テーブル/ビューごとに指定します。これは、実質的に生成/取得方法および取得タイミングをテーブルまたはビュー名にマップします。このパラメータの構文は、手続き型プログラミング言語の、複数の引数を伴うメソッド呼び出し(method-name(argument1, argument2)など)をミラーリングします。
「テーブル/ビュー名」パラメータを使用する場合は、このパラメータの値で参照されるテーブル、ビュー、ストアドプロシージャ、または関数を、通常明示的にスキーマ修飾する必要があります。「スキーマ名」パラメータを使用する場合は、このパラメータの値で参照されるテーブル、ビュー、ストアドプロシージャ、または関数が、そのスキーマ名で暗黙的にスキーマ修飾されます。このパラメータの値で参照されるテーブル、ビュー、ストアドプロシージャ、または関数が、暗黙的なスキーマ以外のスキーマにある場合は、スキーマ修飾する必要があります。
このパラメータの値をBNF (バッカス記法)で表記すると、次のようになります。
<key-gen> ::=<table-or-view-name> "(" <generation-retrieval-method>, <retrieval-timing> ")" {[<delimiter>] <key-gen>}
<generation-retrieval-method> ::=none | driver | auto | """ <procedure-signature> """ | """ <function-signature> """
<table-or-view-name> ::=<legal-undelimited-database-table-or-view- identifier>
<delimiter> ::=";" | "," | <white-space>
<procedure-signature> ::=<schema-qualifier> "." <stored-routine- name>"("<argument-list>")"
<function-signature> ::="?=" <procedure-signature>
<schema-qualifier> ::=<legal-undelimited-database-username-identifier>
<stored-routine-name> ::=<legal-undelimited-database-stored-routine -identifier>
<argument-list> ::=<column-name>{"," <column-name>}
<column-name> ::=<column-from-table-or-view-name-previously-specified>
生成または取得方法では、プライマリキー値の生成および取得(必要な場合)方法を指定します。可能な方法は、None、Driver、Auto、およびStored Procedure/Functionです。
None デフォルトで、購読者チャネルは、アイデンティティボールトがプライマリキー値の信頼されたソースであり、必要な値がすでに特定の<add>イベントに存在すると見なしています。この場合は、プライマリ値はすでに存在するので生成する必要はありません。現在の<add>イベントから取得するだけで済みます。この方法は、GUIDなどのeDirectory属性が明示的に親テーブルまたはビューのプライマリキー列にスキーママップされている場合に適しています。
usrというテーブルとview_usrというビューがあり、アイデンティティボールトがプライマリキー値の信頼されたソースである場合は、このパラメータの値は次のようになります。
usr(none); view_usr(none)
この方法を使用する場合は、CNではなくGUIDを親テーブルまたはビューのプライマリキー列にマップすることをお勧めします。
Driver この方法は、データベースが、指定された親テーブルまたはビューのプライマリキー値の信頼されたソースであると見なします。
プロトタイピングの場合、または展開の初期段階では、ストアドプロシージャまたは関数が記述される前に購読者チャネルでプライマリキー値を生成することが望ましいことがよくあります。また、ストアドプロシージャまたは関数をサポートしないデータベースでこの方法を使用することもできます。ただし、運用環境でこの方法を使用する場合は、<add>イベントによって生成されるすべてのSQLステートメントを、シリアル化可能なトランザクションに含める必要があります。詳細については、トランザクション分離レベルを参照してください。
すべてのトランザクションをシリアル化可能にする代わりに、埋め込みのSQL属性を使用して個別のトランザクション分離レベルを設定することもできます。詳細については、トランザクション分離レベルを参照してください。
任意の数値列タイプの場合、購読者チャネルは、以下を使用してプライマリキー値を生成します。
列タイプが文字列の場合、購読者チャネルは、System.CurrentTimeMillis()の返り値を使用して値を生成します。他のデータタイプはサポートされていません。
usrというテーブルとview_usrというビューがあり、データベースがプライマリキー値の信頼されたソースである場合は、このパラメータの値は次のようになります。
usr(driver); view_usr(driver)
この方法を使用する場合は、スキーママッピングポリシーおよびチャネルフィルタでプライマリキー列を省略することをお勧めします。
Auto この方法は、データベースが、指定された親テーブルまたはビューのプライマリキー値の信頼されたソースであると見なします。
一部のデータベースは、挿入される行のプライマリキー値を自動的に生成する識別列をサポートしています。この方法は、自動生成されるプライマリキー値を、JDBC 3インタフェースメソッドjava.sql.Statement.getGeneratedKeys():java.sql.ResultSetを使用して取得します。サポートされているサードパーティ製のJDBCドライバのうち、現在このメソッドをサポートしているのは、MySQL Connector/J JDBCドライバだけです。MySQL Connector/J JDBC Driverを参照してください。
usrというテーブルとview_usrというビューがあり、データベースがプライマリキー値の信頼されたソースである場合は、このパラメータの値は次のようになります。
usr(auto); view_usr(auto)
この方法を使用する場合は、スキーママッピングポリシーおよびチャネルフィルタでプライマリキー列を省略することをお勧めします。
ストアドプロシージャ/関数: この方法は、データベースが、指定された親テーブルまたはビューのプライマリキー値の信頼されたソースであると見なします。
以下を前提とした例を考えます。
この場合、パラメータの値は、次のようになります。
usr("?=func_last_usr_idu()"); view_usr("sp_last_view_usr_pk_idu(pk_idu)")
前の例では、パラメータはストアドプロシージャに渡されます。パラメータは、関数にも渡すことができますが、これは通常必要ありません。関数とは異なり、ストアドプロシージャは、通常、パラメータを通じて値を返します。ストアドプロシージャの場合、プライマリキー列は、IN OUTパラメータとして渡す必要があります。キーではにの列は、INパラメータとして渡す必要があります。
ストアドプロシージャと関数のどちらの場合も、パラメータの順序、数、およびデータタイプは、プロシージャまたは関数で想定されているパラメータの順序、数、データタイプに対応する必要があります。
この方法を使用する場合は、スキーママッピングポリシーおよびチャネルフィルタでプライマリキー列を省略することをお勧めします。
「取得タイミング」パラメータは、プライマリキー値がいつ取得されるかを指定します。
<add>イベントでは、親テーブルまたはビューに対して、少なくとも1つのINSERTステートメントが常に生成されます。このパラメータのこの部分では、プライマリキー値を取得するタイミングを、最初のINSERTステートメントを基準として指定します。
Before これはデフォルト設定です。この設定を指定した場合、プライマリキー値は、最初のINSERTステートメントの前に取得されます。
IMPORTANT:この取得タイミングは、auto以外のすべての生成/取得方法でサポートされています。取得タイミングは、方法がnoneの場合は必須です。
After この設定を指定した場合、プライマリキー値は、最初のINSERTステートメントの後に取得されます。
IMPORTANT:この取得タイミングは、none以外のすべての生成/取得方法でサポートされています。取得タイミングは、方法がautoの場合は必須です。
次の例は、前の例に取得タイミング情報を追加したものです。
usr(none, before); view_usr(none, before)
usr(driver, before); view_usr(driver, after)
usr(auto, after); view_usr(auto, after)
usr("?=func_last_usr_idu()", before); view_usr("sp_last_view_usr_pk_idu(pk_idu)", after)
次の表は、このパラメータのプロパティのリストです。
Table 4-43 取得タイミング: プロパティ
|
プロパティ |
値 |
|---|---|
|
タグ名 |
key-gen |
|
必須? |
× |
|
大文字と小文字を区別? |
区切りのない識別子での大文字と小文字の区別を参照してください。 |
|
サンプル値 |
usr("?=proc_idu()", before) |
|
デフォルト値 |
(なし) |
|
有効な値 |
(BNFに準拠した任意の文字列) |
|
スキーマ依存 |
True |