2016-04-22 52 views
5

我有幾個從jax-rs Web服務調用的EJB。但是,每次我調用其中一個EJB方法時,我都會使用攔截器攔截該調用。這個攔截器檢查API密鑰的參數,如果它不存在或不存在於我的數據庫中,它會拋出一個我希望在我的jax-rs代碼中捕獲的異常。然而,由於我的jax-rs類不知道這個異常被拋出的可能性,即使異常可能是一個檢查異常,這裏最好的做法是什麼?聲明拋出異常而不拋出它

  1. 聲明我EJB拋出異常(而沒有把他們自己)
  2. 使我異常的未經檢查的異常,並檢查反正它?
  3. 還有別的嗎?

回答

1

我想通過拋出未經檢查的異常是最好的。然後我使用異常映射器來捕獲異常並處理它。

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

剩下的唯一的事情就是異常輸出抑制到日誌文件。

+1

請注意,如果您使用EJB引發未經檢查的異常,則需要使用'@ ApplicationException',否則EJB容器將回滾該異常並將其轉換爲EJBException。 –

0

攔截器可以拋出一些RuntimeException(例如InvalidParametersException)。你可以創建特殊的servlet來處理所有的異常。爲此,您應該在web.xml中創建特殊的mapping

+0

除了特殊的servlet還有其他的選擇來處理異常嗎?也許我可以把攔截器放到工作中去? – Terabyte