12.3.2. 1 フェーズコミット (1PC) の LRCO 最適化
12.3.2.1. Commit Markable Resource (CMR)
概要
Commit Markable Resource (CMR) インターフェイスを介してリソースマネージャーへのアクセスを設定すると、1PC リソースマネージャーを 2PC トランザクションに確実に参加させることができます。これは、非 XA リソースを完全にリカバリー可能にする LRCO アルゴリズムの実装です。
- 2PC を準備する
- LRCO をコミットします。
- tx ログを書き込む
- 2PC をコミットする
exception-sorter
パラメーターを使用します。JBoss EAP 『管理および設定ガイド』 に記載されているデータソース設定例に従うことができます。
制約
トランザクションには、CMR リソースを 1 つだけ含めることができます。
前提条件
次の SQL が機能するテーブルを作成する必要があります。
SELECT xid,actionuid FROM _tableName_ WHERE transactionManagerID IN (String[]) DELETE FROM _tableName_ WHERE xid IN (byte[[]]) INSERT INTO _tableName_ (xid, transactionManagerID, actionuid) VALUES (byte[],String,byte[])
例12.1 SQL クエリーのいくつかの例
CREATE TABLE xids (xid varbinary(144), transactionManagerID varchar(64), actionuid varbinary(28))
CREATE TABLE xids (xid RAW(144), transactionManagerID varchar(64), actionuid RAW(28)) CREATE UNIQUE INDEX index_xid ON xids (xid)
CREATE TABLE xids (xid VARCHAR(255) for bit data not null, transactionManagerID varchar(64), actionuid VARCHAR(255) for bit data not null) CREATE UNIQUE INDEX index_xid ON xids (xid)
CREATE TABLE xids (xid varbinary(144), transactionManagerID varchar(64), actionuid varbinary(28)) CREATE UNIQUE INDEX index_xid ON xids (xid)
CREATE TABLE xids (xid bytea, transactionManagerID varchar(64), actionuid bytea) CREATE UNIQUE INDEX index_xid ON xids (xid)
リソースマネージャーを CMR として有効にする
デフォルトでは、CMR 機能はデータソースに対して無効になっています。有効にするには、データソースの設定を作成または変更し、connectable 属性を true に設定する必要があります。サーバー xml 設定ファイルの datasources セクションの設定エントリーの例は次のとおりです。
<datasource enabled="true" jndi-name="java:jboss/datasources/ConnectableDS" pool-name="ConnectableDS" jta="true" use-java-context="true" spy="false" use-ccm="true" connectable="true"/>
/subsystem=datasources/data-source=ConnectableDS:add(enabled="true", jndi-name="java:jboss/datasources/ConnectableDS", jta="true", use-java-context="true", spy="false", use-ccm="true", connectable="true", connection-url="validConnectionURL", exception-sorter="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter", driver-name="h2")
新しい CMR 機能を使用するために既存のリソースを更新
新しい CMR 機能を使用するために既存のリソースを更新するだけでよい場合は、接続可能な属性を変更するだけです。
/subsystem=datasources/data-source=ConnectableDS:write-attribute(name=connectable,value=true)
CMR 対応のデータソースの特定
トランザクションサブシステムは、以下に示すように、トランザクションサブシステム設定セクションへのエントリーを通じて CMR 対応のデータソースを識別します。
<subsystem xmlns="urn:jboss:domain:transactions:3.0"> ... <commit-markable-resources> <commit-markable-resource jndi-name="java:jboss/datasources/ConnectableDS"> <xid-location name="xids" batch-size="100" immediate-cleanup="false"/> </commit-markable-resource> ... </commit-markable-resources> </subsystem>