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が返る.