让我们快速回顾一下有关消息驱动Bean的特殊处理。

MDB的入口点是重写的onMessage方法。 它不提供引发检查异常的任何作用域,因此,如果要处理错误情形,则需要从代码中传播未检查异常(java.lang.RuntimeException的子类)。

异常类型

EJB规范定义了两类异常,并且容器根据明确陈述的语义(同样,在EJB规范中)将一种与另一种区别。

应用例外

如果您抛出一个非java.rmi.RemoteException或其子类的已检查异常(对于MDB来说是不可能的,但其他EJB可以使用此异常),或者它不是一个以@ javax.ejb.ApplicationException注释的RuntimeException(未检查)将其视为应用程序异常。 结果,如果由@ javax.ejb.ApplicationException rollback属性指定,它将回滚事务,并保留MDB实例以供重用–这是非常重要的注意事项。

@ApplicationException(rollback = true)
public class InvalidCustomerIDException extends RuntimeException {public InvalidCustomerIDException(){super();}
}

系统异常

如果抛出java.rmi.RemoteException (已检查的异常)或其子类,或者抛出了未用@ javax.ejb.ApplicationException注释的RuntimeException(未检查),则容器会将其视为系统异常。 结果,它执行某些操作(例如事务回滚)并丢弃MDB实例(这很关键)

public class SystemExceptionExample extends Exception {public SystemExceptionExample(){super();}
}

重要的是要考虑到MDB实例的丢弃 。 如果发生系统异常,容器将始终丢弃该实例–因此,请确保您出于预期目的使用这些异常。 如果您使用的是应用程序异常,并且它们是未经检查的异常(对于MDB,则必须使用它们),请确保使用@ javax.ejb.ApplicationException对其进行注释–这将确保不丢弃 MDB实例本身。

在高负载下,您可能希望池中有尽可能多的MDB,并且希望避免MDB实例退出服务状态。 明智的异常处理可以帮助您实现此目标。 就像使用@ javax.ejb.ApplicationException注释异常类并将其余的留给容器一样简单:-)

参考文献

EJB(3.2)规范是一个465页的PDF,乍一看可能令人生畏,但它是一个巨大的资源,而且并不难掌握。 如果您想更详细地了解异常处理语义,请查阅第9章 ,该主题专门针对该主题。

干杯!

翻译自: https://www.javacodegeeks.com/2015/06/quick-tip-exception-handling-in-message-driven-beans.html

快速提示:消息驱动Bean中的异常处理相关推荐

  1. bean创建异常_快速提示:消息驱动Bean中的异常处理

    bean创建异常 让我们快速回顾一下关于消息驱动Bean的特殊处理. MDB的入口点是重写的onMessage方法. 它不提供引发检查异常的作用域,因此,如果要处理错误情形,则需要从代码中传播未检查异 ...

  2. EJB 3.0中会话Bean,实体Bean,消息驱动Bean的作用和例子

    关键词:EJB 3.0,会话Bean,实体Bean,消息驱动Bean EJB 3.0规范使开发EJB比过去更容易,可能诱惑你考虑开发第一个EJB.如果真是这种情况,那么祝贺你,你已经成功避免了在你以前 ...

  3. aws sqs_在Spring使用AWS SQS创建消息驱动Bean

    aws sqs 在我之前的文章中,我展示了一个简单的示例,该示例如何将AWS SQS与Spring Framework结合使用以将消息放入队列并从队列中读取消息. 在本文中,我将更进一步,并使用Spr ...

  4. 在Spring使用AWS SQS创建消息驱动Bean

    在我之前的文章中,我展示了一个简单的示例,该示例如何将AWS SQS与Spring Framework结合使用以将消息放入队列中并从队列中读取消息. 在本文中,我将更进一步,并使用Spring创建一个 ...

  5. 火狐侧边栏_快速提示:在Firefox中使用Google Talk边栏

    火狐侧边栏 Instead of using the Google Talk client embedded in Gmail, why not use it in your sidebar inst ...

  6. spring_快速提示:在Spring中引用其他属性

    spring 在Spring属性(或yaml)文件中,我们可以使用$ {..}语法引用其他属性. 例如: external.host=https: //api.external.comexternal ...

  7. EJB_消息驱动发展bean

    消息驱动发展bean Java信息服务(Java MessageService) Java 信息服务(Java Message Service,简称 JMS)是用于訪问企业消息系统的开发商中立的API ...

  8. 如何在 Lightroom 中更高效的获取快速提示?

    欢迎观看 Lightroom Classic 教程,小编带大家学习 Lightroom Classic 的基本工具和使用技巧,了解如在 Lightroom 中更高效的获取快速提示. 查看这些提示,以帮 ...

  9. SpringCloud微服务-服务注册发现-负载均衡-服务调用-服务降级-服务网关-配置中心-消息总线-消息驱动-链路追踪-alibaba-nacos-sentinel-seata理论原理分析

    SpringCloud理论技术 概述 ​ Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总 ...

最新文章

  1. python tkinter窗口弹出置顶的方法
  2. wps多人协作后怎么保存_剥开的柚子怎么保存 柚子剥开后可以放几天
  3. iOS并发(多线程)
  4. 如何取消IE窗口的全屏显示
  5. asp.net treeView绑定
  6. html模板安装到织梦,织梦网站安装教程 织梦模板通用安装图文教程
  7. 实验4-2-3 验证“哥德巴赫猜想” (20 分)
  8. 如何用互联网思维搞定零售业
  9. cocos2dx学习:TexturePacker的使用
  10. 关闭word 2010时每次都提示:所做更改会影响共用模板Normal.dotm
  11. Flask 与 Django 框架对比
  12. C++ for_each函数
  13. android照片涂抹功能,android:照片涂画功能实现过程及原理详解
  14. 【HbuilderX+微信小程序开发者工具解决报错问题】
  15. 给“习得性无助”者的回信
  16. 【女黑客看《流浪地球2》是什么体验】
  17. [原创]从程序员角度分析安徽电信HTTP劫持的无耻行径,以及修改Hosts文件,使用OPENDNS无效情况下的解决方案...
  18. hbase+dataframe+java_Java实现Spark将DataFrame写入到HBase
  19. 算法竞赛入门(2)学习笔记——循环结构程序设计
  20. 微分方程(有阻尼的简谐运动)

热门文章

  1. 【最全最详细】publiccms实现将公共部分提取成单独模块引入
  2. LinkedHashSet VS HashSet
  3. 多行单列CV小技能----Alt加鼠标滚轮
  4. android之微信分享文本
  5. android volley 上传图片 和参数,Android使用Volley实现上传文件功能
  6. arm linux gcc 编译,Linux arm-linux-gcc交叉编译环境配置
  7. java开发可以转什么软件有哪些_转行开发软件Java编程必须会什么
  8. discuz 版块导航function_forumlist.php,Discuz! X2“扩建”左侧版块导航 让社区层次一目了然...
  9. lambda 匿名内部类_Lambda运行时内部:窥视无服务器巢穴
  10. flatmap_flatMap()与concatMap()与concatMapEager()– RxJava常见问题解答