当前位置: 首页 > 知识库问答 >
问题:

单例EJB中的系统异常

方嘉言
2023-03-14

我正在阅读EJB规范,从我的观点来看,我被一个矛盾弄糊涂了,特别是在单例Bean的生命周期回调方法中抛出系统异常时,容器的行为方式。

第12.3节。1 :

任何生命周期拦截器回调方法引发的运行时异常都会导致在拦截器链解绑和任何关联拦截器实例被丢弃(单例bean除外)后,bean实例及其拦截器被丢弃。

第4.8节。4 :

在Singleton初始化期间发生的错误被认为是致命的,并且必须导致丢弃Singleton实例。可能的初始化错误包括注入失败、从PostConstruct方法引发的系统异常或PostConstruct方法容器管理的事务未能成功提交。

与其他组件类型的实例不同,从单例的业务方法或回调引发的系统异常不会导致单例实例的破坏。

那么,根据第4.8节,什么是正确的呢。4.如果在@PostConstruct方法或拦截器@PostConstruct方法中抛出系统异常Bean是否已丢弃?我尝试过抛出一个EJBException,结果是bean初始化失败。

更令人惊讶的是,当从singletonbean业务方法抛出EJBException时,客户机收到了异常,没有进一步执行其他方法。我可以假设Bean实例已被丢弃吗?根据规范,不应该导致Bean实例的破坏。在这两种情况下,什么是正确的?


共有1个答案

邰胤
2023-03-14

我要的是代码,因为可能是供应商的错误。正如您所读到的,如果在@postcontract time有一个EjbException,则不会构建单例。在此之后,单例方法可以抛出任何类型的异常(已检查或未检查),并且实例应该仍在运行。

拦截器生命周期附加到单例生命周期,因此,如果拦截器不能执行其@PostContruct,则不会创建单例。

要记住的另一件事是:如果EJB(@Stateless或@Stateful)抛出一个EjbException(或其拦截器),实例会自动被丢弃,因此,规范中有一条注释说:[58]除了单例。见第4.8节。4

 类似资料:
  • 工单系统 1.工作台新建工单 工单是基于邮箱流转,采用协同处理的原则,为跨部门协同与多部门流转提供支持,协作和技术支持人员无需登录即可通过工单完成支持和流转,客服可以通过回复邮件直接与客户联系,回复用户问题。 首页>登录工作台>坐席工作台>新建工单 新建工单具备三个渠道,分别是在线人工工作台入口、工单系统入口、电话语音工作台入口,不同入口的新建工单所带参数不同,此处文档仅介绍在线人工工作台入口及工

  • 工单系统 工单是一种在内部流转的表单,可以把客户反馈的问题流转给每一步的处理者,处理完后给客户一个反馈。 目前我们支持三种生成工单的方式,分别是客服在工作台创建工单、客服在工单中心创建工单、访客在各个渠道留言。分别如下所示: 1、在工作台点击“创建工单”,在弹窗中输入工单内容,选择受理客服(受理客服也可为空)。系统会自动带入工作台上保存的访客信息。 2、在工单中心点击“创建工单”,在新页面中输入工

  • 我试图在日食中运行下面的示例一段时间。 https://github.com/jboss-developer/jboss-eap-quickstarts/tree/master/ejb-remote 我已经创建了一个ejb项目,并导入了所有的类文件并将其放入。属性文件。现在代码中没有错误,EJB已成功部署到JBoss服务器上。当我尝试运行RemoteEJBClient时。java,我遇到了以下异常

  • 主要内容:1.订单系统在企业中的角色,2.订单系统与各业务系统的关系,3.订单系统上下游关系,4.订单系统的业务架构1.订单系统在企业中的角色 在搭建企业订单系统之前,需要先梳理企业整体业务系统之间的关系和订单系统上下游关系,只有划分清业务系统边界,才能确定订单系统的职责与功能,进而保证各系统之间高效简洁的工作。 2.订单系统与各业务系统的关系 2.1 对外系统 所有给企业外部用户使用的系统都在这一层,包括官网、普通用户使用的C端,还包括给商户使用的商家后台和在各个销售渠道进行分销的系统,比如与

  • 我已经在Ubuntu14.04上配置了Hadoop2.6.0。我正在运行wordcount map reduce程序,最初是为了了解map reduce作业。我在访问文件系统时遇到了一些问题。我将Hadoop主目录放在中。 > 驱动程序 hdfs-site.xml yarn-site.xml 运行map reduce Jar:

  • 服务异常事件 function onWorkerError(\swoole_server $server,$worker_id,$worker_pid,$exit_code); 当worker/task_worker进程发生异常后会在Manager进程内回调此函数 $worker_id是异常进程的编号 $worker_pid是异常进程的ID $exit_code退出的状态码,范围是 1 ~255