3.9. トランザクションのタイムアウト

ライフサイクルを制御するため、タイムアウトの値をトランザクションと関連付けることができます。トランザクションがタイムアウトの値に達する前に終了 (コミットあるいはロールバック) された場合、トランザクションシステムは自動的にロールバックされます。XAResource インターフェースは、リソースマネージャに伝播する現在のトランザクションと関連づいたタイムアウトができるような操作に対応しており、リソースマネージャに関連づいたデフォルトのタイムアウトをオーバーライドします (対応している場合)。長時間実行しているトランザクションのライフサイクルがデフォルトよりも長い場合に、これは便利です。タイムアウトが変更されないと、トランザクションが終了する前にリソースマネージャがロールバックするため、結果的にトランザクションもロールバックすることになります。
トランザクションに対しタイムアウトの値が明示的に設定されていない場合、あるいは値に 0 が指定されている場合、実装固有のデフォルト値が利用されます。JBoss Transaction Service の場合、このデフォルト値を設定する方法は、どのJTA 実装を使っているかにより左右されます。
ローカルのJTA
com.arjuna.ats.arjuna.coordinator.defaultTimeout プロパティに秒数を設定します。デフォルト値は 60 秒。
JTS
com.arjuna.ats.jts.defaultTimeout プロパティに秒数を設定します。デフォルト値は0で、トランザクションのタイムアウトはありません。
残念ながら、リソースマネージャでトランザクションと同じタイムアウトを採用する状況が適切でない場合もあります。例えば、システム管理者は外部のエンティティに制御を渡さずに、リソースマネージャのライフタイムを制御する必要がある場合もあります。setTransactionTimeoutXAResourceインスタンスで呼び出すかどうかに関して、JBoss Transaction Service は all or nothing のアプローチを採っています。
com.arjuna.ats.jta.xaTransactionTimeoutEnabled プロパティがtrue (デフォルト) に設定されると、全インスタンスで呼び出されます。代わりに、com.arjuna.ats.jta.common.ConfigurationsetXATransactionTimeoutEnabled メソッドを使うこともできます。