问题标签 [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.

0 投票
1 回答
1854 浏览

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
0 投票
3 回答
1135 浏览

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 的错误跟踪器上创建了一张票,以防它是一个错误。

0 投票
1 回答
561 浏览

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单独的@ApplicationScopedCDI bean 中的异步观察者方法(用 注释)处理。

所描述的解决方案效果很好。但是,我注意到,当我在异步事件中同时触发几个长任务时,实际上只有四个在运行,而其余的则在排队。一旦四个正在运行的事件之一完成,第一个排队的事件就会开始处理。

所以,我的问题是:

  1. 如何检查有多少线程可用于 CDI 事件的真正异步处理?
  2. 如何在异步观察者方法中检查有多少事件排队等待处理?
0 投票
1 回答
241 浏览

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(通过属性选择加入)

我看不到如何“通过财产选择加入”?

0 投票
0 回答
3177 浏览

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

如此处所述: https ://docs.oracle.com/javaee/7/api/javax/enterprise/inject/spi/BeforeBeanDiscovery.html#addAnnotatedType-javax.enterprise.inject.spi.AnnotatedType-java.lang.String-

此方法已从 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,因此警告消息仍然存在。

有人知道如何解决这个问题吗?

0 投票
1 回答
230 浏览

java - 你能触发 AbstractClass 类型的 CDI 2.0 事件吗?

(作为背景,我读过你认为你对 CDI 事件了如指掌……再想一想!所以我至少对 CDI 事件中的许多边缘情况非常熟悉。)

我使用 Weld 3.0.4.Final 作为 CDI 2.0 的实现。

我有一个AbstractFoo<? extends T>我想作为 CDI 事件触发的实例。我们将其称为有效载荷。这就是我对有效载荷的全部了解。

T定义为T extends MetaDataMetaData是一个接口。

由于各种不重要的原因,我必须以编程方式触发有效负载,所以我这样做:

显然,这里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,但我想要一些方法来为有效负载选择“正确”的观察者方法.

0 投票
1 回答
109 浏览

jakarta-ee - CDI 扩展动态更新属性

我阅读了一些关于 CDI 自定义扩展的文档,并阅读了一些示例代码,例如以下链接上的属性加载器:Link-A - Link-B

我写了一个像这样的代码的简单 cdi 扩展。

这是我的 InjectionPointTarget 实现:

这是我的 SystemPropertiesLoader :

和注释:

这是我的用例:

现在我的问题是更新 /proc/meminfo 后 memUsed 属性没有改变。
怎么了 ?
可以为此创建动态 CDI 扩展吗?
注 1:我复制并粘贴整个代码。
注 2:/proc/meminfo 是 Linux&Unix 操作系统支持的 proc 文件系统中使用的内存信息。

0 投票
1 回答
409 浏览

java - CDI 2.0,Java SE - 在weld-se-shaded 3.0.5.Final 中未调用条件观察者方法

我遇到了一个没有被调用的条件观察者方法的问题。这是代码,从一个junit测试开始:

这是具有条件观察者方法的类:

最后是事件类:

测试失败,因为 event.msg 不应该是 null。日志输出不显示任何“观察”输出。如果条件被删除,则测试通过。

有任何想法吗?谢谢!

0 投票
1 回答
467 浏览

cdi - CDI 2.0 可以与 weblogic 12c 一起使用吗?

我正在使用 Weblogic 12.2.1.3.0,我想知道我是否可以使用 CDI 2.0。我的 beans.xml 如下所示:

0 投票
1 回答
115 浏览

event-listener - 为什么 CDI 不能在单例类中工作

单例类正在触发事件,但容器未调用 CDI 事件侦听器。

下面,DataLoaderSessionBean 单例类中的 creatData() 调用 loadUsers() 方法,而 loadUsers() 又触发了一个事件,假设调用 XMLDataListener.UserData() 但调用从未发生。但是,如果我将类从单例更改为有状态或无状态会话 bean,那么一切正常。

这是事件监听器。容器未调用此事件侦听器类的 userData() 方法。

监听器接口:

事件数据

知道为什么此功能适用于会话 bean 而不适用于单例吗?

谢谢