第15章 トランザクションサブシステム

15.1. トランザクションサブシステムの設定

15.1.1. トランザクション設定の概要

はじめに

次の手順は、JBoss Enterprise Application Platform のトランザクションサブシステムを設定する方法を示しています。

15.1.2. トランザクションマネージャーの設定

トランザクションマネージャー (TM) は、Web ベースの管理コンソールかコマンドラインの管理 CLI を使用して設定できます。各コマンドやオプションについては、 JBoss Enterprise Application Platform を管理ドメインとして使用していると仮定します。スタンドアローンサーバーを使用する場合や default 以外の異なるプロファイルを修正したい場合は、以下の方法で手順とコマンドを修正しなければならない場合があります。

例のコマンドに関する注意点

  • 管理コンソールの場合、default プロファイルは最初のコンソールログイン時に選択されるものです。異なるプロファイルでトランザクションマネージャーの設定を修正する必要がある場合は、default の代わりに使用しているプロファイルを選択してください。
    同様に、例の CLI コマンドの default プロファイルを使用しているプロファイルに置き換えてください。
  • スタンドアローンサーバーを使用する場合、存在するプロファイルは 1 つのみです。特定のプロファイルを選択する手順は無視してください。CLI コマンドでは、例のコマンドの /profile=default 部分を削除してください。

注記

TM オプションが管理コンソールまたは管理 CLI で表示されるようにするには、transactions サブシステムが有効でなくてはなりません。これは、デフォルトで有効になっており、他の多くのサブシステムが適切に機能するために必要なため、無効にする可能性は大変低くなります。
管理コンソールを使用した TM の設定

Web ベースの管理コンソールを使用して TM を設定するには、管理コンソール画面の左上にある一覧から Runtime タブを選択します。管理ドメインを使用する場合、選択できるプロファイルがいくつかあります。プロファイル画面の右上にある Profile 選択ボックスから適切なプロファイルを選択してください。Container メニューを展開して、Transactions を選択します。

トランザクションマネージャーの設定ページには、さらなるオプションが表示されています。Recovery オプションはデフォルトでは非表示です。展開するには、Recovery ヘッダーをクリックします。オプションを編集するには、Edit ボタンをクリックします。変更は直ちに反映されます。
インラインヘルプを表示するには、Need Help? ラベルをクリックします。
管理 CLI を使用した TM の設定

管理 CLI では、一連のコマンドを使用して TM を設定できます。プロファイル default の管理ドメインの場合、コマンドはすべて /profile=default/subsystem=transactions/ で始まり、スタンドアローンサーバーの場合は /subsystem=transactions で始まります。

表15.1 TM 設定オプション

オプション 詳細 CLI コマンド
Enable Statistics
トランザクションの統計を有効にするかどうか指定します。統計は Runtime タブの Subsystem Metrics セクションにある管理コンソールで閲覧できます。
/profile=default/subsystem=transactions/:write-attribute(name=enable-statistics,value=true)
Enable TSM Status
トランザクションステータスマネージャー (TSM) のサービスを有効にするかどうか指定します。これは、アウトオブプロセスのリカバリに使用されます。
/profile=default/subsystem=transactions/:write-attribute(name=enable-tsm-status,value=false)
Default Timeout
デフォルトのトランザクションタイムアウトです。デフォルトでは 300 秒に設定されています。トランザクションごとにプログラムで上書きできます。
/profile=default/subsystem=transactions/:write-attribute(name=default-timeout,value=300)
Path
トランザクションマネージャーコアがデータを格納するファイルシステムの相対または絶対パスです。デフォルトの値は relative-to 属性の値と相対的なパスです。
/profile=default/subsystem=transactions/:write-attribute(name=path,value=var)
Relative To
ドメインモデルのグローバルなパス設定を参照します。デフォルト値は、JBoss Enterprise Application Platform 用のデータディレクトリで、jboss.server.data.dir プロパティの値です。デフォルトでは、管理ドメインの場合は EAP_HOME/domain/data/ に、スタンドアローンサーバーの場合は EAP_HOME/standalone/data/ に設定されています。path TM 属性の値は、このパスに相対的です。空の文字列を使用して、デフォルト動作を無効にし、path 属性の値が絶対パスとして強制的に扱われるようにします。
/profile=default/subsystem=transactions/:write-attribute(name=relative-to,value=jboss.server.data.dir)
Object Store Path
TM オブジェクトストアがデータを格納するファイルシステムの相対または絶対パスです。デフォルトでは、object-store-relative-to パラメーターの値に相対的です。
/profile=default/subsystem=transactions/:write-attribute(name=object-store-path,value=tx-object-store)
Object Store Path Relative To
ドメインモデルのグローバルなパス設定を参照します。デフォルト値は、JBoss Enterprise Application Platform 用のデータディレクトリで、jboss.server.data.dir プロパティの値です。デフォルトでは、管理ドメインの場合は EAP_HOME/domain/data/ に、スタンドアローンサーバーの場合は EAP_HOME/standalone/data/ に設定されています。path TM 属性の値は、このパスに相対的です。空の文字列を使用して、デフォルト動作を無効にし、path 属性の値が絶対パスとして強制的に扱われるようにします。
/profile=default/subsystem=transactions/:write-attribute(name=object-store-relative-to,value=jboss.server.data.dir)
Socket Binding
ソケットベースのメカニズムを使用する場合に、トランザクションマネージャーの回復およびトランザクション識別子の生成に使用するソケットバインディングの名前を指定します。一意の識別子を生成する詳しい情報は、process-id-socket-max-ports を参照してください。ソケットバインディングは、管理コンソールの Server タブでサーバーグループごとに指定されます。
/profile=default/subsystem=transactions/:write-attribute(name=socket-binding,value=txn-recovery-environment)
Status Socket Binding
トランザクションステータスマネージャーで使用するソケットバインディングを指定します。
/profile=default/subsystem=transactions/:write-attribute(name=status-socket-binding,value=txn-status-manager)
Recovery Listener
トランザクション回復のプロセスがネットワークソケットをリッスンするかどうか指定します。デフォルトは false です。
/profile=default/subsystem=transactions/:write-attribute(name=recovery-listener,value=false)
以下は、高度なオプションで、修正は管理 CLI を使用することでのみ可能です。デフォルト設定の変更は注意して行ってください。詳細は Red Hat グローバルサポートサービスにお問い合わせください。

