问题标签 [cdi-2.0]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 为什么 Event.fireAsync() 需要 @ObservesAsync 注释?
在 CDI 2.0中,可以通过调用异步触发事件Event.fireAsync()
,然后使用带@ObservesAsync
注释的侦听器侦听此事件。
为什么我们同时需要Event.firesAsync()
and @ObservesAsync
?
- CDI 2.0 不能异步处理由 触发
Event.fire()
和捕获的事件@ObservesAsync
吗? - 或者反过来说,为什么 CDI 2.0 不能异步处理由
Event.fireAsync()
cauguth with触发的事件@Observes
?
cdi - Weld 3 启动时发出警告,其中 XSD 无效 beans.xml 用于焊接:扫描标记
我刚刚将 Weld 从 2.4.4 版本更新到 3.0.1。我在应用程序启动时遇到以下错误,我找不到解决方案。我正在使用焊接 SE。
包含一个特定于焊接的beans.xml
标签以在扫描中包含一些类(因为 CDI 规范仅支持排除)。
我使用以下 Maven Weld SE 依赖项。
你能告诉我我应该怎么做才能解决这个问题吗?我检查了 CDI 2.0 XSD,但没有找到。也许,CDI 现在原生支持扫描的包含限制?或者 Weld XSD 可能发生了变化?
我已经在Weld 的错误跟踪器上创建了一张票,以防它是一个错误。
java - CDI 2.0:如何检查使用 Event.fireAsync() 触发的异步事件可以同时运行多少
我正在使用 Jersey、CDI 2.0(Weld 3.0.1.final 实现)和 Tomcat 编写 REST Web 服务。Web 服务的目标是启动可以运行几分钟甚至几小时的长时间计算任务。任务应该从发送到 web 服务的 HTTP POST 请求开始,但是请求必须立即完成并将响应发送回客户端,而启动的任务应该在另一个线程上完成它的工作。
我已经通过使用 CDI 2.0 及其Event.fireAsync()
允许异步处理事件的方法解决了这个问题。处理 POST 请求的 JAX-RS 资源类触发异步事件,然后由@ObservesAsync
单独的@ApplicationScoped
CDI bean 中的异步观察者方法(用 注释)处理。
所描述的解决方案效果很好。但是,我注意到,当我在异步事件中同时触发几个长任务时,实际上只有四个在运行,而其余的则在排队。一旦四个正在运行的事件之一完成,第一个排队的事件就会开始处理。
所以,我的问题是:
- 如何检查有多少线程可用于 CDI 事件的真正异步处理?
- 如何在异步观察者方法中检查有多少事件排队等待处理?
wildfly - WildFly 12.0.0.Final + Weld 3.0.3.Final - 如何使用 CDI 2.0?
在 Weld.org 页面上,它表示 WildFly 12.0.0.Final:
WildFly 12.0.0.Final Weld 3.0.3.Final CDI 1.2 和 CDI 2.0(通过属性选择加入)
我看不到如何“通过财产选择加入”?
deprecated - JSF 2.3、CDI 2.0 | com.sun.faces.flow.FlowDiscoveryCDIHelper 类已从 CDI 1.1 中弃用
在带有 WELD 3 的 Tomcat 8.5 上为 JSF 2.3、CDI 2 配置了一个 maven webapp。
无法弄清楚,如何解决此警告消息:
警告 ojwBootstrap [addAnnotatedType:118] WELD-000146:用于类 com.sun.faces.flow.FlowDiscoveryCDIHelper 的 BeforeBeanDiscovery.addAnnotatedType(AnnotatedType) 已从 CDI 1.1 中弃用!
pom.xml
此方法已从 CDI 1.1 中弃用,应改为使用 addAnnotatedType(AnnotatedType, String)。
搜索此警告消息将我带到: https ://github.com/javaee/glassfish/issues/22094
这有点不同,因为他没有注入 FacesContext,但堆栈跟踪在其他条目中包含与我一样的消息。
如那里所述,我现在使用“ConfigurationBean.java”来使用真正的 JSF 2.3 并将 [beans.xml] 设置为 [bean-discovery-mode="all"]。但由于这仅适用于@Inject FacesContext,因此警告消息仍然存在。
有人知道如何解决这个问题吗?
java - 你能触发 AbstractClass 类型的 CDI 2.0 事件吗?
(作为背景,我读过你认为你对 CDI 事件了如指掌……再想一想!所以我至少对 CDI 事件中的许多边缘情况非常熟悉。)
我使用 Weld 3.0.4.Final 作为 CDI 2.0 的实现。
我有一个AbstractFoo<? extends T>
我想作为 CDI 事件触发的实例。我们将其称为有效载荷。这就是我对有效载荷的全部了解。
T
定义为T extends MetaData
。 MetaData
是一个接口。
由于各种不重要的原因,我必须以编程方式触发有效负载,所以我这样做:
显然,这里broadcaster
现在设置为触发我的有效载荷。我的意图是这些事件应该被传递给寻找AbstractFoo
由任何扩展类型参数化的 -or-its-subclasses 实例的观察者MetaData
。
但是当我这样做时broadcaster.fire(payload)
,我注意到像这样的观察者方法:
……不要被叫。 (这? extends MetaDataSubclass
似乎是罪魁祸首;如果观察到的参数很简单,Object
那么显然该方法会被通知。)
具体来说,假设:
- 一个
MatchingQualifier
字面量出现在someQualifiers
, 和 MetaDataSubclass
是一个扩展的类MetaData
,并且Foo
是一个扩展的类AbstractFoo
…为什么不调用观察者方法?
需要明确的是,我确信这不是错误,而是我的理解中缺少的东西。我想知道我错过了什么。
(交叉发布到developer.jboss.org。)
测试用例
这是一个使用更简单结构的测试用例。
只有第一个观察者方法被调用。我想了解是什么阻止了第二个被调用。我知道 an-unknown-type-that-is-a-Number
不能分配给 an-unknown-type-that-is-a- Integer
,但我想要一些方法来为有效负载选择“正确”的观察者方法.
java - CDI 2.0,Java SE - 在weld-se-shaded 3.0.5.Final 中未调用条件观察者方法
我遇到了一个没有被调用的条件观察者方法的问题。这是代码,从一个junit测试开始:
这是具有条件观察者方法的类:
最后是事件类:
测试失败,因为 event.msg 不应该是 null。日志输出不显示任何“观察”输出。如果条件被删除,则测试通过。
有任何想法吗?谢谢!
cdi - CDI 2.0 可以与 weblogic 12c 一起使用吗?
我正在使用 Weblogic 12.2.1.3.0,我想知道我是否可以使用 CDI 2.0。我的 beans.xml 如下所示:
event-listener - 为什么 CDI 不能在单例类中工作
单例类正在触发事件,但容器未调用 CDI 事件侦听器。
下面,DataLoaderSessionBean 单例类中的 creatData() 调用 loadUsers() 方法,而 loadUsers() 又触发了一个事件,假设调用 XMLDataListener.UserData() 但调用从未发生。但是,如果我将类从单例更改为有状态或无状态会话 bean,那么一切正常。
这是事件监听器。容器未调用此事件侦听器类的 userData() 方法。
监听器接口:
事件数据
知道为什么此功能适用于会话 bean 而不适用于单例吗?
谢谢