+
+ @SuppressWarnings({"unchecked", "checkstyle:IllegalCatch"})
+ @Override
+ public LocalThreePhaseCommitCohort onTransactionReady(@Nonnull DOMStoreWriteTransaction tx,
+ @Nullable Exception operationError) {
+ Preconditions.checkArgument(tx instanceof SnapshotBackedWriteTransaction);
+ if (operationError != null) {
+ return new LocalChainThreePhaseCommitCohort((SnapshotBackedWriteTransaction<TransactionIdentifier>)tx,
+ operationError);
+ }
+
+ try {
+ return (LocalThreePhaseCommitCohort) tx.ready();
+ } catch (Exception e) {
+ // Unfortunately we need to cast to SnapshotBackedWriteTransaction here as it's required by
+ // LocalThreePhaseCommitCohort and the base class.
+ return new LocalChainThreePhaseCommitCohort((SnapshotBackedWriteTransaction<TransactionIdentifier>)tx, e);
+ }
+ }
+
+ private class LocalChainThreePhaseCommitCohort extends LocalThreePhaseCommitCohort {
+
+ protected LocalChainThreePhaseCommitCohort(SnapshotBackedWriteTransaction<TransactionIdentifier> transaction,
+ DataTreeModification modification, Exception operationError) {
+ super(parent.getActorContext(), leader, transaction, modification, operationError);
+ }
+
+ protected LocalChainThreePhaseCommitCohort(SnapshotBackedWriteTransaction<TransactionIdentifier> transaction,
+ Exception operationError) {
+ super(parent.getActorContext(), leader, transaction, operationError);
+ }
+
+ @Override
+ protected void transactionAborted(SnapshotBackedWriteTransaction<TransactionIdentifier> transaction) {
+ onTransactionFailed(transaction, ABORTED);
+ }
+
+ @Override
+ protected void transactionCommitted(SnapshotBackedWriteTransaction<TransactionIdentifier> transaction) {
+ onTransactionCommited(transaction);
+ }
+ }