public class ChannelUtils extends Object
A collection of utilities for interacting with Channel
objects. Use of these utilities prevents error-prone replication
of required transaction usage semantics, and allows for more
concise code.
However, as a side-effect of its generality, and in particular of
its use of Callable
, any checked exceptions thrown by
user-created transactors will be silently wrapped with ChannelException
before being propagated. Only direct use of
transact(Channel,Callable)
suffers from this issue, even
though all other methods are based upon it, because none of the
other methods are capable of producing or allowing checked
exceptions in the first place.
Modifier and Type | Method and Description |
---|---|
static void |
put(Channel channel,
Collection<Event> events)
A convenience method for multiple-event
put transactions. |
static void |
put(Channel channel,
Event event)
A convenience method for single-event
put transactions. |
static Event |
take(Channel channel)
A convenience method for single-event
take transactions. |
static List<Event> |
take(Channel channel,
int max)
A convenience method for multiple-event
take transactions. |
static <T> T |
transact(Channel channel,
Callable<T> transactor)
A general optimistic implementation of
Transaction client
semantics. |
static void |
transact(Channel channel,
Runnable transactor)
A convenience method for transactions that don't require a return
value.
|
public static void put(Channel channel, Event event) throws ChannelException
A convenience method for single-event put
transactions.
ChannelException
transact(Channel,Callable)
public static void put(Channel channel, Collection<Event> events) throws ChannelException
A convenience method for multiple-event put
transactions.
ChannelException
transact(Channel,Callable)
public static Event take(Channel channel) throws ChannelException
A convenience method for single-event take
transactions.
ChannelException
transact(Channel,Callable)
public static List<Event> take(Channel channel, int max) throws ChannelException
A convenience method for multiple-event take
transactions.
max
eventsChannelException
transact(Channel,Callable)
public static void transact(Channel channel, Runnable transactor) throws ChannelException
A convenience method for transactions that don't require a return
value. Simply wraps the transactor
using Executors.callable(java.lang.Runnable, T)
and passes that to transact(Channel,Callable)
.
ChannelException
transact(Channel,Callable)
,
Executors.callable(Runnable)
public static <T> T transact(Channel channel, Callable<T> transactor) throws ChannelException
A general optimistic implementation of Transaction
client
semantics. It gets a new transaction object from the
channel
, calls begin()
on it, and then
invokes the supplied transactor
object. If an
exception is thrown, then the transaction is rolled back;
otherwise the transaction is committed and the value returned by
the transactor
is returned. In either case, the
transaction is closed before the function exits. All secondary
exceptions (i.e. those thrown by
Transaction.rollback()
or
Transaction.close()
while recovering from an earlier
exception) are logged, allowing the original exception to be
propagated instead.
This implementation is optimistic in that it expects transaction
rollback to be infrequent: it will rollback a transaction only
when the supplied transactor
throws an exception,
and exceptions are a fairly heavyweight mechanism for handling
frequently-occurring events.
transactor.call()
ChannelException
Copyright © 2009-2017 Apache Software Foundation. All Rights Reserved.