Composes two instances of Sentry in a new Sentry, with this sentries context applied first.
Composes two instances of Sentry in a new Sentry, with this sentries context applied first.
a new sentry t such that t(x) == s(this(x))
Run the given code block in the context of this sentry, and return its value.
Run the given code block in the context of this sentry, and return its value.
When an invocations takes too long, a nl.grons.sentries.support.NotAvailableException is thrown.
Composes two instances of Sentry in a new Sentry, with this sentries context applied last.
Composes two instances of Sentry in a new Sentry, with this sentries context applied last.
a new sentry t such that t(x) == this(s(x))
Go back to the initial state.
Go back to the initial state.
a string describing the resource that is protected, e.g. "mysql:server-b.com:3336". It is used in exceptions and visible through JMX.
a simple describing identifier that is unique per sentry chain, e.g. "rateLimit".
ResourceName
plus sentryType
uniquely name each sentry. The sentry registry
enforces this. The sentryType
is also used in JMX to uniquely name bean properties
for a resource.
null
for sentry wrappers, that must not be registered.
A sentry that limits the duration of an invocation. A new instance can be obtained through the nl.grons.sentries.SentrySupport mixin.
The goal of a duration limiter is to support callers that are only interested in the results for a limited time.
WARNING: do NOT use this sentry when you invoke it from a
Future
or anActor
. For such circumstances you are MUCH better of with a timeout on the enclosing future or a timeout message within the actor. Reason: this sentry blocks the current thread while waiting on a future that executes the task. Blocking the current thread is an anti-pattern for futures and actors.Note that when the wait period has passed, the task still completes in another thread. Make sure there are enough threads in the executor. By default a
Executors.newCachedThreadPool()
is used which creates as much threads as needed. The executor can be changed by overriding .executionContext.