TX その14 TxManagerのgetTransaction
さて,JBossTXの続きをやろう.
先週までの調べでTransactionImplにXAResourceを登録していたのはTxConnectionManagerであることが判明している.
TxManagerのgetTransaction()メソッド実装は以下.
public Transaction getTransaction() throws SystemException { ThreadInfo ti = getThreadInfo(); TransactionImpl current = ti.tx; if (current != null && current.isDone()) { current = null; disassociateThread(ti); } return current; }
getThreadInfo()はjava.lang.ThreadLocalからデータホルダークラスであるThreadInfoオブジェクトを取得するprivateメソッド.
またTxManagerにはTransactionインスタンスのsetterメソッドは無い.従ってThreadLocalにTransactionインスタンスを持ったThreadInfoを突っ込んでおかないといけない.TxManagerをnewして何もしないでgetTransaction()を呼ぶとnullが返る.