+ * Unlike {@link #createTransactionChain()}, the transaction chain returned by this method is allowed to merge + * individual transactions into larger chunks. When transactions are merged, the results must be indistinguishable + * from the result of all operations having been performed on a single transaction. + * + *
+ * When transactions are merged, {@link DOMTransactionChain#newReadOnlyTransaction()} may actually be backed by + * a read-write transaction, hence an additional restriction on API use is that multiple read-only transactions + * may not be open at the same time. * - * @param listener Transaction chain event listener * @return A new transaction chain. */ - DOMTransactionChain createTransactionChain(DOMTransactionChainListener listener); + DOMTransactionChain createMergingTransactionChain(); + + /** + * Optional support for allowing a {@link DOMDataTreeCommitCohort} to participate in the process of committing + * {@link DOMDataTreeWriteTransaction}s. + */ + interface CommitCohortExtension extends Extension { + /** + * Register commit cohort which will participate in three-phase commit protocols of + * {@link DOMDataTreeWriteTransaction} in data broker associated with this instance of extension. + * + * @param path Subtree path on which commit cohort operates. + * @param cohort A {@link DOMDataTreeCommitCohort} + * @return A {@link Registration} + * @throws NullPointerException if any argument is {@code null} + */ + Registration registerCommitCohort(DOMDataTreeIdentifier path, DOMDataTreeCommitCohort cohort); + } }