Package org.apache.lucene.index

## Class TwoPhaseCommitTool

- java.lang.Object
- - org.apache.lucene.index.TwoPhaseCommitTool

-     public final class TwoPhaseCommitTool
      extends Object

  A utility for executing 2-phase commit on several objects.
  See Also:
    `TwoPhaseCommit`
  WARNING: This API is experimental and might change in incompatible ways in the next release.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `TwoPhaseCommitTool.CommitFailException` | Thrown by `execute(TwoPhaseCommit...)` when an object fails to commit().
    `static class` | `TwoPhaseCommitTool.PrepareCommitFailException` | Thrown by `execute(TwoPhaseCommit...)` when an object fails to prepareCommit().

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static void` | `execute​(TwoPhaseCommit... objects)` | Executes a 2-phase commit algorithm by first `TwoPhaseCommit.prepareCommit()` all objects and only if all succeed, it proceeds with `TwoPhaseCommit.commit()`.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### execute

          public static void execute​(TwoPhaseCommit... objects)
                              throws TwoPhaseCommitTool.PrepareCommitFailException,
                                     TwoPhaseCommitTool.CommitFailException

      Executes a 2-phase commit algorithm by first `TwoPhaseCommit.prepareCommit()` all objects and only if all succeed, it proceeds with `TwoPhaseCommit.commit()`. If any of the objects fail on either the preparation or actual commit, it terminates and `TwoPhaseCommit.rollback()` all of them.

      NOTE: it may happen that an object fails to commit, after few have already successfully committed. This tool will still issue a rollback instruction on them as well, but depending on the implementation, it may not have any effect.

      NOTE: if any of the objects are `null`, this method simply skips over them.

      Throws:
        `TwoPhaseCommitTool.PrepareCommitFailException` - if any of the objects fail to `TwoPhaseCommit.prepareCommit()`
        `TwoPhaseCommitTool.CommitFailException` - if any of the objects fail to `TwoPhaseCommit.commit()`