J2EE体系结构和设计 - 编程入门网
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 模块在转换过程中出现了一些错误。日志 文件如下:
由于这个错误,我不能正常地运行应用程序。所有的实体 bean 都不起作用。我不能使用 实体 bean 来插入记录。 答:您已经使用了 WebSphere Studio 5.0 中的 J2EE Migration Wizard 试图将您的 J2EE 1.2 应用程序移植到 J2EE 1.3,但是由于使用了 NullPointerException 而使其失败 了。由于我不了解您的代码,所以判断工具出现的故障是很困难的。您或许需要求助于 IBM S |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |