Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java exception handling - catching superclass exception

Tags:

java

exception

I have a question on handling exception in web application. Often I hear catching the super class Exception is a bad idea.

Often I write codes to catch all exceptions in struts action / java servlet classes.

try {
     // call business facade
     // business facade calls DAO
     // any exception from DAO bubbles up 
} catch (Exception e) {
  log.error("error", e);
}

If we do not catch superclass Exception. How do we handle any unexpected runtime errors and logged them appropriately

like image 565
ilovetolearn Avatar asked Apr 15 '26 09:04

ilovetolearn


2 Answers

You can setup a DefaultUncaughtExceptionHandler for your project to deal with uncaught exceptions. For example, this is a piece of code that I have in one of my projects:

private static void setDefaultUncaughtExceptionHandler() {
    try {
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {

            @Override
            public void uncaughtException(Thread t, Throwable e) {
                logger.error("Uncaught Exception detected in thread {}", t, e);
            }
        });
    } catch (SecurityException e) {
        logger.error("Could not set the Default Uncaught Exception Handler", e);
    }
}
like image 97
assylias Avatar answered Apr 16 '26 23:04

assylias


In a web application, and in the code snippet you posted, how are you handling the root Exception? It looks like you catch it, log it, and move on.

In 99% of cases in a webapp, it would be better to allow the Exception to bubble up to the configured <error-page> in your web.xml.

It seems unlikely to me that if you catch an unknown error when "calling the business facade" that it's best for your application to keep trucking on with the rest of it's logic.

like image 30
matt b Avatar answered Apr 16 '26 21:04

matt b



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!