code: public synchronized void begin()
      {
          checkForBegin();
          if (log.isDebugEnabled()) log.debug("Begin transaction was called on tx " + this);
          // initialize the ObjectEnvelope table
          objectEnvelopeTable = new ObjectEnvelopeTable(this);
          // register transaction
          implementation.getTxManager().registerTx(this);
          // mark tx as active (open)
          txStatus = Status.STATUS_ACTIVE;
      }
docs: Start a transaction. Calling <code>begin</code> multiple times on the same
  transaction object, without an intervening call to <code>commit</code> or
  <code>abort</code> , causes the exception <code>
  TransactionInProgressException</code> to be thrown on the second and
  subsequent calls. Operations executed before a transaction has been opened,
  or before reopening after a transaction is aborted or committed, have
  undefined results; these may throw a <code>
  TransactionNotInProgressException</code> exception.