2016-04-22 20 views
5

Mam kilka EJB, które są wywoływane z usługi WWW jax-rs. Jednak za każdym razem, gdy wywołuję jedną z metod EJB przechwytuję wywołanie za pomocą przechwytywacza. Ten przechwytujący sprawdza parametry klucza API, a jeśli nie istnieje lub nie istnieje w mojej bazie danych, rzuci wyjątek, który chcę przechwycić w swoim kodzie jax-rs. Jednakże, ponieważ moja klasa jax-rs nie ma wiedzy o możliwości wyrzucenia tego wyjątku, nawet jeśli wyjątek może być sprawdzonym wyjątkiem, jaka byłaby najlepsza praktyka tutaj?Zgłaszanie rzucania wyjątku bez rzucania nim

  1. Deklarowanie mój EJB rzucać wyjątki (bez kiedykolwiek je sama rzuca)
  2. że mój wyjątek niesprawdzany wyjątek i kontroli dla niego jakikolwiek?
  3. Coś jeszcze?

Odpowiedz

1

Doszedłem do wniosku, że wyrzucenie niesprawdzonego wyjątku byłoby najlepsze. Następnie używam programu odwzorowującego wyjątki, aby wychwycić wyjątek i obsłużyć go.

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

Jedyne co pozostało to stłumić wyjście wyjątku do plików dziennika.

+1

Uwaga: jeśli rzucisz niezaznaczony wyjątek w EJB, musisz użyć '@ ApplicationException' lub kontener EJB wycofa wyjątek i przetłumaczy go na EJBException. –

0

Interceptor może wyrzucić około RuntimeException (na przykład InvalidParametersException). Możesz też stworzyć specjalny serwlet, który obsłuży wszystkie wyjątki od InvalidParametersException. W tym celu powinieneś utworzyć specjalny plik mapping w pliku web.xml.

+0

Czy istnieją inne opcje niż specjalny serwlet do obsługi wyjątków? Być może mogę postawić przechwytującego do pracy? – Terabyte

Powiązane problemy