Package com.apple.foundationdb

## Class FDBException

- java.lang.Object
- - java.lang.Throwable
  - - java.lang.Exception
    - - java.lang.RuntimeException
      - - com.apple.foundationdb.FDBException

All Implemented Interfaces:
  `CloneableException`, `java.io.Serializable`

    public class FDBException
    extends java.lang.RuntimeException
    implements CloneableException

An Error from the native layers of FoundationDB. Each `FDBException` sets the `message` of the underlying Java `Exception`. FDB exceptions expose a number of functions including, for example, `isRetryable()` that evaluate predicates on the internal FDB error. Most clients should use those methods in order to implement special handling for certain errors if their application requires it.

Errors in FDB should generally be retried if they match the `isRetryable()` predicate. In addition, as with any distributed system, certain classes of errors may fail in such a way that it is unclear whether the transaction succeeded (they `may be committed` or not). To handle these cases, clients are generally advised to make their database operations idempotent and to place their operations within retry loops. The FDB Java API provides some default retry loops within the `Database` interface. See the discussion within the documentation of `Database.runAsync()` for more details.

See Also:
  `Transaction.onError()`, `Database.runAsync()`, Serialized Form

### Constructor Summary

Constructors
`FDBException​(java.lang.String message, int code)` A general constructor.

### Method Summary

All Methods Instance Methods Concrete Methods
`int` `getCode()` Gets the code for this error.
`boolean` `isMaybeCommitted()` Returns `true` if the error indicates the transaction may have succeeded, though not in a way the system can verify.
`boolean` `isRetryable()` Returns `true` if the error indicates the operations in the transactions should be retried because of transient error.
`boolean` `isRetryableNotCommitted()` Returns `true` if the error indicates the transaction has not committed, though in a way that can be retried.
`boolean` `isSuccess()` Determine if this `FDBException` represents a success code from the native layer.
`java.lang.Exception` `retargetClone()` Create and return a new `Exception` that has a backtrace including the calling line of code.

### Methods inherited from class java.lang.Throwable

`addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString`

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

`equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### FDBException

    public FDBException​(java.lang.String message,
                        int code)

A general constructor. Not for use by client code.

Parameters:
  `message` - error message of this exception
  `code` - internal FDB error code of this exception

### Method Detail

#### getCode

    public int getCode()

Gets the code for this error. A list of common errors codes are published elsewhere within our documentation.

Returns:
  the internal FDB error code

#### isSuccess

    public boolean isSuccess()

Determine if this `FDBException` represents a success code from the native layer.

Returns:
  `true` if this error represents success, `false` otherwise

#### retargetClone

    public java.lang.Exception retargetClone()

Description copied from interface: `CloneableException`
Create and return a new `Exception` that has a backtrace including the calling line of code.

Specified by:
  `retargetClone` in interface `CloneableException`
Returns:
  a newly created `Exception`.

#### isRetryable

    public boolean isRetryable()

Returns `true` if the error indicates the operations in the transactions should be retried because of transient error.

Returns:
  `true` if this `FDBException` is `retryable`

#### isMaybeCommitted

    public boolean isMaybeCommitted()

Returns `true` if the error indicates the transaction may have succeeded, though not in a way the system can verify.

Returns:
  `true` if this `FDBException` is `maybe_committed`

#### isRetryableNotCommitted

    public boolean isRetryableNotCommitted()

Returns `true` if the error indicates the transaction has not committed, though in a way that can be retried.

Returns:
  `true` if this `FDBException` is `retryable_not_committed`