Obsługa wyjątków

Obsługa wyjątków w kontrolerze jPALIO MVC jest realizowana w sposób bardzo elastyczny. Poniżej przedstawiono możliwe sytuacje oraz sposoby ich obsługi.

Wyjątki w metodzie obsługi żądania (request handler)

Metody obługujące żądania powinny same obsługiwać wyjątki. Wyjątek wyrzucony poza metodę zostanie obsłużony przez mechanizm obsługi nieobsłużonych wyjątków (patrz niżej). Przykładowa obsługa wyjątku może wyglądać w sposób następujący:

 

try {
    setParam("objectsList", Groovy.module("sql").read("palio", "select aid, code from p_objects order by code"))
} catch (Exception ex) {
    setParam("exception", ex)
    setView("palio.mvc.errorView")
}

 

Nieobsłużone wyjątki

Klasa jpalio.mvc.Controller posiada abstrakcyjną metodę handleException. Każdy kontroler powinien posiadać implementację tej metody. Istnieje pełna dowolności jej implementacji. Może być to np. logowanie błędu do określonego logu na poziomie FATAL lub przekierowanie do obiektu obsługi błędów lub raportowanie poprzez wysłanie wiadomości email, SMS.

Dobrą praktyką jest stworzenie bazowego kontrolera dla wszystkich kontrolerów w danym projekcie z zaimplementowaną obsługą wyjątków nieobsłużonych. Dzięki temu wszystkie nieobsłużone wyjątki będą obsługiwane w jednolity sposób.

Przykładowa implementacja:

 

protected void handleException(Exception ex) {
    // Log message
    palio.Logger.getLogger(getClass().getName()).fatal("Unhandled exception occured", ex)
    
    // Send email message
    // palio.Groovy.module("email").sendMessage(...)
    
    // Invoke error handler object
    palio.Groovy.object("samples.features.userInterface.mvc.errorHandler", ex.getCause())
}

Przykładowa implementacja obiektu prezentacji błędu:

 

 

$#params(java.lang.Exception ex)

<html>
<head>
</head>

<body>
<h1 style="color:red;">Exception occured. Please contact with application administrator.</h1>
<h2>$@ex.getMessage()</h2>

</body>
</html>