codecamp

EJB异常处理

EJB是通常基于分布式环境中的企业应用程序的一部分。所以除了正常的异常发生在代码中,可以在ejb的情况下,可以有例外喜欢通信失败,安全权限,服务器等ejb容器认为在两个方面存在异常。

  • 应用程序异常 -如果业务规则是voilated或在执行业务逻辑发生异常。

  • 系统异常 -这不是由业务逻辑或业务代码造成的任何异常。 运行时 Exception远程异常都是 SystemException例如在EJB 查找错误。


EJB容器如何处理异常?

When Application Exceptionoccurs ejb容器拦截例外,但返回相同的客户机。它不回滚事务,除非它在代码中指定EJBContext.setRollBackOnly()方法。EJB容器不包装异常的应用程序异常。


系统发生异常时,EJB容器拦截异常,回滚事务,并开始清理任务。它包装成例外和RemoteException抛出给客户端。


处理应用程序异常

应用程序异常在会话EJB方法,因为这些通常是抛出负责执行业务逻辑的方法。应用程序异常应宣布投业务方法的条款,应在案件的业务逻辑失败被抛出。

@Stateless
public class LibraryPersistentBean implements LibraryPersistentBeanRemote {
	
   ...

   public List<Book> getBooks() throws NoBookAvailableException {        
      List<Book> 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<Book> getBooks() {   
      try {
         List<Book> 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<Book> booksList = libraryBean.getBooks();
   } catch(EJBException e) {
      Exception ne = (Exception) e.getCause();
      if(ne.getClass().getName().equals("SqlException")){
	     System.out.println("Database error: "+ e.getMessage());
      }
   }
   ...
   }
}

EJB查询语言
EJB Web服务
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }