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 ...
Get Enterprise JavaBeans 3.1, 6th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.