Exception Handling¶
Classification of Exceptions¶
Exceptions are put in these categories:
- Unpredictable, technical exceptions, like
NullPointerException
orMethodNotFoundException
. Such exceptions are the symptom of a bug in the software. - Predictable, technical exceptions, often related to network connection and availability problems, e.g.
TimeoutException
orUnknownHostException
- Predictable, non-technical exceptions, also known as ‘Business Exceptions’
How to handle Exceptions¶
In total, the application takes three different kinds of actions when an exception occurs:
- tell the user that an exception has occurred and she cannot use the application anymore and terminate the current user session
- tell the user that an exception has occurred and she can continue to use the application
- tell the user that a business exception has occurred and optionally what she could do to avoid/resolve this problem
There are two means to tell the user about an exception:
- stay on the current page and display a message, typically with
<p:growl>
or<p:messages>
- navigate to an error page, either to recoverableError.xhtml or unrecoverableError.xhtml
You can programatically navigate to an error page and explicitly add messages to be shown on the error page.
This, however, is not the recommended way to show an error page.
Instead you should throw one of the exceptions UnrecoverableException
and RecoverableException
.
This is typically being done during the excecution of an JSF event handler.
It can even be thrown from within EJBs or other beans that are managed by CDI.
You can parameterize the aforementioned exceptions by means of the enumeration ExceptionHandlerHint
in order to control the effect of the exception:
public static enum ExceptionHandlerHint {
SHOW_ERROR_PAGE,
STAY_ON_PAGE_AND_SHOW_ERROR,
STAY_ON_PAGE_AND_SHOW_WARNING,
;
}
There is a centralized exception handling available in AbstractManagedBean
, FullAjaxExceptionHandler
and PrimeExceptionHandler
.
That exception handling does the message display and error page navigation in a generalized way.
The only thing you need to take care of is to decide, which exception type to throw and how to parameterize the exception object.
Note
The error page location depends on the used template.
That is taken care of in the overwritten versions of the exception handlers FullAjaxExceptionHandler
and PrimeExceptionHandler
.