Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

第19章 transaction サブシステム

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

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

はじめに

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

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

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

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

  • 管理コンソールの場合、default プロファイルは、最初にコンソールにログインする際に選択されるプロファイルです。別のプロファイルでトランザクションマネージャーの設定を変更する必要がある場合は、各指示で default の代わりにプロファイルを選択します。
    同様に、CLI コマンド例で、プロファイルを default プロファイルに置き換えます。
  • スタンドアロンサーバーを使用する場合は、存在するプロファイルは 1 つだけです。命令を無視して、特定のプロファイルを選択します。CLI コマンドで、サンプルコマンドの /profile=default 部分を削除します。
注記
管理コンソールまたは管理 CLI で TM オプションを表示するには、transactions サブシステムを有効にする必要があります。これはデフォルトで有効にされており、他の多くのサブシステムが適切に機能するために必要であるため、無効にされる可能性が非常に低くなります。

管理コンソールを使用した TM の設定

Web ベースの管理コンソールを使用して TM を設定するには、画面上部の Configuration タブを選択します。管理対象ドメインを使用する場合は、左上の Profile 選択ボックスから正しいプロファイルを選択します。Container メニューを展開し、Transactions を選択します。

ほとんどのオプションは、トランザクションマネージャーの設定ページに表示されます。リカバリー オプションはデフォルトで非表示になっています。Recovery タブをクリックしてリカバリーオプションを表示します。Edit をクリックしてオプションを編集します。変更は直ちに反映されます。
Need Help? ラベルをクリックして、インラインヘルプテキストを表示します。

管理 CLI を使用した TM の設定

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

重要
トランザクションログのストレージタイプとして hornetq ジャーナルを使用するよう transaction サブシステムが設定されている場合、JBoss EAP の 2 つのインスタンスは同じディレクトリーを使用してジャーナルを保存することはできません。アプリケーションサーバーインスタンスは同じ場所を共有することはできず、アプリケーションサーバーインスタンスは一意な場所を設定する必要があります。

表19.1 TM 設定オプション

