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.