2016-04-22 19 views
5

Tôi có một vài EJB được gọi từ một dịch vụ web jax-rs. Tuy nhiên, mỗi khi tôi gọi một trong các phương pháp EJB, tôi đang chặn cuộc gọi bằng cách sử dụng một máy đánh chặn. Interceptor này kiểm tra các tham số cho một khóa API và nếu nó không hiện diện hoặc không tồn tại trong cơ sở dữ liệu của tôi, nó sẽ ném một ngoại lệ mà tôi muốn nắm bắt trong mã jax-rs của tôi. Tuy nhiên, kể từ khi lớp jax-rs của tôi không có kiến ​​thức về khả năng ngoại lệ này được ném ngay cả khi ngoại lệ có thể là một ngoại lệ được kiểm tra, điều gì sẽ là thực hành tốt nhất ở đây?Khai báo để ném một ngoại lệ mà không bao giờ ném nó

  1. Tuyên bố EJB của tôi để ném ngoại lệ (mà không bao giờ ném chúng chính nó)
  2. Làm ngoại lệ của tôi một ngoại lệ không được kiểm soát và kiểm tra cho nó anyways?
  3. Cái gì khác?

Trả lời

1

Tôi đã tìm ra rằng việc ném một ngoại lệ không được kiểm soát sẽ là tốt nhất. Sau đó tôi sử dụng một trình ánh xạ ngoại lệ để bắt ngoại lệ và xử lý nó.

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

Điều duy nhất những gì còn lại là để ngăn chặn đầu ra ngoại lệ đối với các tập tin log.

+1

Lưu ý, nếu bạn ném một ngoại lệ không được kiểm soát bằng EJB, thì bạn cần phải sử dụng '@ ApplicationException' hoặc nếu không vùng chứa EJB sẽ khôi phục ngoại lệ và dịch nó sang EJBException. –

0

Máy đánh chặn có thể ném một số RuntimeException (ví dụ: InvalidParametersException). Và bạn có thể tạo servlet đặc biệt để xử lý tất cả ngoại lệ InvalidParametersException. Bạn nên tạo đặc biệt mapping trong web.xml cho mục đích này.

+0

Có các tùy chọn nào khác ngoài một servlet đặc biệt để xử lý các ngoại lệ không? Có lẽ tôi có thể đặt một kẻ đánh chặn cho công việc? – Terabyte

Các vấn đề liên quan