雷林鵬分享:EJB異常處理

  EJB是它們通常分佈基於環境的企業應用程序的一部分。因此,除了可能出現在代碼中,在EJB的情況下正常例外,可以有例外,像通信故障,安全權限,服務器關閉等EJB容器認爲例外兩種方式。

  應用程序異常 -如果業務規則是voilated或在執行業務邏輯發生異常。

  系統異常 -這不是由業務邏輯或業務代碼造成的任何異常。RuntimeException的,是RemoteException的SystemException的。例如,錯誤在EJB查找。

  EJB容器如何處理異常?

  當應用程序異常發生時,EJB容器截獲的異常,但返回相同的客戶端,因爲它是。它不會回滾事務,除非它是由EJBContext.setRollBackOnly()方法中指定的代碼。EJB容器不中的情況下應用程序異常的包裝異常。

  當系統異常時,EJB容器攔截異常,回滾事務,並開始清理任務。它包裝異常到的RemoteException和它拋出給客戶端。

  處理應用程序異常

  應用程序異常一般扔在會話EJB方法,因爲這些都是負責執行業務邏輯的方法。應用程序異常應宣佈拋出的商業方法條款,並應出現故障時業務邏輯被拋出。

  @Stateless

  public class LibraryPersistentBean implements LibraryPersistentBeanRemote {

  ...

  public List getBooks() throws NoBookAvailableException {

  List books =

  entityManager.createQuery("From Books").getResultList();

  if(books.size == 0)

  throw NoBookAvailableException

  ("No Book available in library.");

  return books;

  }

  ...

  }

  處理系統異常

  系統異常可發生在類似命名查找失敗的任何時間,在獲取數據時發生SQL錯誤。在這種情況下,這種異常應EJBException的下包,丟回給客戶端。

  @Stateless

  public class LibraryPersistentBean implements LibraryPersistentBeanRemote {

  ...

  public List getBooks() {

  try {

  List books =

  entityManager.createQuery("From Books").getResultList();

  } catch (CreateException ce){

  throw (EJBException) new EJBException(ce).initCause(ce);

  } catch (SqlException se){

  throw (EJBException) new EJBException(se).initCause(se);

  }

  return books;

  }

  ...

  }

  在客戶端,處理出現EJBException。

  public class EJBTester {

  private void testEntityEjb(){

  ...

  try{

  LibraryPersistentBeanRemote libraryBean =

  LibraryPersistentBeanRemote)ctx.lookup("LibraryPersistentBean/remote");

  List booksList = libraryBean.getBooks();

  } catch(EJBException e) {

  Exception ne = (Exception) e.getCause();

  if(ne.getClass().getName().equals("SqlException")){

  System.out.println("Database error: "+ e.getMessage());

  }

  }

  ...

  }

  }

  (編輯:雷林鵬 來源:網絡|侵刪)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章