public static Locker getWritableLocker__wrappee__base(
     Environment env,
     Transaction userTxn,
     boolean dbIsTransactional,
     boolean retainNonTxnLocks,
     TransactionConfig autoCommitConfig)
     throws DatabaseException {
   EnvironmentImpl envImpl = DbInternal.envGetEnvironmentImpl(env);
   boolean envIsTransactional = envImpl.isTransactional();
   if (userTxn == null) {
     Transaction xaLocker = env.getThreadTransaction();
     if (xaLocker != null) {
       return DbInternal.getLocker(xaLocker);
     }
   }
   if (dbIsTransactional && userTxn == null) {
     if (autoCommitConfig == null) {
       autoCommitConfig = DbInternal.getDefaultTxnConfig(env);
     }
     return new AutoTxn(envImpl, autoCommitConfig);
   } else if (userTxn == null) {
     if (retainNonTxnLocks) {
       return new BasicLocker(envImpl);
     } else {
       return new ThreadLocker(envImpl);
     }
   } else {
     if (!envIsTransactional) {
       throw new DatabaseException(
           "A Transaction cannot be used because the"
               + " environment was opened"
               + " non-transactionally");
     }
     if (!dbIsTransactional) {
       throw new DatabaseException(
           "A Transaction cannot be used because the"
               + " database was opened"
               + " non-transactionally");
     }
     Locker locker = DbInternal.getLocker(userTxn);
     if (locker.isReadCommittedIsolation() && !retainNonTxnLocks) {
       return new ReadCommittedLocker(envImpl, locker);
     } else {
       return locker;
     }
   }
 }
 public static Locker getReadableLocker__wrappee__base(
     Environment env,
     Transaction userTxn,
     boolean dbIsTransactional,
     boolean retainNonTxnLocks,
     boolean readCommittedIsolation)
     throws DatabaseException {
   if (userTxn != null && !dbIsTransactional) {
     throw new DatabaseException(
         "A Transaction cannot be used because the"
             + " database was opened"
             + " non-transactionally");
   }
   Locker locker = null;
   if (userTxn != null) {
     locker = DbInternal.getLocker(userTxn);
     if (locker.isReadCommittedIsolation()) {
       readCommittedIsolation = true;
     }
   }
   return getReadableLocker(env, locker, retainNonTxnLocks, readCommittedIsolation);
 }
 public static Locker getReadableLocker__wrappee__base(
     Environment env,
     Database dbHandle,
     Locker locker,
     boolean retainNonTxnLocks,
     boolean readCommittedIsolation)
     throws DatabaseException {
   DatabaseImpl dbImpl = DbInternal.dbGetDatabaseImpl(dbHandle);
   if (!dbImpl.isTransactional() && locker != null && locker.isTransactional()) {
     throw new DatabaseException(
         "A Transaction cannot be used because the"
             + " database was opened"
             + " non-transactionally");
   }
   if (locker != null && !locker.isTransactional() && !retainNonTxnLocks) {
     locker = null;
   }
   if (locker != null && locker.isReadCommittedIsolation()) {
     readCommittedIsolation = true;
   }
   return getReadableLocker(env, locker, retainNonTxnLocks, readCommittedIsolation);
 }