2016-04-22 12 views
5

Ho un paio di EJB che vengono chiamati da un servizio Web jax-rs. Tuttavia, ogni volta che chiamo uno dei metodi EJB, sto intercettando l'invocazione usando un intercettore. Questo intercettore controlla i parametri per una chiave API e se non è presente o non esiste nel mio database genererà un'eccezione che desidero rilevare nel mio codice jax-rs. Tuttavia, poiché la mia classe jax-rs non è a conoscenza della possibilità che questa eccezione venga lanciata anche se l'eccezione potrebbe essere un'eccezione controllata, quale sarebbe la migliore pratica qui?Dichiarare di lanciare un'eccezione senza mai lanciarlo

  1. Dichiarando la mia EJB a lanciare eccezioni (senza mai gettandosi)
  2. Rendere la mia eccezione un'eccezione incontrollata e il controllo di essa in ogni modo?
  3. Qualcos'altro?

risposta

1

Ho capito che lanciare un'eccezione non controllata sarebbe la migliore. Quindi utilizzo un programma di mapping delle eccezioni per rilevare l'eccezione e gestirla.

https://docs.oracle.com/javaee/6/api/javax/ws/rs/ext/ExceptionMapper.html

L'unica cosa che rimane è quella di sopprimere l'output eccezione ai file di registro.

+1

Nota: se si lancia un'eccezione non controllata con EJB, è necessario utilizzare '@ ApplicationException', altrimenti il ​​contenitore EJB eseguirà il rollback dell'eccezione e lo tradurrà in EJBException. –

0

L'intercettatore può generare RuntimeException (ad esempio InvalidParametersException). E puoi creare una speciale servlet che gestirà tutte le eccezioni InvalidParametersException. A tal fine dovresti creare uno speciale mapping in web.xml.

+0

Esistono altre opzioni oltre a un servlet speciale per gestire le eccezioni? Forse posso mettere un intercettore per il lavoro? – Terabyte

Problemi correlati