当前位置: 首页 > 面试题库 >

明确解释系统异常与应用程序异常

鲁昕
2023-03-14
问题内容

JPA规范区分系统异常和应用程序异常。我对线条的确切位置感到困惑。我的猜测:

应用程序异常是您的代码或代码所使用的库显式或隐式抛出的异常。

  • 是否包括所有异常,运行时和已检查的异常,而不管其来源如何?

系统异常可能是持久性提供程序抛出的异常。它当然包含的所有子类javax.persistence.PersistenceException

  • 提供程序代码引发的其他异常呢?
  • 其他Java EE库抛出的异常又如何呢?
  • 如果将异常包装在中,是否会有所不同EJBException

如何使用ApplicationException批注影响行为?我从未见过它被使用过。


问题答案:

当存在业务逻辑错误而不是系统错误时,应引发应用程序异常。

有一个重要的区别: 应用程序异常不会自动导致事务回滚 。抛出应用程序异常后,客户端有机会恢复。

应用程序异常被发送到客户端,而没有被重新包装为EJBException。因此,您可以使用它们来报告验证错误或业务逻辑问题,并且它们将到达客户端。

是否包括所有异常,运行时和已检查的异常,而不管其来源如何?

否。默认情况下,应用程序异常是不扩展RuntimeException或RemoteException的异常。您可以如下所述进行更改。

如何使用ApplicationException批注影响行为?

如果要自动回滚事务,可以使用@ApplicationException(rollback = true)。

您还可以在RuntimeException和RemoteException的子类上使用注释,以避免包装为EJBException,并定义它们的自动回滚行为。

其他Java EE库抛出的异常又如何呢?

它们将遵循相同的规则,但是您可以使用XML描述符将第三方类声明为应用程序异常(有或没有自动回滚)。

提供程序代码引发的其他异常呢?

不确定,我认为您很少会看到来自提供程序代码的非系统错误(远程或运行时异常)。

如果将异常包装在EJBException中,会有所不同吗?

是。这将影响您如何处理客户端代码中的异常。

(参考:Enterprise JavaBeans 3.0,Bill Burke,O’Reilly)

希望对您有所帮助。



 类似资料:
  • 我正在用VSCode中的C#编写一个语音到文本的模型。模型正确地转录了第一个文件。当我添加新文件并尝试转录时,出现以下错误: 发生异常:CLR/System。ApplicationException类型为“System”的异常。系统中发生ApplicationException“”。私有的CoreLib。dll,但未在Microsoft的用户代码中处理:“异常,错误代码:0x8(SPXERR\u文

  • 我使用硒网格3.3.1在mac OS Sierra和运行远程命令从窗口(使用C#与硒3.3.1)。当我试图使用预期条件时。ElementToBeClickable我得到以下异常: 系统捕获到NotImplementedException HResult=-2147467263消息=生成信息:版本:'3.3。1',修订版:'5234b32',时间:'2017-03-10 09:04:52-0800'

  • 问题内容: 我收到应用程序异常 每次当我尝试单击DataGridView时。 我收到错误消息 {“索引-1没有值。”}(SystemIndexOutOfaRange异常)。 在行上 而且我无法调试它。请帮助我找出导致此问题的原因以及如何对其进行调试? 问题答案: 我猜想您已经将一个最初为空的List(或其他不生成列表已更改事件的集合)绑定到了您的,然后将项目添加到了此List中。 您添加的项目将正

  • 当我们试图从远程主机进行访问时,会出现以下异常 连接到授权网关https://gde_poc_crdh.service.anz:443/ag-dev... 连接到授权网关时出错:javax.net.ssl.sslhandShakeException:sun.security.validator.validatoreXception:PKIX路径构建失败:sun.security.provider.

  • 这个项目以前来自intellij,现在迁移到android studio作为Gradle android项目。我希望添加google play服务依赖使用gradle以后,我找不到具体的jar别处...以前这个项目使用ant运行良好,在android studio中导入为gradle后,我得到gradle mergedebugresources异常。 希望有人指导我,我是一个新的Gradle&an

  • 我正在从一个空的MVC构建一个OWIN登录,我刚刚开始添加这个部分,在创建一个要放入URL的身份声明之后,使用我的数据库登录用户。 这是我创建登录用户声明的代码 这是我的Show.cshtml代码 这是我的代码,我调用我的数据库,并为登录用户存储我的数据 我的登录(登录模型输入)完成并返回到Show.cshtml,然后在这里有一个异常@Html。AntiForgeryToken().我得到的例外是