code: 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();
          }
      }
docs: Close a transaction and do all the cleanup associated with it.