Package org.firebirdsql.gds.ng

## Class AbstractFbAttachment<T extends AbstractConnection<? extends IAttachProperties<?>,​? extends FbAttachment>>

- java.lang.Object
- - org.firebirdsql.gds.ng.AbstractFbAttachment<T>

- All Implemented Interfaces:
    `java.lang.AutoCloseable`, `FbAttachment`, `ExceptionListenable`
  Direct Known Subclasses:
    `AbstractFbDatabase`, `AbstractFbService`

      public abstract class AbstractFbAttachment<T extends AbstractConnection<? extends IAttachProperties<?>,​? extends FbAttachment>>
      extends java.lang.Object
      implements FbAttachment

  Common behavior for `AbstractFbService` and `AbstractFbDatabase`.
  Since:
    3.0
  Author:
    Mark Rotteveel

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected T` | `connection` |
    `protected ExceptionListenerDispatcher` | `exceptionListenerDispatcher` |

  - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `AbstractFbAttachment​(T connection, DatatypeCoder datatypeCoder)` |

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addExceptionListener​(ExceptionListener listener)` | Adds an exception listener to this object.
    `protected abstract void` | `checkConnected()` | Checks if the attachment is connected, and throws a `SQLException` if it isn't connected.
    `void` | `forceClose()` | Forces the connection to close without proper detach or cleanup.
    `DatatypeCoder` | `getDatatypeCoder()` |
    `Encoding` | `getEncoding()` |
    `IEncodingFactory` | `getEncodingFactory()` |
    `int` | `getNetworkTimeout()` | Gets the current network timeout for this attachment.
    `GDSServerVersion` | `getServerVersion()` |
    `protected org.firebirdsql.gds.ng.ServerVersionInformation` | `getServerVersionInformation()` |
    `boolean` | `isAttached()` | Current attachment status.
    `boolean` | `isLockedByCurrentThread()` | Queries if the lock is held by the current thread.
    `void` | `removeExceptionListener​(ExceptionListener listener)` | Removes an exception listener to this object.
    `protected void` | `safelyDetach()` | Performs `FbAttachment.close()` suppressing any exception.
    `protected void` | `setAttached()` | Called when this attachment is attached.
    `protected void` | `setDetached()` | Called when this attachment is detached.
    `protected void` | `setServerVersion​(java.lang.String... versionStrings)` | Sets the Firebird version from one or more version string elements.
    `LockCloseable` | `withLock()` | Locks the lock with `Lock.lock()` (or equivalent).

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

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

    - ### Methods inherited from interface org.firebirdsql.gds.ng.FbAttachment

      `attach, close, getHandle, setNetworkTimeout`

- - ### Field Detail

    - #### exceptionListenerDispatcher

          protected final ExceptionListenerDispatcher exceptionListenerDispatcher

    - #### connection

          protected final T extends AbstractConnection<? extends IAttachProperties<?>,​? extends FbAttachment> connection

  - ### Constructor Detail

    - #### AbstractFbAttachment

          protected AbstractFbAttachment​(T connection,
                                         DatatypeCoder datatypeCoder)

  - ### Method Detail

    - #### withLock

          public final LockCloseable withLock()

      Description copied from interface: `FbAttachment`
      Locks the lock with `Lock.lock()` (or equivalent).

      The returned `LockClosable` can be used to unlock, preferably for use in a try-with-resources.

      Specified by:
        `withLock` in interface `FbAttachment`
      Returns:
        lock closeable which unlocks the lock on close

    - #### isLockedByCurrentThread

          public final boolean isLockedByCurrentThread()

      Description copied from interface: `FbAttachment`
      Queries if the lock is held by the current thread.
      Specified by:
        `isLockedByCurrentThread` in interface `FbAttachment`
      Returns:
        `true` if current thread holds this lock and `false` otherwise
      See Also:
        `ReentrantLock.isHeldByCurrentThread()`

    - #### forceClose

          public void forceClose()
                          throws java.sql.SQLException

      Forces the connection to close without proper detach or cleanup.

      If a given implementation does not support this, then this method should call `FbAttachment.close()`.

      Default implementation, calls `FbAttachment.close()`

      Specified by:
        `forceClose` in interface `FbAttachment`
      Throws:
        `java.sql.SQLException` - For problems closing the connection.

    - #### getServerVersion

          public GDSServerVersion getServerVersion()

      Specified by:
        `getServerVersion` in interface `FbAttachment`
      Returns:
        Firebird version string

    - #### setServerVersion

          protected final void setServerVersion​(java.lang.String... versionStrings)

      Sets the Firebird version from one or more version string elements.

      This method should only be called by this instance.

      Parameters:
        `versionStrings` - Raw version strings

    - #### getServerVersionInformation

          protected org.firebirdsql.gds.ng.ServerVersionInformation getServerVersionInformation()

    - #### setAttached

          protected final void setAttached()

      Called when this attachment is attached.

      Only this `AbstractFbDatabase` instance should call this method.

    - #### isAttached

          public boolean isAttached()

      Description copied from interface: `FbAttachment`
      Current attachment status.
      Specified by:
        `isAttached` in interface `FbAttachment`
      Returns:
        `true` if connected to the server and attached to a database or service, `false` otherwise.

    - #### setDetached

          protected final void setDetached()

      Called when this attachment is detached.

      Only this `AbstractFbAttachment` instance should call this method.

    - #### getEncodingFactory

          public final IEncodingFactory getEncodingFactory()

      Specified by:
        `getEncodingFactory` in interface `FbAttachment`
      Returns:
        The `IEncodingFactory` for this connection

    - #### getEncoding

          public final Encoding getEncoding()

      Specified by:
        `getEncoding` in interface `FbAttachment`
      Returns:
        The connection encoding (should be the same as returned from calling `IEncodingFactory.getDefaultEncoding()` on the result of `FbAttachment.getEncodingFactory()`).

    - #### getDatatypeCoder

          public final DatatypeCoder getDatatypeCoder()

      Specified by:
        `getDatatypeCoder` in interface `FbAttachment`
      Returns:
        The `DatatypeCoder` for this database implementation.

    - #### getNetworkTimeout

          public int getNetworkTimeout()
                                throws java.sql.SQLException

      Description copied from interface: `FbAttachment`
      Gets the current network timeout for this attachment.
      Specified by:
        `getNetworkTimeout` in interface `FbAttachment`
      Returns:
        Timeout in milliseconds, 0 means no timeout
      Throws:
        `java.sql.SQLException` - If this attachment is closed
        `java.sql.SQLFeatureNotSupportedException` - If this attachment doesn't support network timeout

    - #### addExceptionListener

          public final void addExceptionListener​(ExceptionListener listener)

      Description copied from interface: `ExceptionListenable`
      Adds an exception listener to this object.

      Implementations use `WeakReference`.

      Specified by:
        `addExceptionListener` in interface `ExceptionListenable`
      Parameters:
        `listener` - Listener to register

    - #### removeExceptionListener

          public final void removeExceptionListener​(ExceptionListener listener)

      Description copied from interface: `ExceptionListenable`
      Removes an exception listener to this object.
      Specified by:
        `removeExceptionListener` in interface `ExceptionListenable`
      Parameters:
        `listener` - Listener to remove

    - #### checkConnected

          protected abstract void checkConnected()
                                          throws java.sql.SQLException

      Checks if the attachment is connected, and throws a `SQLException` if it isn't connected.
      Throws:
        `java.sql.SQLException`

    - #### safelyDetach

          protected final void safelyDetach()

      Performs `FbAttachment.close()` suppressing any exception.