org.firebirdsql.gds.ng.wire

## Class AbstractFbWireBlob

- java.lang.Object
- - org.firebirdsql.gds.ng.AbstractFbBlob
  - - org.firebirdsql.gds.ng.wire.AbstractFbWireBlob

- All Implemented Interfaces:
    java.lang.AutoCloseable, FbBlob, DatabaseListener, ExceptionListenable, TransactionListener, FbWireBlob
  Direct Known Subclasses:
    AbstractFbWireInputBlob, AbstractFbWireOutputBlob

      public abstract class AbstractFbWireBlob
      extends AbstractFbBlob
      implements FbWireBlob

  Since:
    3.0
  Author:
    Mark Rotteveel

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected static class` | `AbstractFbWireBlob.BlobOpenOperation` Operation codes to open an input or output blob.

    - ### Nested classes/interfaces inherited from class org.firebirdsql.gds.ng.AbstractFbBlob

      `AbstractFbBlob.BlobState`

    - ### Nested classes/interfaces inherited from interface org.firebirdsql.gds.ng.FbBlob

      `FbBlob.SeekMode`

  - ### Field Summary

    - ### Fields inherited from class org.firebirdsql.gds.ng.AbstractFbBlob

      `exceptionListenerDispatcher`

    - ### Fields inherited from interface org.firebirdsql.gds.ng.FbBlob

      `NO_BLOB_ID`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `AbstractFbWireBlob(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `cancelImpl()` Internal implementation of `AbstractFbBlob.cancel()`.
    `protected void` | `closeImpl()` Internal implementation of `AbstractFbBlob.close()`.
    `byte[]` | `getBlobInfo(byte[] requestItems, int bufferLength)` Request blob info.
    `FbWireDatabase` | `getDatabase()`
    `int` | `getHandle()` Returns the blob handle identifier.
    `protected XdrInputStream` | `getXdrIn()` Gets the XdrInputStream.
    `protected XdrOutputStream` | `getXdrOut()` Gets the XdrOutputStream.
    `protected void` | `processOpenResponse(GenericResponse genericResponse)`
    `protected void` | `receiveOpenResponse()`
    `protected void` | `releaseBlob(int releaseOperation)` Release this blob with the specified operation.
    `protected void` | `releaseResources()` Release Java resources held.
    `protected void` | `sendOpen(AbstractFbWireBlob.BlobOpenOperation openOperation, boolean flush)`
    `protected void` | `setHandle(int blobHandle)`
    `protected <T> DeferredAction` | `wrapDeferredResponse(DeferredResponse<T> deferredResponse, java.util.function.Function<Response,T> responseMapper)` Wraps a deferred response to produce a deferred action that can be added using `FbWireDatabase.enqueueDeferredAction(DeferredAction)`, notifying the exception listener of this blob for exceptions.

    - ### Methods inherited from class org.firebirdsql.gds.ng.AbstractFbBlob

      `addExceptionListener, cancel, checkBlobClosed, checkBlobOpen, checkDatabaseAttached, checkTransactionActive, clearDatabase, clearDeferredException, clearTransaction, close, createBlobLengthProcessor, detached, detaching, errorOccurred, get, get, get, getBlobInfo, getBlobParameterBuffer, getKnownBlobInfoItems, getMaximumSegmentSize, getState, getTransaction, isEndingTransaction, isEof, isOpen, length, putSegment, registerDeferredException, removeExceptionListener, resetEof, setEof, setState, throwAndClearDeferredException, transactionStateChanged, transferDeferredExceptionTo, validateBufferLength, warningReceived, withLock`

    - ### 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.FbBlob

      `cancel, close, get, get, getBlobId, getBlobInfo, getMaximumSegmentSize, getSegment, isEof, isOpen, isOutput, length, open, put, putSegment, seek`

    - ### Methods inherited from interface org.firebirdsql.gds.ng.listeners.ExceptionListenable

      `addExceptionListener, removeExceptionListener`

- - ### Constructor Detail

    - #### AbstractFbWireBlob

          protected AbstractFbWireBlob(FbWireDatabase database,
                                       FbWireTransaction transaction,
                                       BlobParameterBuffer blobParameterBuffer)
                                throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

  - ### Method Detail

    - #### getDatabase

          public FbWireDatabase getDatabase()

      Specified by:
        `getDatabase` in interface `FbBlob`
      Overrides:
        `getDatabase` in class `AbstractFbBlob`
      Returns:
        The database connection that created this blob

    - #### getHandle

          public final int getHandle()

      Description copied from interface: `FbBlob`
      Returns the blob handle identifier.

      If the blob wasn't opened yet, this will return `0`. If the blob was deferred opened (client-side only), this will return an invalid blob handle value (e.g. `0xFFFF`, though this value is potentially protocol/implementation specific).

      Specified by:
        `getHandle` in interface `FbBlob`
      Returns:
        The Firebird blob handle identifier

    - #### setHandle

          protected final void setHandle(int blobHandle)

      Parameters:
        `blobHandle` - The Firebird blob handle identifier

    - #### releaseBlob

          protected void releaseBlob(int releaseOperation)
                              throws java.sql.SQLException

      Release this blob with the specified operation.

      Implementations should only do the operation and not perform any further clean up or checks on attached database and active transaction, as those checks and clean up should be done by the caller.

      If the blob state is `AbstractFbBlob.BlobState.DELAYED_OPEN`, this method is effectively a no-op.

      Parameters:
        `releaseOperation` - Either `WireProtocolConstants.op_close_blob` or `WireProtocolConstants.op_cancel_blob`
      Throws:
        `java.sql.SQLException` - For database communication errors.

    - #### sendOpen

          protected final void sendOpen(AbstractFbWireBlob.BlobOpenOperation openOperation,
                                        boolean flush)
                                 throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### receiveOpenResponse

          protected final void receiveOpenResponse()
                                            throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### processOpenResponse

          protected void processOpenResponse(GenericResponse genericResponse)
                                      throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### closeImpl

          protected void closeImpl()
                            throws java.sql.SQLException

      Description copied from class: `AbstractFbBlob`
      Internal implementation of `AbstractFbBlob.close()`. The implementation does not need to check for attached database and active transaction, nor does it need to mark this blob as closed.
      Specified by:
        `closeImpl` in class `AbstractFbBlob`
      Throws:
        `java.sql.SQLException`

    - #### cancelImpl

          protected void cancelImpl()
                             throws java.sql.SQLException

      Description copied from class: `AbstractFbBlob`
      Internal implementation of `AbstractFbBlob.cancel()`. The implementation does not need to check for attached database and active transaction, nor does it need to mark this blob as closed.
      Specified by:
        `cancelImpl` in class `AbstractFbBlob`
      Throws:
        `java.sql.SQLException`

    - #### releaseResources

          protected void releaseResources()

      Description copied from class: `AbstractFbBlob`
      Release Java resources held. This should not communicate with the Firebird server.
      Specified by:
        `releaseResources` in class `AbstractFbBlob`

    - #### getBlobInfo

          public byte[] getBlobInfo(byte[] requestItems,
                                    int bufferLength)
                             throws java.sql.SQLException

      Description copied from interface: `FbBlob`
      Request blob info.
      Specified by:
        `getBlobInfo` in interface `FbBlob`
      Parameters:
        `requestItems` - Array of info items to request
        `bufferLength` - Response buffer length to use
      Returns:
        Response buffer
      Throws:
        `java.sql.SQLException`

    - #### getXdrIn

          protected final XdrInputStream getXdrIn()
                                           throws java.sql.SQLException

      Gets the XdrInputStream.
      Returns:
        instance of XdrInputStream
      Throws:
        `java.sql.SQLException` - if no connection is opened or when exceptions occur retrieving the InputStream
      Since:
        5.0.7

    - #### getXdrOut

          protected final XdrOutputStream getXdrOut()
                                             throws java.sql.SQLException

      Gets the XdrOutputStream.
      Returns:
        instance of XdrOutputStream
      Throws:
        `java.sql.SQLException` - if no connection is opened or when exceptions occur retrieving the OutputStream
      Since:
        5.0.7

    - #### wrapDeferredResponse

          protected final <T> DeferredAction wrapDeferredResponse(DeferredResponse<T> deferredResponse,
                                                                  java.util.function.Function<Response,T> responseMapper)

      Wraps a deferred response to produce a deferred action that can be added using `FbWireDatabase.enqueueDeferredAction(DeferredAction)`, notifying the exception listener of this blob for exceptions.

      This should only be used with protocol versions that support deferred responses. Its placement in the hierarchy is due to support for both input and output blobs.

      Type Parameters:
        `T` - type of deferred response
      Parameters:
        `deferredResponse` - deferred response to wrap
        `responseMapper` - Function to map a `Response` to the object expected by the deferred response
      Returns:
        deferred action
      Since:
        5.0.7

Copyright © 2001-2025 Jaybird (Firebird JDBC) team. All rights reserved.