快速业务通道

J2EE体系结构和设计 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
nly()

使业务方法抛出运行时的异常

目前,已经选择了第二项;构造 DAOException 来扩大 RuntimeException,并且当错误 发生时所有的 DAO 类都抛出 DAOException 实例。请您给出建议,哪个选择是最好的?哪个 能使我们的代码有更好的复用性?对于第一种选择,我认为您需要为每个业务方法添加额外 的代码行 setRollBackOnly(),我认为这很麻烦。

使用 WebSphere Studio V4 IDE 测试环境,事务管理及回滚会很好地进行,但是无论何 时将应用程序部署到 WebSphere Application Server V4 上,都不会有回滚发生。存在任何 特定的配置或设置来启用 WebSphere Application Server V4 上声明的事务管理吗?

答:您很好地利用了模式。数据访问对象(Data Access Object,DAO)及会话外观 (Session Facade)都是非常值得一用的。由于您使用 EJB,所以进入了普遍存在的困境中 :如何实现您的 EJB 代码及如何使用应用程序的异常?何时使用 setRollbackOnly()?怎样 同时配合使用它们?

应用程序异常表示发生了业务逻辑错误:取款超出了账单余额、预订已被订出的座位、获 取已被冻结的信用卡的费用等等。这同系统异常不同,系统异常表示系统级别的错误,如耗 尽内存或者数组越界。根据 EJB 规范(第 18 章)中指出的,应用程序异常必须是 Exception 的子类,并且不能是 RuntimeException 或 RemoteException 的子类,这是非常 好的建议。同时,根据该规范,容器必须能够捕获系统异常,标记事务用于回滚,并向EJB 客户端抛出 RemoteException 或 EJBException 异常。容器必须将应用程序异常传递到 EJB 客户端并且不改变该异常以及事务。

我认为这是非常矛盾的,系统异常引发了自动回滚而应用程序异常不能。已经抛出了异常 ,那么您真的要执行这些事务吗(哪个是自动的行为)?我不这么认为。然而,这是 EJB 的 工作方式。

因此,对于您的情况:您的应用程序异常类是 RuntimeException 的子类。这是不好的。 当它自动执行回滚的同时,也将您有含义的描述的应用程序异常转换成了通用的异常。规范 中指出不要这样做。

您必须自己处理回滚。这意味着您在会话外观(您的 EJB 容器的最高层)中编写代码时 需要养成这样的习惯——捕获应用程序异常、调用 setRollbackOnly() 方法并重 新抛出同样的异常以便使 EJB 客户端知道发生了什么。这是编写优秀的 EJB 代码的方法: 在向 EJB 容器外抛出异常之前,请不要使用 RuntimeException 的子类及 setRollbackOnly() 方法。

问:先前我的应用程序是基于 WebSphere 4.0 的 J2EE 1.2 标准开发的。目前,我试着 使用 WebSphere Studio 5.0(WebSphere 5.0)的 J2EE 1.3 标准转换它。我将应用程序从 j2ee1.2 移植到 j2ee1.3 的级别。

我有两个模块,一个是 EJB 模块(它包含所有的 EJB),另一个是 Web 模块。该 Web 模块被成功地转换成每个 J2EE 1.3 标准。该 EJB 模块在转换过程中出现了一些错误。日志 文件如下:

Info: Project structure did not need migration: SCLS-ejb. Info: J2EE version level did not need migration: SCLS-ejb. Info: Migration was not required for META-INF/ejb-jar.xml. Error: java.lang.NullPointerException Error: Unable to migrate the Map and Schema file structure in project SCLS-ejb

由于这个错误,我不能正常地运行应用程序。所有的实体 bean 都不起作用。我不能使用 实体 bean 来插入记录。

答:您已经使用了 WebSphere Studio 5.0 中的 J2EE Migration Wizard 试图将您的 J2EE 1.2 应用程序移植到 J2EE 1.3,但是由于使用了 NullPointerException 而使其失败 了。由于我不了解您的代码,所以判断工具出现的故障是很困难的。您或许需要求助于 IBM S

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号