public interface FilterChain extends Processor<Context>, List<Filter>
This class implement the "Chain of Responsibility" pattern (for more info, take a look at the classic "Gang of Four" design patterns book). Towards that end, the Chain API models a computation as a series of "protocol filter" that can be combined into a "protocol chain".
The API for Filter consists of a two set of methods (handleXXX() and
postXXX) which is passed a "protocol context" parameter containing the
dynamic state of the computation, and whose return value is a
NextAction
that instructs FilterChain, how it should
continue processing. The owning ProtocolChain must call the
postXXX() method of each Filter in a FilterChain in reverse
order of the invocation of their handleXXX() methods.
The following picture describe how it Filter(s)
-----------------------------------------------------------------------------
- Filter1.handleXXX() --> Filter2.handleXXX() | -
- | -
- | -
- | -
- Filter1.postXXX() <-- Filter2.postXXX() | -
-----------------------------------------------------------------------------
The "context" abstraction is designed to isolate Filter implementations from the environment in which they are run (such as a Filter that can be used in either IIOP or HTTP parsing, without being tied directly to the API contracts of either of these environments). For Filter that need to allocate resources prior to delegation, and then release them upon return (even if a delegated-to Filter throws an exception), the "postXXX" method can be used for cleanup.
Modifier and Type | Method and Description |
---|---|
ProcessorResult |
execute(FilterChainContext context)
Method processes occurred
IOEvent on this FilterChain . |
void |
fail(FilterChainContext context,
Throwable failure) |
void |
fireEventDownstream(Connection connection,
FilterChainEvent event,
CompletionHandler<FilterChainContext> completionHandler) |
void |
fireEventUpstream(Connection connection,
FilterChainEvent event,
CompletionHandler<FilterChainContext> completionHandler) |
void |
flush(Connection connection,
CompletionHandler<WriteResult> completionHandler) |
int |
indexOfType(Class<? extends Filter> filterType)
|
FilterChainContext |
obtainFilterChainContext(Connection connection) |
FilterChainContext |
obtainFilterChainContext(Connection connection,
int startIdx,
int endIdx,
int currentIdx) |
ReadResult |
read(FilterChainContext context) |
isInterested, obtainContext, process, read, setInterested, write, write, write
add, add, addAll, addAll, clear, contains, containsAll, equals, get, hashCode, indexOf, isEmpty, iterator, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, replaceAll, retainAll, set, size, sort, spliterator, subList, toArray, toArray
parallelStream, removeIf, stream
FilterChainContext obtainFilterChainContext(Connection connection)
FilterChainContext obtainFilterChainContext(Connection connection, int startIdx, int endIdx, int currentIdx)
ProcessorResult execute(FilterChainContext context)
IOEvent
on this FilterChain
.context
- processing contextProcessorResult
IOException
void flush(Connection connection, CompletionHandler<WriteResult> completionHandler)
void fireEventUpstream(Connection connection, FilterChainEvent event, CompletionHandler<FilterChainContext> completionHandler)
void fireEventDownstream(Connection connection, FilterChainEvent event, CompletionHandler<FilterChainContext> completionHandler)
ReadResult read(FilterChainContext context) throws IOException
IOException
void fail(FilterChainContext context, Throwable failure)
Copyright © 2014 Oracle Corporation. All rights reserved.