code: public TransactionWrapper startTransaction() throws DataAccessException {
          TransactionWrapper transaction = new TransactionWrapper();
          TransactionUtil transUtil = TransactionUtil.getInstance();
          TransactionManager transManager = transUtil.getTransactionManager();
          try {
              if (logger.isTraceEnabled()) {
                  logger.trace("startTransaction - transaction manager=" + transManager.hashCode() + " (status=" + transManager.getStatus() + ")");
              }
              transaction.setDatabaseAccess(db);
              if (transManager.getStatus()==Status.STATUS_NO_TRANSACTION) {
                  transaction.setTransactionAlreadyStarted(false);
                  // Get connection BEFORE beginning transaction to avoid transaction timeout (10 minutes) exceptions (Fail to stop the transaction)
                  db.openConnection().setAutoCommit(false); // Also set autoCommit to false
                  transManager.begin();
                  transUtil.setCurrentConnection(db.getConnection());
              } else {
                  if (logger.isTraceEnabled())
                      logger.trace("   ... transaction already started, status=" + transManager.getStatus());
                  transaction.setTransactionAlreadyStarted(true);
                  if (db.connectionIsOpen()) {
                      transaction.setDatabaseConnectionAlreadyOpened(true);
                  } else {
                      if (logger.isTraceEnabled())
                          logger.trace("   ... but database is not open");
                      // not opened through this DatabaseAccess
                      transaction.setDatabaseConnectionAlreadyOpened(false);
                      if (transUtil.getCurrentConnection() == null) {
                          db.openConnection().setAutoCommit(false);  // Set autoCommit to false
                          transUtil.setCurrentConnection(db.getConnection());
                      } else {
                          db.setConnection(transUtil.getCurrentConnection());
                      }
                  }
              }
              transaction.setTransaction(transManager.getTransaction());
              return transaction;
          } catch (Throwable e) {
              if (transaction.getTransaction()!=null) stopTransaction(transaction);
              throw new DataAccessException(0, "Fail to start transaction", e);
          }
      }
docs: Should only be used with MDW data source