code: public SQLTransaction beginTransaction(IsolationLevel isolationLevel, boolean forUpdateOnly) {
          N.checkArgNotNull(isolationLevel, "isolationLevel");
  
          isolationLevel = isolationLevel == IsolationLevel.DEFAULT ? _defaultIsolationLevel : isolationLevel;
  
          final String ttid = getTransactionThreadId();
          SQLTransaction transaction = threadTransactionMap.get(ttid);
  
          if (transaction == null) {
              transaction = new SQLTransaction(this, isolationLevel);
              threadTransactionMap.put(ttid, transaction);
  
              logger.info("Creating a new transaction(id={})", transaction.id());
  
          } else {
              logger.info("Reusing existing transaction(id={})", transaction.id());
          }
  
          logger.debug("Current active transactions: {}", threadTransactionMap.values());
  
          transaction.incrementAndGetRef(isolationLevel, forUpdateOnly);
  
          return transaction;
      }
docs: The connection opened in the transaction will be automatically closed after the transaction is committed or rolled back.
  DON'T close it again by calling the close method.
  
  @param isolationLevel
  @param forUpdateOnly
  @return