表15.2 高度な TM 設定オプション

オプション 詳細 CLI コマンド
jts
Java Transaction Service (JTS) トランザクションを使用するかどうか指定します。デフォルトは false で、JTA トランザクションのみ使用します。
/profile=default/subsystem=transactions/:write-attribute(name=jts,value=false)
node-identifier
JTS サービスのノード識別子です。トランザクションマネージャーが回復時にこれを使用するため、JTS サービスごとに一意でなければなりません。
/profile=default/subsystem=transactions/:write-attribute(name=node-identifier,value=1)
process-id-socket-max-ports
トランザクションマネージャーは、各トランザクションログに対し一意の識別子を作成します。一意の識別子を生成するメカニズムは 2 種類あります。ソケットベースのメカニズムとプロセスのプロセス識別子をベースにしたメカニズムです。
ソケットベースの識別子の場合、あるソケットを開くと、そのポート番号が識別子用に使用されます。ポートがすでに使用されている場合は、空きのポートが見つかるまで次のポートがプローブされます。process-id-socket-max-ports は、TM が失敗するまでに試行するソケットの最大値を意味します。デフォルト値は 10 です。
/profile=default/subsystem=transactions/:write-attribute(name=process-id-socket-max-ports,value=10)
process-id-uuid
true に設定すると、プロセス識別子を使用して各トランザクションに一意の識別子を作成します。そうでない場合は、ソケットベースのメカニズムが使用されます。デフォルトは true です。詳細は process-id-socket-max-ports を参照してください。
/profile=default/subsystem=transactions/:write-attribute(name=process-id-uuid,value=true)
use-hornetq-store
トランザクションログ用に、ファイルベースのストレージの代わりに HornetQ のジャーナルストレージメカニズムを使用します。デフォルトでは無効になっていますが、I/O パフォーマンスが向上します。別々のトランザクションマネージャーで JTS トランザクションを使用することは推奨されません。これを有効にした場合は、log-store 値も hornetq に変更してください。
/profile=default/subsystem=transactions/:write-attribute(name=use-hornetq-store,value=false)
log-store
ファイルシステムベースのオブジェクトストアを使用する場合は default に、HornetQ のジャーナリングストレージメカニズムを使用する場合は hornetq に設定します。これを hornetq に設定した場合は、use-hornetq-storetrue に変更してください。
/profile=default/subsystem=transactions/log-store=log-store/:write-attribute(name=type,value=default)

15.1.3. JTA トランザクションを使用するようにデータソースを設定する

タスクの概要

このタスクでは、Java Transaction API (JTA) をお使いのデータソースで有効化する方法を説明します。ここでの説明はアーリーアクセスプログラム用で、Enterprise Application Platform 6 では変更される予定です。

作業の前提条件

このタスクを行う前に、 次の条件を満たす必要があります。

  • お使いのデータベースまたはその他のリソースが JTA をサポートしている必要があります。不明な場合は、データソースまたはリソースの文書を参照してください。
  • データベースを作成する必要があります。「管理インターフェースによる非 XA データソースの作成」 を参照してください。
  • JBoss Enterprise Application Platform を停止します。
  • テキストエディターで設定ファイルを直接編集できる権限を持たなければなりません。

