首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

EJB 异常处理的最佳做法(5)处理应用程序异常

EJB 异常处理的最佳做法(5)处理应用程序异常

处理应用程序异常在这一部分及其后的几个部分中,我们将更仔细地研究用 EJB 异常处理应用程序异常和系统异常,以及 Web 层设计。作为这个讨论的一部分,我们将探讨处理从会话和实体 EJB 组件抛出的异常的不同方式。
实体 EJB 组件中的应用程序异常
清单 2 显示了实体 EJB 的一个         ejbCreate() 方法。这个方法的调用者传入一个         OrderItemValue 并请求创建一个         OrderItem 实体。因为         OrderItemValue 没有名称,所以抛出了         CreateException 。      
清单 2. 实体 EJB 组件中的样本 ejbCreate() 方法
1
2
3
4
5
6
7
8
public Integer ejbCreate(OrderItemValue value) throws CreateException {
    if (value.getItemName() == null) {
      throw new CreateException("Cannot create Order without a name");
    }
    ..
    ..
    return null;
}




清单 2 显示了         CreateException 的一个很典型的用法。类似地,如果方法的输入参数的值不正确,则查找程序方法将抛出         FinderException 。      
然而,如果您在使用容器管理的持久性(CMP),则开发者无法控制查找程序方法,从而         FinderException 永远不会被 CMP 实现抛出。尽管如此,在 Home 接口的查找程序方法的         throws 子句中声明         FinderException 还是要更好一些。         RemoveException 是另一个应用程序异常,它在实体被删除时被抛出。      
从实体 EJB 组件抛出的应用程序异常基本上限定为这三种类型(         CreateException 、         FinderException 和         RemoveException )及它们的子类。多数应用程序异常都来源于会话 EJB 组件,因为那里是作出智能决策的地方。实体 EJB 组件一般是哑类,它们的唯一职责就是创建和取回数据。      
会话 EJB 组件中的应用程序异常
清单 3 显示了来自会话 EJB 组件的一个方法。这个方法的调用者设法订购        n 件某特定类型的某商品。         SessionEJB() 方法计算出仓库中的数量不够,于是抛出         NotEnoughStockException 。         NotEnoughStockException 适用于特定于业务的场合;当抛出了这个异常时,调用者会得到采用另一个备用途径的建议,让他订购更少数量的商品。      
清单 3. 会话 EJB 组件中的样本容器回调方法
1
2
3
4
5
6
7
8
public ItemValueObject[] placeOrder(int n, ItemType itemType) throws
NotEnoughStockException {
    //Check Inventory.
    Collection orders = ItemHome.findByItemType(itemType);
    if (orders.size() < n) {
      throw NotEnoughStockException("Insufficient stock for " + itemType);
    }
}

返回列表