Module org.firebirdsql.jaybird
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:
  `AutoCloseable`, `FbAttachment`, `ExceptionListenable`

Direct Known Subclasses:
  `AbstractFbDatabase`, `AbstractFbService`

public abstract class AbstractFbAttachment<T extends AbstractConnection<? extends IAttachProperties<?>,? extends FbAttachment>> extends Object implements FbAttachment
Common behavior for `AbstractFbService` and `AbstractFbDatabase`.

Since:
  3.0
Author:
  Mark Rotteveel

## Field Summary

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

## Constructor Summary

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

## Method Summary

Modifier and Type
Method
Description
`final 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.
`final DatatypeCoder`
`getDatatypeCoder()`
`final Encoding`
`getEncoding()`
`final IEncodingFactory`
`getEncodingFactory()`
`int`
`getNetworkTimeout()`
Gets the current network timeout for this attachment.
`GDSServerVersion`
`getServerVersion()`
`boolean`
`isAttached()`
Current attachment status.
`final boolean`
`isLockedByCurrentThread()`
Queries if the lock is held by the current thread.
`final void`
`removeExceptionListener(ExceptionListener listener)`
Removes an exception listener to this object.
`protected final void`
`requireNotAttached()`
Checks if not currently attached.
`protected final void`
`safelyDetach()`
Performs `FbAttachment.close()` suppressing any exception.
`protected final void`
`setAttached()`
Called when this attachment is attached.
`protected final void`
`setDetached()`
Called when this attachment is detached.
`protected final void`
`setServerVersion(String... versionStrings)`
Sets the Firebird version from one or more version string elements.
`final 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 Details

### exceptionListenerDispatcher

protected final ExceptionListenerDispatcher exceptionListenerDispatcher

### connection

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

## Constructor Details

### AbstractFbAttachment

protected AbstractFbAttachment(T connection, DatatypeCoder datatypeCoder)

## Method Details

### 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 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:
  `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(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

### 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 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:
  `SQLException` - If this attachment is closed
  `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 SQLException
Checks if the attachment is connected, and throws a `SQLException` if it isn't connected.

Throws:
  `SQLException`

### safelyDetach

protected final void safelyDetach()
Performs `FbAttachment.close()` suppressing any exception.

### requireNotAttached

protected final void requireNotAttached() throws SQLException
Checks if not currently attached.

Throws:
  `SQLException` - if this attachment is currently attached
Since:
  6