@Override @NotNull public TransactionBase beginTransaction() { return beginTransaction(null, false, false); }
@Override @NotNull public TransactionBase beginTransaction(final Runnable beginHook) { return beginTransaction(beginHook, false, false); }
@NotNull @Override public Transaction beginExclusiveTransaction() { return beginTransaction(null, true, false); }
@NotNull @Override public Transaction beginExclusiveTransaction(Runnable beginHook) { return beginTransaction(beginHook, true, false); }
@NotNull @Override protected TransactionBase beginTransaction(Runnable beginHook, boolean exclusive, boolean cloneMeta) { final TransactionBase result = super.beginTransaction(beginHook, exclusive, cloneMeta); setCurrentTransaction(result); return result; }
@Override public void executeInTransaction(@NotNull final TransactionalExecutable executable) { executeInTransaction(executable, beginTransaction()); }
@Override public <T> T computeInTransaction(@NotNull TransactionalComputable<T> computable) { return computeInTransaction(computable, beginTransaction()); }
@Override public void beforeSettingChanged(@NotNull String key, @NotNull Object value, @NotNull Map<String, Object> context) { if (key.equals(EnvironmentConfig.ENV_IS_READONLY)) { if (log.getConfig().getReaderWriterProvider().isReadonly()) { throw new InvalidSettingException("Can't modify read-only state in run time since DataReaderWriterProvider is read-only"); } if (Boolean.TRUE.equals(value)) { suspendGC(); final TransactionBase txn = beginTransaction(); try { if (!txn.isReadonly()) { gc.getUtilizationProfile().forceSave(txn); txn.setCommitHook(new Runnable() { @Override public void run() { EnvironmentConfig.suppressConfigChangeListenersForThread(); ec.setEnvIsReadonly(true); EnvironmentConfig.resumeConfigChangeListenersForThread(); } }); ((ReadWriteTransaction) txn).forceFlush(); } } finally { txn.abort(); } } } }