zoukankan      html  css  js  c++  java
  • 雷林鹏分享: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());

      }

      }

      ...

      }

      }

      (编辑:雷林鹏 来源:网络|侵删)

  • 相关阅读:
    [Castle]Asp.Net中获取Castle容器中的服务的另一方法
    IBatis.Net如何支持多个数据库
    [Castle]Castle.Model被Castle.Core代替了
    [Castle]Castle也范型
    Since NHibernate 1.2.0, objects are lazy by default
    [django]newforms两种方式示例
    [django]the story about Django and TurboGears
    在docker中运行ElasticSearch时报错:docker: invalid reference format: repository name must be lowercase.
    连接Kibana报错:Kibana server is not ready yet
    Win10系统开启虚拟机屏幕蓝屏自动重启
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/13152219.html
Copyright © 2011-2022 走看看