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

从MDB触发的CDI事件不应该在SessionScoped bean中捕获

侯池暝
2023-03-14

从EJB计时器触发的CDI事件有问题。

关键是,save事件可以通过手动用户操作触发(例如,从CDI SessionScoped bean方法触发)。在这种情况下,所有注册的观察者都应该捕捉到它。但是,如果从计时器触发的CDI事件被SessionScoped bean捕获(这无论如何都不是必需的),则会抛出一个异常,无法找到活动上下文。

因此...我如何告诉CDI事件机制,只有Application ationScoped bean应该捕获事件,以防它被EJB定时器触发?

共有2个答案

费和惬
2023-03-14

使用本stackoverflow帖子中所述的限定符:选择某些CDI事件观察者

(不确定它是否真的是复制品,但我想是的)

田化
2023-03-14

我找到了解决办法。

@Obdes包含参数"通知观察者"。如果您将此设置为接收。IF_EXISTS,CDI不会在HTTP请求之外创建SessionScoped bean(如果没有)。

因此,EJB计时器触发的事件不会被SessionScoped bean捕获(因为它不存在),而手动触发的事件将被捕获,因为SessionScoped bean存在一个实例。

 类似资料:
  • 一点背景: 我对也做了同样的操作--创建了一个将添加到源列表的方法,并且每当更新源列表时,它将使用JavaFX线程上的UI等价类更新目标列表: 因此,现在如果我有更新的并且其项属性更新不是在JavaFX线程上,我就可以轻松地获得一个在JavaFX中显示的列表: 所以现在的问题是: 我的预期是,当显示在中时,只要值发生更改,它就会更新,但预期的行为只持续几秒钟,之后ListView停止更新,这是因为

  • 我希望运行在线程中的udp服务器在每次接收到数据报时都会触发一个事件,并发送格式为json的数据。 已为此事件定义了一个侦听器,它将调用websocketendpoint方法向所有连接的客户端广播此消息: 以及实际触发事件的处理程序: 是一个简单的POJO,其中包含要广播的消息。限定符: 这些是依赖项注入的第一步,因此我不太确定应该如何从线程内触发事件,以及如何初始化对象。我发现这个页面建议使用和

  • 用户可以从datalist或can类型中选择一个项目,输入它自己的值。我通过JSON调用PHP脚本连接到数据库,以填充表单其余部分的其他信息。我希望当用户在列表输入中键入名称时(因此当内容模糊时),或者当用户单击DataList中的某个选项时,这会触发。 使用当输入失去焦点时会触发该函数,但当从数据列表中选择一项时,它也会等待“直到输入失去焦点,我希望事件立即触发” 使用单击datalist中的一

  • 使用mui.trigger()方法可以动态触发特定DOM元素上的事件。 .trigger( element , event , data ) element Type: Element 触发事件的DOM元素 event Type: String 事件名字,例如:'tap'、'swipeleft' data Type: Object 需要传递给事件的业务参数 示例 自动触发按钮的点击事件: var

  • 问题内容: 我的整个项目都使用(Bluebird)Promises,但是有一个使用EventEmitter的特定库。 我想要实现以下目标: 我在Promises链中读了EventEmitter的答案。这给了我一种执行’connect’事件的回调的方法。这是我到目前为止所到之处 现在如何进一步链接“ eventB”? 问题答案: 我假设您想为每个事件做不同的事情。即使由的动作触发,您也可以将其视为另

  • 问题内容: 我已使用将事件附加到文本框。它工作正常。当我想通过另一个函数以编程方式触发事件时,出现了我的问题。 我该怎么做? 问题答案: 您可以在IE 8或更低版本上使用fireEvent,在大多数。要创建您要触发的事件,可以使用或取决于浏览器。 这是一段不言自明的代码(来自原型),它在上触发事件: