Gestione delle eccezioni nell'applicazione Web Java

1

So che la gestione delle eccezioni è un argomento spesso discusso nel mondo di Java. Ho letto alcuni thread qui e SO pure.

link

Mi trovo a identificarmi con principi come Non sopprimere o ignorare le eccezioni , Non rilevare le eccezioni di primo livello ed evitare anti-pattern come Log e lancia .

link link

Domanda n. 1, esiste un diverso standard di pratica quando si tratta di applicazioni web? Ad esempio, si tratta di un caso d'uso legittimo per catturare Exception ai fini della registrazione e poi lanciarlo lo stack?

function void xyz() throws Exception {
    try {
    } catch (Exception e) {
        LOG.error("ERROR: " + e);
        throw e;
    }
}

function void otherFuncA() throws Exception {
    xyz();
}

function void otherFuncB() {
    try {
        xyz();
    } catch (Exception e) {
        LOG.error("ERROR: " + e);
        throw e;
    }
}

Lo trovo molto difficile da accettare come pratica perché sta generando così tanto codice non necessario (vedi otherFuncA e otherFuncB ), che influenza la funzione chiama in tutti i diversi livelli (DAO, Servizio, Controller, ecc. .)

Domanda n. 2, perdo informazioni su un errore (diciamo che cosa ha causato un NullPointerException ) se lascio che le eccezioni inaspettate, non controllate salgano al livello Controller e poi, SOLO quindi, gestiremo lì (cattura Exception e getta traccia stack)? A differenza della registrazione immediata e del re-lancio (visto sopra).
Ovviamente, verificherò ancora i tipi di eccezione specifici laddove applicabile.

Sembra che la traccia dello stack sia spesso un indicatore migliore di ciò che è andato storto rispetto a quale campo specifico stava causando un errore ... Sono davvero interessato all'input di sviluppatori più esperti e alle best practice / reasoning che guidano la tua eccezione la manipolazione.

    
posta user1766760 25.03.2013 - 16:47
fonte

2 risposte

2

1) No.

2) Non se metti le informazioni rilevanti nel messaggio di Exception - trovo che sia un'alternativa molto preferibile.

    
risposta data 25.03.2013 - 16:56
fonte
1

Un ottimo caso d'uso per il modello Log and Throw è quando il tuo framework passa l'eccezione al front-end. Ciò può accadere, ad esempio, con applicazioni Web che gestiscono errori localmente, ma anche nei sistemi server client in cui si genera un'eccezione e l'eccezione deve essere incapsulata e inviata al client (JAX-WS lo farà e invierà una risposta di errore contenente il eccezione).

Ma normalmente vuoi anche avere l'eccezione nel log del server di origine. E questo modello fornisce questo comportamento esatto.

Si noti che, quando possibile, si desidera che il modello Log and Throw faccia parte di una soluzione di intercettazione, in modo da non dover cospargere il codice con questo modello. Ma a volte questo non è semplicemente conveniente o possibile.

    
risposta data 24.11.2015 - 10:49
fonte

Leggi altre domande sui tag