Package 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 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 Description protected
AbstractFbWireBlob(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
cancelImpl()
Internal implementation ofAbstractFbBlob.cancel()
.protected void
closeImpl()
Internal implementation ofAbstractFbBlob.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 usingFbWireDatabase.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.listeners.ExceptionListenable
addExceptionListener, removeExceptionListener
-
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
-
-
-
-
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 interfaceFbBlob
- Overrides:
getDatabase
in classAbstractFbBlob
- 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).
-
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
- EitherWireProtocolConstants.op_close_blob
orWireProtocolConstants.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 ofAbstractFbBlob.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 classAbstractFbBlob
- Throws:
java.sql.SQLException
-
cancelImpl
protected void cancelImpl() throws java.sql.SQLException
Description copied from class:AbstractFbBlob
Internal implementation ofAbstractFbBlob.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 classAbstractFbBlob
- 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 classAbstractFbBlob
-
getBlobInfo
public byte[] getBlobInfo(byte[] requestItems, int bufferLength) throws java.sql.SQLException
Description copied from interface:FbBlob
Request blob info.- Specified by:
getBlobInfo
in interfaceFbBlob
- Parameters:
requestItems
- Array of info items to requestbufferLength
- 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 usingFbWireDatabase.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 wrapresponseMapper
- Function to map aResponse
to the object expected by the deferred response- Returns:
- deferred action
- Since:
- 5.0.7
-
-