- public synchronized ListenableFuture<RpcResult<TransactionStatus>> commit(
- final DOMDataWriteTransaction transaction, final Iterable<DOMStoreThreePhaseCommitCohort> cohorts) {
- return coordinator.submit(transaction, cohorts, Optional.<DOMDataCommitErrorListener> of(this));
+ public <T> ListenableFuture<T> commit(final DOMDataWriteTransaction transaction,
+ final Collection<DOMStoreThreePhaseCommitCohort> cohorts, final Supplier<T> futureValueSupplier) {
+ checkNotFailed();
+ checkNotClosed();
+
+ final ListenableFuture<T> ret = broker.commit(transaction, cohorts, futureValueSupplier);
+
+ COUNTER_UPDATER.incrementAndGet(this);
+ Futures.addCallback(ret, new FutureCallback<T>() {
+ @Override
+ public void onSuccess(final T result) {
+ transactionCompleted();
+ }
+
+ @Override
+ public void onFailure(final Throwable throwable) {
+ transactionFailed(transaction, throwable);
+ }
+ }, MoreExecutors.directExecutor());
+
+ return ret;