Class AbstractCloseable
java.lang.Object
org.apache.sshd.common.util.logging.AbstractLoggingBean
org.apache.sshd.common.util.closeable.IoBaseCloseable
org.apache.sshd.common.util.closeable.AbstractCloseable
- All Implemented Interfaces:
Closeable,AutoCloseable,Channel,Closeable
- Direct Known Subclasses:
AbstractInnerCloseable,AbstractIoServiceFactory,ChannelAsyncInputStream,ChannelAsyncOutputStream,ClientUserAuthService,DefaultAgentForwardSupport,Nio2Session,ServerUserAuthService,SimpleIoOutputStream,SocksProxy,SshThreadPoolExecutor.DelegateCloseable
Provides some default implementations for managing channel/connection open/close state
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final CloseFutureA future that will be set 'closed' when the object is actually closedprotected final ObjectLock object forFuture-s based on this closeable instanceprotected final AtomicReference<AbstractCloseable.State> State of this objectFields inherited from class org.apache.sshd.common.util.logging.AbstractLoggingBean
log -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddCloseFutureListener(SshFutureListener<CloseFuture> listener) Pre-register a listener to be informed when resource is closed.protected Builderbuilder()final CloseFutureclose(boolean immediately) Close this resource asynchronously and return a future.protected CloseFutureprotected voiddoCloseImmediately is called once and only once with state == Immediatefinal booleanisClosed()Returnstrueif this object has been closed.final booleanReturnstrueif theCloseable.close(boolean)method has been called.protected voidpreClose()preClose is guaranteed to be called before doCloseGracefully or doCloseImmediately.voidRemove a pre-registered close event listenerMethods inherited from class org.apache.sshd.common.util.logging.AbstractLoggingBean
debug, debug, debug, debug, debug, error, error, error, error, error, getSimplifiedLogger, info, info, warn, warn, warn, warn, warn, warn, warn, warn
-
Field Details
-
futureLock
Lock object forFuture-s based on this closeable instance -
state
State of this object -
closeFuture
A future that will be set 'closed' when the object is actually closed
-
-
Constructor Details
-
AbstractCloseable
protected AbstractCloseable() -
AbstractCloseable
-
-
Method Details
-
getFutureLock
-
addCloseFutureListener
Description copied from interface:CloseablePre-register a listener to be informed when resource is closed. If resource is already closed, the listener will be invoked immediately and not registered for future notification- Parameters:
listener- The notificationSshFutureListener- nevernull
-
removeCloseFutureListener
Description copied from interface:CloseableRemove a pre-registered close event listener- Parameters:
listener- The registerSshFutureListener- nevernull. Ignored if not registered or resource already closed
-
close
Description copied from interface:CloseableClose this resource asynchronously and return a future. Resources support two closing modes: a graceful mode which will cleanly close the resource and an immediate mode which will close the resources abruptly.- Parameters:
immediately-trueif the resource should be shut down abruptly,falsefor a graceful close- Returns:
- a
CloseFuturerepresenting the close request
-
isClosed
public final boolean isClosed()Description copied from interface:CloseableReturnstrueif this object has been closed.- Returns:
trueif closing
-
isClosing
public final boolean isClosing()Description copied from interface:CloseableReturnstrueif theCloseable.close(boolean)method has been called. Note that this method will returntrueeven if thisCloseable.isClosed()returnstrue.- Returns:
trueif closing
-
preClose
protected void preClose()preClose is guaranteed to be called before doCloseGracefully or doCloseImmediately. When preClose() is called, isClosing() == true -
doCloseGracefully
-
doCloseImmediately
protected void doCloseImmediately()doCloseImmediately is called once and only once with state == Immediate
Overriding methods should always call the base implementation. It may be called concurrently while preClose() or doCloseGracefully is executing
-
builder
-