手順15.1 タスク

  1. テキストエディターで設定ファイルを開きます。

    Enterprise Application Platform を管理ドメインまたはスタンドアローンサーバーで実行するかどうかに応じて、設定ファイルの場所が異なります。
    • 管理対象ドメイン

      管理ドメインのデフォルトの設定ファイルは、Red Hat Enterprise Linux の場合は EAP_HOME/domain/configuration/domain.xml にあります。Microsoft Windows サーバーの場合は EAP_HOME\domain\configuration\domain.xml にあります。
    • スタンドアロンサーバー

      スタンドアロンサーバーのデフォルトの設定ファイルは、Red Hat Enterprise Linux の場合は EAP_HOME/standalone/configuration/standalone.xml にあります。Microsoft Windows サーバーの場合は EAP_HOME\standalone\configuration\standalone.xml にあります。
  2. お使いのデータソースに対応する <datasource> タグを探します。

    データソースの jndi-name 属性には作成時に指定した属性が設定されます。例えば、 ExampleDS データソースは次のようになります。
    <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="H2DS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
  3. jta 属性を true に設定します。

    上記のように、jta="true"<datasource> タグの内容に追加します。
  4. 設定ファイルを保存します。

    設定ファイルを保存しテキストエディターを終了します。
  5. JBoss Enterprise Application Platform を起動します。

    JBoss Enterprise Application Platform 6 サーバーを再起動します。
結果

JBoss Enterprise Application Platform が起動し、データソースが JTA トランザクションを使用するように設定されます。

15.1.4. XA Datasource の設定

作業の前提条件

XA Datasource を追加するには、管理コンソールにログインする必要があります。詳細は 「管理コンソールへログイン」 を参照してください。

  1. 新規データソースの追加

    新規データソースを Enterprise Application Platform に追加します。「管理インターフェースによる非 XA データソースの作成」 の手順に従いますが、上部の XA Datasource タブをクリックしてください。
  2. 必要に応じて他のプロパティーを設定します。

    データソースパラメーターの一覧は 「データソースのパラメーター」 にあります。
結果

XA Datasource が設定され、使用する準備ができました。

15.1.5. トランザクションログメッセージについて

ログファイルが読み取り可能な状態でトランザクションの状態を追跡するには、トランザクションロガーに DEBUG ログレベルを使用します。詳細なデバッグでは TRACE ログレベルを使用します。トランザクションロガーの設定に関する詳細は 「トランザクションサブシステムのログ設定」 を参照してください。
TRACE ログレベルに設定すると、トランザクションマネージャーは多くのロギング情報を生成できます。一般的に表示されるメッセージの一部は次の通りです。他のメッセージが表示されることもあります。

表15.3 トランザクションステートの変更

トランザクションの開始
トランザクションが開始されると、次のコードが実行されます。
com.arjuna.ats.arjuna.coordinator.BasicAction::Begin:1342
tsLogger.logger.trace("BasicAction::Begin() for action-id "+ get_uid());
トランザクションのコミット
トランザクションがコミットすると次のコードが実行されます。
com.arjuna.ats.arjuna.coordinator.BasicAction::End:1342
tsLogger.logger.trace("BasicAction::End() for action-id "+ get_uid());
トランザクションのロールバック
トランザクションがロールバックされると次のコードが実行されます。
com.arjuna.ats.arjuna.coordinator.BasicAction::Abort:1575
tsLogger.logger.trace("BasicAction::Abort() for action-id "+ get_uid());
トランザクションのタイムアウト
トランザクションがタイムアウトすると次のコードが実行されます。
com.arjuna.ats.arjuna.coordinator.TransactionReaper::doCancellations:349
tsLogger.logger.trace("Reaper Worker " + Thread.currentThread() + " attempting to cancel " + e._control.get_uid());
You will then see the same thread rolling back the transaction as shown above

15.1.6. トランザクションサブシステムのログ設定

タスクの概要

Enterprise Application Platform の他のログ設定に依存せずにトランザクションログの情報量を制御する手順を説明します。主に Web ベースの管理コンソールを用いた手順を説明し、管理 CLI のコマンドはその説明の後で取り上げます。

手順15.2 管理コンソールを使用したトランザクションロガーの設定

  1. ログ設定エリアへの移動

    管理コンソールにて画面の左上にある Profiles タブをクリックします。管理ドメインを使用する場合は、右上の Profile 選択ボックスから設定したいサーバープロファイルを選択します。
    Core メニューを展開して、Logging ラベルをクリックします。
  2. com.arjuna 属性を編集します。

    ページの下の方にある Details セクションの Edit ボタンをクリックします。ここにクラス固有のログ情報を追加できます。com.arjuna クラスはすでに存在しています。ログレベルと親ハンドラーを使用するかどうか変更できます。
    ログレベル
    デフォルトのログレベルは WARN です。トランザクションはログを大量に出力できるため、標準的なログレベルの意味は、トランザクションロガーでは若干異なります。通常、選択したレベルより重要度が低いレベルでタグ付けされたメッセージは破棄されます。

    トランザクションログのレベル (詳細度が最高レベルから最低レベルまで)

    • DEBUG
    • INFO
    • WARN
    • ERROR
    • FAILURE
    親ハンドラーの使用
    ロガーがログ出力を親ロガーに送信するかどうか指定します。デフォルトの動作は true です。
  3. 変更は直ちに反映されます。