オプション 説明 CLI コマンド
統計の有効化 (Enable Statistics)
トランザクションの統計を有効にするかどうか。これらの統計は、Runtime タブの Subsystem Metrics セクションで管理コンソールで確認できます。
/profile=default/subsystem=transactions/:write-attribute(name=enable-statistics,value=true)
TSM ステータスの有効化
アウトオブプロセスのリカバリーに使用される TSM (トランザクションステータスマネージャー) サービスを有効にするかどうか。プロセスリカバリーマネージャーを実行して異なるプロセスから ActionStatusService にアクセスすることはサポートされません(通常はメモリーで接続されます)。
この設定オプションはサポート対象外です。
デフォルトのタイムアウト (Default Timeout)
デフォルトのトランザクションタイムアウトです。デフォルトでは 300 秒に設定されています。トランザクションごとにプログラムで上書きできます。
/profile=default/subsystem=transactions/:write-attribute(name=default-timeout,value=300)
オブジェクトストアパス (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 EAP 6 のデータディレクトリーで、デフォルト値は jboss.server.data.dir プロパティーで、デフォルト値は EAP_HOME/domain/data/、スタンドアロンサーバーインスタンスの EAP_HOME/standalone/data/ です。オブジェクトストア object-store-path TM 属性の値はこのパスに相対的です。
/profile=default/subsystem=transactions/:write-attribute(name=object-store-relative-to,value=jboss.server.data.dir)
ソケットバインディング
ソケットベースのメカニズムが使用される場合に、トランザクションマネージャーがリカバリーおよびトランザクション識別子を生成するために使用されるソケットバインディングの名前を指定します。一意の識別子生成の詳細は、process-id-socket-max-ports を参照してください。ソケットバインディングは、管理コンソールの Server タブでサーバーグループごとに指定されます。
/profile=default/subsystem=transactions/:write-attribute(name=socket-binding,value=txn-recovery-environment)
ソケットバインディングのステータス
Transaction Status マネージャーに使用するソケットバインディングを指定します。
この設定オプションはサポート対象外です。
リカバリーリスナー (Recovery Listener)
トランザクションリカバリーのプロセスがネットワークソケットをリッスンするかどうかを指定します。デフォルトは false です。
/profile=default/subsystem=transactions/:write-attribute(name=recovery-listener,value=false)
以下のオプションは高度な使用を目的としており、管理 CLI を使用した場合のみ変更できます。デフォルト設定から変更する場合は注意してください。詳細は、Red Hat グローバルサポートサービス にお問い合わせください。

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

オプション 説明 CLI コマンド
jts
Java Transaction Service (JTS) トランザクションを使用するかどうかを指定します。デフォルト値は false で、JTA トランザクションのみを使用します。
/profile=default/subsystem=transactions/:write-attribute(name=jts,value=false)
node-identifier
トランザクションマネージャーのノード識別子。このオプションは以下の場合に必要になります。
  • JTS 対 JTS の通信
  • 2 つのトランザクションマネージャーが共有のリソースマネージャーにアクセスする場合
  • 2 つのトランザクションマネージャーが共有のオブジェクトマネージャーにアクセスする場合
リカバリー中にデータの整合性を強制する必要があるため、各トランザクションマネージャーの node-identifier は一意である必要があります。複数のノードが同じリソースマネージャーと対話したり、トランザクションオブジェクトストアを共有したりするため、node-identifier は JTA に対しても一意である必要があります。
/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 を参照してください。process-id-socket-binding を有効にするには、process-id-uuidfalse に設定します。
/profile=default/subsystem=transactions/:write-attribute(name=process-id-uuid,value=true)
process-id-socket-binding
トランザクションマネージャーがソケットベースのプロセス ID を使用する必要がある場合に使用するソケットバインディング設定の名前。undefinedprocess-id-uuid の場合、true になります。それ以外の場合には設定する必要があります。
/profile=default/subsystem=transactions/:write-attribute(name=process-id-socket-binding,value=true)
use-hornetq-store
トランザクションログには、ファイルベースのストレージの代わりに HornetQ のジャーナルストレージメカニズムを使用します。デフォルトでは無効になっていますが、I/O パフォーマンスが改善されます。個別のトランザクションマネージャーの JTS トランザクションを使用することは推奨されません。このオプションを変更する場合は、shutdown コマンドを使用してサーバーを再起動して変更を反映する必要があります。
/profile=default/subsystem=transactions/:write-attribute(name=use-hornetq-store,value=false)

19.1.3. JTA Transaction API を使用するようデータソースを設定

概要

ここでは、データソースで Java Transaction API (JTA) を有効にする方法を説明します。

前提条件

このタスクを続行するには、次の条件を満たしている必要があります。

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

手順19.1 Java Transaction API を使用するようデータソースを設定

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

    JBoss EAP 6 を管理対象ドメインまたはスタンドアロンサーバーで実行するかによって、設定ファイルの場所は異なります。
    • 管理対象ドメイン

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

      スタンドアロンサーバーのデフォルト設定ファイルは、Red Hat Enterprise Linux の場合は EAP_HOME/standalone/configuration/standalone.xml、Microsoft Windows Server の場合は 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 に設定します。

    直前の手順のように、&lt ;datasource& gt; タグの内容に以下を追加します: jta="true"
    特定のユースケース(読み取り専用のデータソースの定義など)がない場合、Red Hat は、デフォルト値の jta=true を上書きすることを推奨していません。この設定は、データソースが Java Transaction API を反映し、JCA 実装による接続の追跡を改善できることを示します。
  4. 設定を保存します。

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

    JBoss EAP 6 サーバーを再起動します。

結果

JBoss EAP 6 が起動し、データソースが Java Transaction API を使用するように設定されます。

19.1.4. XA Datasource の設定

前提条件

管理コンソールへのログイン

  1. 新しいデータソースを追加します。

    新しいデータソースを JBoss EAP 6 に追加します。上部の XA データソース タブをクリックします。
    注記
    JBoss EAP 6 に新しいデータソース 『を追加する方法については、『 『Administration and Configuration Guide』 』の「Creating an XA Datasource with the Management Interfaces』 」を参照してください。
  2. 必要に応じて他のプロパティーを設定します。

    すべてのデータソースパラメーターは 「データソースのパラメーター」 に記載されています。

結果

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

19.1.5. トランザクションログメッセージ

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

表19.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());
この結果、上記のように同じスレッドがトランザクションをロールバックすることが示されます。

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

概要

この手順を使用して、JBoss EAP 6 の他のロギング設定とは関係なく、トランザクションに関するログに記録される情報量を制御します。メイン手順では、Web ベースの管理コンソールでこれを行う方法を説明します。管理 CLI コマンドは後で指定されます。

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

  1. ログ設定領域に移動します。

    管理コンソールで、Configuration タブをクリックします。管理対象ドメインを使用する場合は、左上の Profile 選択ボックスから、設定するサーバープロファイルを選択します。
    Core メニューを展開し、Logging を選択します。
  2. com.arjuna 属性を編集します。

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

    トランザクションログのレベル (詳細度の高い順)

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