快速提示:消息驱动Bean中的异常处理
讓我們快速回顧一下有關消息驅動Bean的特殊處理。
MDB的入口點是重寫的onMessage方法。 它不提供引發檢查異常的任何作用域,因此,如果要處理錯誤情形,則需要從代碼中傳播未檢查異常(java.lang.RuntimeException的子類)。
異常類型
EJB規范定義了兩類異常,并且容器根據明確陳述的語義(同樣,在EJB規范中)將一種與另一種區別。
應用例外
如果您拋出一個非java.rmi.RemoteException或其子類的已檢查異常(對于MDB來說是不可能的,但其他EJB可以使用此異常),或者它不是一個以@ javax.ejb.ApplicationException注釋的RuntimeException(未檢查)將其視為應用程序異常。 結果,如果由@ javax.ejb.ApplicationException rollback屬性指定,它將回滾事務,并保留MDB實例以供重用–這是非常重要的注意事項。
@ApplicationException(rollback = true) public class InvalidCustomerIDException extends RuntimeException {public InvalidCustomerIDException(){super();} }系統異常
如果拋出java.rmi.RemoteException (已檢查的異常)或其子類,或者拋出了未用@ javax.ejb.ApplicationException注釋的RuntimeException(未檢查),則容器會將其視為系統異常。 結果,它執行某些操作(例如事務回滾)并丟棄MDB實例(這很關鍵) 。
public class SystemExceptionExample extends Exception {public SystemExceptionExample(){super();} }重要的是要考慮到MDB實例的丟棄 。 如果發生系統異常,容器將始終丟棄該實例–因此,請確保您出于預期目的使用這些異常。 如果您使用的是應用程序異常,并且它們是未經檢查的異常(對于MDB,則必須使用它們),請確保使用@ javax.ejb.ApplicationException對其進行注釋–這將確保不丟棄 MDB實例本身。
在高負載下,您可能希望池中有盡可能多的MDB,并且希望避免MDB實例退出服務狀態。 明智的異常處理可以幫助您實現此目標。 就像使用@ javax.ejb.ApplicationException注釋異常類并將其余的留給容器一樣簡單:-)
參考文獻
EJB(3.2)規范是一個465頁的PDF,乍一看可能令人生畏,但它是一個巨大的資源,而且并不難掌握。 如果您想更詳細地了解異常處理語義,請查閱第9章 ,該主題專門針對該主題。
干杯!
翻譯自: https://www.javacodegeeks.com/2015/06/quick-tip-exception-handling-in-message-driven-beans.html
總結
以上是生活随笔為你收集整理的快速提示:消息驱动Bean中的异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 戴尔灵越 Plus 16 笔记本新配置:
- 下一篇: JBoss Fuse 6.2发布–指导如