Exception Handling
Exception handling with interceptors is simple yet powerful. Since
interceptors sit directly in the Java call stack of the bean method or
callback that is being invoked, you can put a
try/catch/finally
block around the InvocationContext.proceed() method. You can
abort an invocation before it reaches the actual bean method by throwing
an exception within the @AroundInvoke
or callback method. You are also allowed to catch a bean-method-thrown
exception and throw a different exception or suppress the exception. With
@AroundInvoke interception, you are
even allowed to retry the bean method call after catching an exception
from the bean method. Let’s look at some examples.
Aborting a Method Invocation
It’s conceivable that the management of our online television
station would like to restrict access to a premium channel at their
discretion. In this case, we might short-circuit an incoming request to
instead return a descriptive Exception:
public class Channel2Restrictor
{
...
/**
* Examines the specified request to determine if the caller is attempting
* to obtain content for Channel 2. If so, and Channel 2 is currently closed,
* will block the request, instead throwing {@link Channel2ClosedException}
*/
@AroundInvoke
public Object checkAccessibility(final InvocationContext context) throws Exception { // Precondition checks assert context != null : "Context was not specified"; // See if we're requesting Channel 2 if (isRequestForChannel2(context)) { // See if Channel ...