protected synchronized void doClose ( ) { try { LockManager lm = getImplementation ( ) . getLockManager ( ) ; Enumeration en = objectEnvelopeTable . elements ( ) ; while ( en . hasMoreElements ( ) ) { ObjectEnvelope oe = ( ObjectEnvelope ) en . nextElement ( ) ; lm . releaseLock ( this , oe . getIdentity ( ) , oe . getObject ( ) ) ; } //remove locks for objects which haven't been materialized yet for ( Iterator it = unmaterializedLocks . iterator ( ) ; it . hasNext ( ) ; ) { lm . releaseLock ( this , it . next ( ) ) ; } // this tx is no longer interested in materialization callbacks unRegisterFromAllIndirectionHandlers ( ) ; unRegisterFromAllCollectionProxies ( ) ; } finally { /** * MBAIRD: Be nice and close the table to release all refs */ if ( log . isDebugEnabled ( ) ) log . debug ( "Close Transaction and release current PB " + broker + " on tx " + this ) ; // remove current thread from LocalTxManager // to avoid problems for succeeding calls of the same thread implementation . getTxManager ( ) . deregisterTx ( this ) ; // now cleanup and prepare for reuse refresh ( ) ; } }
Close a transaction and do all the cleanup associated with it .