public void begin() throws ResourceException {
    if (DEBUG) {
      try {
        throw new NullPointerException("Asif:JCALocalTransaction:begin");
      } catch (NullPointerException npe) {
        npe.printStackTrace();
      }
    }
    try {
      if (!initDone || this.cache.isClosed()) {
        this.init();
      }
      // System.out.println("JCALocalTransaction:Asif: cache is ="+cache +
      // " for tx ="+this);
      LogWriter logger = cache.getLogger();
      if (logger.fineEnabled()) {
        logger.fine("JCALocalTransaction::begin:");
      }
      TransactionManager tm = cache.getJTATransactionManager();
      if (this.tid != null) {
        throw new LocalTransactionException(" A transaction is already in progress");
      }
      if (tm != null && tm.getTransaction() != null) {
        if (logger.fineEnabled()) {
          logger.fine("JCAManagedConnection: JTA transaction is on");
        }
        // This is having a JTA transaction. Assuming ignore jta flag is true,
        // explicitly being a gemfire transaction.
        TXStateProxy tsp = this.gfTxMgr.getTXState();
        if (tsp == null) {
          this.gfTxMgr.begin();
          tsp = this.gfTxMgr.getTXState();
          tsp.setJCATransaction();
          this.tid = tsp.getTransactionId();
          if (logger.fineEnabled()) {
            logger.fine("JCALocalTransaction:begun GFE transaction");
          }
        } else {
          throw new LocalTransactionException("GemFire is already associated with a transaction");
        }
      } else {
        if (logger.fineEnabled()) {
          logger.fine("JCAManagedConnection: JTA Transaction does not exist.");
        }
      }
    } catch (SystemException e) {
      // this.onError();
      throw new ResourceException(e);
    }
    // Not to be invoked for local transactions managed by the container
    // Iterator<ConnectionEventListener> itr = this.listeners.iterator();
    // ConnectionEvent ce = new ConnectionEvent(this,
    // ConnectionEvent.LOCAL_TRANSACTION_STARTED);
    // while (itr.hasNext()) {
    // itr.next().localTransactionStarted(ce);
    // }

  }