2014-02-27 89 views
1

我對定義中的模糊點以及Application ExceptionsSystem ExceptionsEJB的可能影響感到困惑。特別是我不能找出如果異常定義爲:系統異常或應用異常

public class SomeException extends Exception{ 
... 
} 

將是一個ApplicationSystem Exception。根據規範,Application Exception應始終使用註釋@ApplicationException進行定義。因此,我推斷上面的類不是Application Exception,即使它是一個選中的異常。我的問題出來屬於正確的Java語法,並隨後向EJB Container的情況下,這種行爲上的Exception要的Session Bean(不Singleton雖然)業務方法中拋出:

@Stateless 
@LocalBean 
public class StatelessBean{ 

public void doStuff(){ 
throw new SomeException(); 
} 

} 

1)該不該在throw子句中聲明SomeException

2)在方法doStuff()被調用後,Container是否丟棄實例?

3)如果是最後一個Sytem Exception是我的假設是正確的,那麼System Exception可能是一個檢查,而不是RuntimeException

更新:

在我看來,它根據規範,一個checked異常應該永遠是一個Application Exception並不一定清楚。如果要定義一個選中的RuntimeException,該怎麼辦?它是否應該包含在一個方法的throw中?是System還是Application Exception

public class SomeException extends RuntimeException{ 
    ... 
    } 

回答

4

細則中指出:被檢查的異常

應用程序異常可以通過被列在拋出的bean的業務接口的方法條款,無接口視圖,家庭被定義爲這樣的界面,組件界面和Web服務端點。未經檢查的異常的應用程序異常被定義爲應用程序異常,通過使用ApplicationException元數據註釋對其進行註釋或使用application-exception元素在部署描述符中表示它。

所以,上面的類是一個應用程序異常,因爲它是一個檢查異常。當然,它必須列在方法的throws子句中,否則代碼將無法編譯。並且,根據規範,拋出此異常後,bean實例不會被丟棄。

+0

我仍然堅持認爲即使在規範中也不完全清楚。我已經閱讀,但在另一個資源ID檢查異常沒有註釋@AppicationException,它將是一個系統異常?它是假的嗎? – arjacsoh

+1

是的,這是錯誤的,因爲它與規範相矛盾。 –

+0

請參閱我的更新。 – arjacsoh